KB2481274-FIX: užklausa, kuri naudoja funkciją DATEDIFF, gali veikti lėtai "SQL Server" 2005 arba "SQL Server" 2008 arba "SQL Server 2008 R2"

"Microsoft" platina "Microsoft SQL Server" 2005 arba "Microsoft SQL Server" 2008 arba "SQL 2008 R2" pataisymus kaip vieną atsisiunčiamą failą. Kadangi pataisos yra kumuliacinės, kiekviena nauja versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio "Microsoft SQL Server" 2005 arba "Microsoft SQL Server" 2008 arba "SQL 2008 R2" pataisų leidimo

Simptomai

Tarkime, kad vykdote užklausą "Microsoft SQL Server 2005" arba "Microsoft SQL Server" 2008 arba "Microsoft SQL Server 2008 R2" egzemplioriuje, kuris atitinka šias sąlygas:

  • Užklausoje yra sąryšinis operatorius. Pvz., mažiau nei (<) operatorius.

  • Funkcija DateDiff yra sąryšinių operatorių operandas.

Esant tokiai situacijai, "SQL Server" gali pasirinkti papildomą optimalų užklausos planą, kad paleistumėte šią užklausą. Todėl užklausa gali veikti lėtai.

Priežastis

Ši problema kyla dėl to, kad SQL serverio optimizatorius nepakankamai apskaičiuoja eilučių, kurios bus grąžintos naudojant funkciją DateDiff , skaičių.

Sprendimas

Kaupiamojo naujinimo informacija

"SQL Server 2005" 3 pakeitimų paketas

Ši problema buvo pirmą kartą išleista Kaupiamasis naujinimas 15 SQL serverio 2005 Service Pack 3. Daugiau informacijos apie šį kaupiamųjų naujinimų paketą rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:

2507766 Kaupiamojo naujinimo paketas 15 SQL serverio 2005 Service Pack 3Pastaba 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 2005 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:

960598 SQL serverio 2005 komponavimo versijos, išleistos po "SQL Server 2005" 3 pakeitimų paketo išleidimo "Microsoft SQL Server" 2005 karštosios pataisos kuriamos konkretiems "SQL Server" pakeitimų paketams. Norėdami įdiegti "SQL Server 2005" 3 pakeitimų paketą, turite taikyti SQL serverio 2005 3 pakeitimų paketo karštąją pataisą. Pagal numatytuosius "SQL Server" pakeitimų pakete pateiktas karštąsias pataisas yra įtraukta į kitą "SQL Server" pakeitimų paketą.

"SQL Server 2005" 4 pakeitimų paketas

Ši problema buvo pirmą kartą išleista Kaupiamasis naujinimas 2 SQL serverio 2005 4 pakeitimų paketui. Daugiau informacijos apie šį kaupiamųjų naujinimų paketą rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:

2489409 Kaupiamojo naujinimo paketas 2 SQL serverio 2005 4 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 2005 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:

2485757 SQL serverio 2005 komponavimo versijos, išleistos po "SQL Server 2005" 4 pakeitimų paketo išleidimo "Microsoft SQL Server" 2005 karštosios pataisos kuriamos konkretiems "SQL Server" pakeitimų paketams. Norėdami įdiegti "SQL Server 2005" 4 pakeitimų paketą, turite įdiegti "SQL Server 2005" 4 pakeitimų paketo karštąją pataisą. Pagal numatytuosius "SQL Server" pakeitimų pakete pateiktas karštąsias pataisas yra įtraukta į kitą "SQL Server" pakeitimų paketą.

"SQL Server 2008" 1 pakeitimų paketas

Šios problemos pataisymas pirmą kartą buvo išleistas Kaupiamasis naujinimas 13 SQL serverio 2008 1 pakeitimų paketui. Daugiau informacijos apie šį kaupiamųjų naujinimų paketą rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:

2497673 Kaupiamojo naujinimo paketas 13, skirtas "SQL Server 2008" 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 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:

970365 SQL serverio 2008 komponavimo versijos, išleistos po "SQL Server 2008" 1 pakeitimų paketo išleidimo "Microsoft SQL Server" 2008 karštosios pataisos kuriamos konkretiems "SQL Server" pakeitimų paketams. Norėdami įdiegti "SQL Server 2008" 1 pakeitimų paketą, turite įdiegti "SQL Server 2008" 1 pakeitimų paketo karštąją pataisą. Pagal numatytuosius "SQL Server" pakeitimų pakete pateiktas karštąsias pataisas yra įtraukta į kitą "SQL Server" pakeitimų paketą.

"SQL Server 2008" 2 pakeitimų paketas

Šios problemos pataisa pirmą kartą išleista 3 kaupiamąjį naujinimą, skirtą "SQL Server" 2008 2 pakeitimų paketui. Daugiau informacijos apie šį kaupiamųjų naujinimų paketą rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:

2498535 "SQL Server 2008" 2 pakeitimų paketo kaupiamojo naujinimo paketas 3Pastaba 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 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:

2402659 SQL serverio 2008 komponavimo versijos, išleistos po "SQL Server 2008" 2 pakeitimų paketo išleidimo "Microsoft SQL Server" 2008 karštosios pataisos kuriamos konkretiems "SQL Server" pakeitimų paketams. Norėdami įdiegti "SQL Server 2008" 2 pakeitimų paketą, turite įdiegti "SQL Server 2008" 2 pakeitimų paketo karštąją pataisą. Pagal numatytuosius "SQL Server" pakeitimų pakete pateiktas karštąsias pataisas yra įtraukta į kitą "SQL Server" pakeitimų paketą.

"SQL Server 2008 R2" 1 pakeitimų paketas

Ši problema buvo pirmą kartą išleista Kaupiamasis naujinimas 1 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:

2544793 Kaupiamojo naujinimo paketas 1, 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 2008 R2

Šios problemos taisymas pirmą kartą buvo išleistas Kaupiamasis naujinimas 7. 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:

2507770 "SQL Server 2008 R2" kaupiamojo naujinimo paketas 7 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 R2

Statusą

"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.

Sprendimas

Norėdami išspręsti šią problemą, perrašykite užklausą, kad užklausos planas neturėtų naudoti funkcijos DateDiff . Pavyzdžiui, toliau nurodyti gali veikti lėtai:create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) Tačiau galite perrašyti užklausą kaip šią problemą, Norėdami išspręsti šią problemą:create procedure proc_test2 @date datetimeasdeclare @datestr nvarchar(50), @sqlstr nvarchar(1024)set @datestr = CAST (DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) as nvarchar(50))set @sqlstr ='select COUNT (*) from t where c1 < ''' + @datestr + ''''exec (@sqlstr)

Nuorodos

Daugiau informacijos apie papildinio aptarnavimo modelį, skirtą "SQL Server", rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:

935897 Papildinio aptarnavimo modelį galima naudoti "SQL Server" komandai, kad būtų pateiktos praneštų problemų karštosios pataisosDaugiau informacijos apie "SQL Server" naujinimų pavadinimų suteikimo schemą rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:

822499 Nauja vardų suteikimo schema, skirta "Microsoft SQL Server" programinės įrangos naujinimų paketamsDaugiau informacijos apie programinės įrangos naujinimo terminiją rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:

824684 Įprastos terminologijos, vartojamos "Microsoft" programinės įrangos naujinimams apibūdinti, aprašas

Reikia daugiau pagalbos?

Tobulinkite savo įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijungti prie "Microsoft Insider"

Ar ši informacija buvo naudinga?

Dėkojame už jūsų atsiliepimus!

Dėkojame už jūsų atsiliepimą! Panašu, kad gali būti naudinga jus sujungti su vienu iš mūsų „Office“ palaikymo agentų.

×