"Microsoft" platina "Microsoft SQL Server 2008 R2" 1 pakeitimų paketą (SP1) arba "Microsoft SQL Server" 2012 pataisas viename atsisiunčiamą failą. Kadangi pataisos yra kumuliacinės, kiekvienoje naujoje versijoje yra visos karštosios pataisos ir visi saugos naujinimai, kurie buvo įtraukti į ankstesnį SQL serverio 2008 R2 1 pakeitimų paketą (SP1) arba SQL serverio 2012 naujinimo leidimą.
Simptomai
Apsvarstykite šį scenarijų. Vykdote užklausą "Microsoft SQL Server 2008 R2" arba "Microsoft SQL Server 2012", o užklausos optimizavimo priemonė generuoja vykdymo planą, kuriame yra aukščiausias operatorius. Pagal šį scenarijų, užklausa gali užtrukti ilgą laiką. Pvz., vykdote užklausą, panašų į šį:
SELECT TableA.Col1 FROM TableA JOIN TableB ON TableA.Col1 = TableB.Col1 WHERE TableA.Col2 = N'A' AND TableB.Col3 IN (SELECT Col1 FROM TableC )Ši užklausa apima du sujungimus. Vienas sujungimas yra tarp TableB ir TableC. (Tai reiškia, kad yra "preate".) Kitas sujungimas yra tarp A lentelės ir pirmojo sujungimo rezultato. Dalyje tvarka bus grąžinama TRUE, jei užklausa randa bent vieną eilutę, atitinkančią pirmą sujungimą. Todėl užklausos optimizavimo priemonė įtraukia aukščiausią operatorių į užklausų vykdymo planą. Tokia užklausa gali pateikti tik kelias eilutes. Tačiau gali užtrukti ilgiau nei tikėtasi šiai užklausai vykdyti. Atliekant faktinį užklausos vykdymo planą, apskaičiuotas eilučių skaičius labai skiriasi nuo faktinio eilučių skaičiaus. Tai turi įtakos užklausos optimizatoriaus gebėjimui tiksliai įvertinti skirtingų planų pasirinkimų kainą. Problema taip pat gali kilti, jei naudojate VIRŠUTINĮ operatorių arba jei naudojate vieną iš šių operatorių:
-
PARINKTIS (GREITA N)
-
"
-
EGZISTUOJA
Sprendimas
Kaupiamojo naujinimo informacija
"SQL Server 2008 R2" 2 pakeitimų paketas
Ši problema buvo pirmą kartą išleista Kaupiamasis naujinimas 1 SQL serverio 2008 R2 Service Pack 2. Jei norite gauti daugiau informacijos apie tai, kaip gauti šį kaupiamąjį naujinimų paketą, spustelėkite toliau pateiktą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2720425 Kaupiamojo naujinimo paketas 1, skirtas "SQL Server 2008 R2" 2 pakeitimų paketuiPastaba Kadangi komponavimo versijos yra kumuliacinės, kiekviena nauja pataisų versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio SQL serverio 2008 R2 pataisų leidimo. Rekomenduojame apsvarstyti, kaip taikyti naujausią pataisų leidimą, kuriame yra šios karštosios pataisos. Jei reikia daugiau informacijos, spustelėkite toliau esantį straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2730301 SQL serverio 2008 R2 komponavimo versijos, išleistos po "SQL Server 2008 R2" 2 pakeitimų paketo išleidimo
"SQL Server 2008 R2" 1 pakeitimų paketas
Ši problema buvo pirmą kartą išleista Kaupiamasis naujinimas 7 SQL serverio 2008 R2 Service Pack 1. Jei norite gauti daugiau informacijos apie tai, kaip gauti šį kaupiamąjį naujinimų paketą, spustelėkite toliau pateiktą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2703282 Kaupiamojo naujinimo paketas 7, skirtas "SQL Server 2008 R2" 1 pakeitimų paketuiPastaba Kadangi komponavimo versijos yra kumuliacinės, kiekviena nauja pataisų versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio SQL serverio 2008 R2 pataisų leidimo. Rekomenduojame apsvarstyti, kaip taikyti naujausią pataisų leidimą, kuriame yra šios karštosios pataisos. Jei reikia daugiau informacijos, spustelėkite toliau esantį straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2567616 SQL serverio 2008 R2 stato, buvo paleistas po to, kai buvo išleistas "SQL Server 2008 R2" 1 pakeitimų paketas
SQL serverio 2012
Šios problemos pataisa pirmą kartą buvo išleista Kaupiamasis naujinimas 2 SQL serverio 2012. Daugiau informacijos apie šį kaupiamųjų naujinimų paketą rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2703275 Kaupiamojo naujinimo paketas 2 SQL serverio 2012Pastaba Kadangi komponavimo versijos yra kumuliacinės, kiekviena nauja pataisų versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio SQL serverio 2012 pataisų leidimo. "Microsoft" rekomenduoja apsvarstyti naujausių pataisų leidimų, kuriuose yra šios karštosios pataisos, taikymą. Jei reikia daugiau informacijos, spustelėkite toliau esantį straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2692828 "SQL Server 2012" komponavimo versijos, išleistos po "SQL Server" 2012 išleidimo SQL serverio 2012 karštąją pataisą turite taikyti "SQL Server 2012" įdiegčiai.
SQL serverio 2008 R2
Šios problemos taisymas pirmą kartą buvo išleistas Kaupiamasis naujinimas 13. Jei norite gauti daugiau informacijos apie tai, kaip gauti šį kaupiamojo naujinimo paketą, skirtą "SQL Server" 2008 R2, spustelėkite toliau pateiktą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2679366 Kaupiamojo naujinimo paketas 13, skirtas "SQL Server 2008 R2"Pastaba Kadangi komponavimo versijos yra kumuliacinės, kiekviena nauja pataisų versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio SQL serverio 2008 R2 pataisų leidimo. Rekomenduojame apsvarstyti, kaip taikyti naujausią pataisų leidimą, kuriame yra šios karštosios pataisos. Jei reikia daugiau informacijos, spustelėkite toliau esantį straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
981356 SQL serverio 2008 R2 stato, buvo paleistas po to, kai buvo išleistas SQL Server 2008 R2Pastaba Įdiegę kaupiamąjį naujinimą, turėtumėte įjungti sekimo vėliavėlę 4199, kad įgalintumėte pataisą, pateikiamą šiame kaupiamajame naujinime, jei tenkinamos toliau nurodytos sąlygos:
-
Užklausos planas viršuje yra virš įdėtojo linijos sujungimo operatoriaus ("Join 1"), esančio kitos taikomos/sujungimo operatoriaus (2 jungtis) dešinėje pusėje.
-
Išorinėje 1 sujungimo pusėje yra išorinė nuoroda į išorinę 2 sujungimo pusę.
-
"Join 1" naudoja lygybės preso kairiajame stulpelyje, kuris yra unikalus.
Tokios užklausos pavyzdys rodomas skyriuje "Požymiai". (Tai reiškia, kad duomenų bazėje yra tam tikrų unikalumo apribojimų.) Jei yra kitų užklausų, kuriose yra viršus, parinktis (FAST N), arba yra operatorių ir pateikia panašius simptomus, bet netelpa čia aprašytą modelį, įjunkite sekimo vėliavėlę 4138.Įspėjimas Jei įgalinate sekimo vėliavėlę 4138, našumas gali sumažėti kai kurių kitų užklausų, kuriose yra viršus, parinktis (spartusis N), arba yra operatorių. Sekimo vėliavėlė 4138 turėtų būti naudojama tik esant šioms sąlygoms:
-
Jos poveikis lėtoms užklausoms, kuriose dalyvauja šie operatoriai, yra patvirtinamas.
-
Nėra kitų naudingų sprendimo būdų.
-
Kitose užklausose, kuriose yra panašių operatorių, regresijos nėra rasta.
Statusą
"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.
Sprendimas
Norėdami išspręsti šią problemą, naudokite kairįjį išorinį sujungimo operatorių arba bet kurį iš kelių OPTIMIZAVIMO patarimų.