Simptomi
Razmotrite sledeći scenario:
-
Na njemu se nalazi tabela koja ima grupisane indekse kolona, a tabela ima mnogo kolona (u stotinama).
-
Podaci (tip podataka) ovih kolona su veoma komprimovani podaci kao što je varchar.
-
U ovoj tabeli ćete pokrenuti select da biste izabrali veliki podskup ili sve kolone iz ove tabele.
-
Vaša izjava o izboru ima odredbu WHERE koja ograničava izlaz na veoma malo redova (upit je veoma selektivan).
U ovom scenariju, možete naići na neki od ili svih sledećih simptoma:
-
Uporedni obim posla (drugi upiti koji se izvršavaju istovremeno na serveru kao i ovaj upit), može naići na smanjenje performansi i gubitak protoka.
-
Možda ćete videti povremenu visoku upotrebu CPU-a.
-
Ako izvršite upit sys.dm_os_ring_buffers i prikažete stavke tipa planeraMonitor, pronalazite povremene poruke "planer bez prinosa" koje su evidentirane u vreme izvršavanja ovog upita.
-
Možete dobiti grešku planera koji nije dao u evidenciji grešaka i možda će biti generisana datoteka slike stanja memorije simptoma.
Rešenje
Problem je prvi put otklonjen u sledećoj kumulativnoj ispravki sql servera:
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodnu kumulativnu ispravku. Preporučujemo da preuzmete i instalirate najnovije kumulativne ispravke za SQL Server:
Više informacija
Popravi detaljeRadnici koji obrađuju segmente kolona (nekompjujući ih i skenirajući ih u potrazi za kvalifikovanim redovima) koristili su se za "prinos" upotrebe CPU-a drugim radnicima/uporednim izvršavanjem upita kada je određeni broj redova bio izlazni. Kada je odredba WHERE bila vrlo selektivna da proizvede mali broj redova, radnici koji obrađuju ovaj upit obradili su nekomprimovan i veliki broj segmenata (jer se vrlo mali broj redova kvalifikuje) pre nego što su odustali od CPU-a na kooperativan način da bi drugi radnici obradili svoj obim posla. To je dovelo do nepravilnog korišćenja CPU-a i degradacije protoka za uporedno opterećenje na poslu. Ispravka optimizuje i poboljšava algoritam deljenja CPU-a za takve upite u kolonama.
Reference
Saznajte više o terminologiji koju Microsoft koristi za opisivanje softverskih ispravki.