KB2481274 - Ispravka: Upit koji koristi funkciju DATEDIFF može sporo da radi u SQL Server 2005 ili SQL Server 2008 ili SQL Server 2008 R2

Microsoft distribuira Microsoft SQL Server 2005 ili Microsoft SQL Server 2008 ili SQL 2008 R2 ispravke kao jednu datoteku koja se može preuzeti. Pošto su ispravke kumulativne, svako novo izdanje sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje microsoft SQL Server 2005 ili Microsoft SQL Server 2008 ili SQL 2008 R2

Simptomi

Pretpostavimo da pokrenete upit na instanci sistema Microsoft SQL Server 2005 ili Microsoft SQL Server 2008 ili Microsoft SQL Server 2008 R2 koji ispunjava sledeće uslove:

  • Upit sadrži operator relacionog sistema. Na primer, operator manji od (<).

  • U operandu relacionog operatora postoji funkcija DATEDIFF.

U tom trenutku, SQL Server može da izabere plan podoptimalnih upita za pokretanje ovog upita. Zbog toga upit može sporo da teиe.

Uzrok

Do ovog problema dolazi zato što SQL Server optimizator potcenjuje broj redova koji će biti vraćeni kada koristite funkciju DATEDIFF.

Rešenje

Kumulativne informacije o ažuriranju

SQL Server 2005 servisni paket 3

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 15 za SQL Server 2005 servisni paket 3. Za više informacija o ovom paketu kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2507766 Kumulativni paket ispravki 15 za SQL Server 2005 servisni paket 3Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje ispravke za SQL Server 2005. Microsoft preporučuje da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

960598 SQL Server 2005 builds koji su objavljeni nakon što je SQL Server 2005 servisni paket 3 objavljen Hitne ispravke za Microsoft SQL Server 2005 kreirane su za određene SQL Server servisne pakete. Morate primeniti hitnu ispravku za SQL Server 2005 servisni paket 3 na instalaciju sql Server 2005 servisnog paketa 3. Podrazumevano, sve hitne ispravke koje su obezbeđene u SQL Server servisnom paketu uključene su u sledeći SQL Server servisni paket.

SQL Server 2005 servisni paket 4

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 2 za SQL Server 2005 servisni paket 4. Za više informacija o ovom paketu kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2489409 Kumulativni paket ispravki 2 za SQL Server 2005 servisni paket 4Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje ispravke za SQL Server 2005. Microsoft preporučuje da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2485757 SQL Server 2005 builds koji su objavljeni nakon što je SQL Server 2005 servisni paket 4 objavljen Hitne ispravke za Microsoft SQL Server 2005 kreirane su za određene SQL Server servisne pakete. Morate primeniti hitnu ispravku za SQL Server 2005 servisni paket 4 na instalaciju sql Server 2005 servisnog paketa 4. Podrazumevano, sve hitne ispravke koje su obezbeđene u SQL Server servisnom paketu uključene su u sledeći SQL Server servisni paket.

SQL Server 2008 servisni paket 1

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 13 za SQL Server 2008 servisni paket 1. Za više informacija o ovom paketu kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2497673 Kumulativni paket ispravki 13 za SQL Server 2008 servisni paket 1Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje ispravke za SQL Server 2008. Microsoft preporučuje da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

970365 SQL Server 2008 builds koji su objavljeni nakon što je SQL Server 2008 servisni paket 1 objavljen Hitne ispravke za Microsoft SQL Server 2008 kreirane su za određene SQL Server servisne pakete. Morate primeniti hitnu ispravku za SQL Server 2008 servisni paket 1 na instalaciju SQL Server 2008 servisnog paketa 1. Podrazumevano, sve hitne ispravke koje su obezbeđene u SQL Server servisnom paketu uključene su u sledeći SQL Server servisni paket.

SQL Server 2008 servisni paket 2

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 3 za SQL Server 2008 servisni paket 2. Za više informacija o ovom paketu kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2498535 Kumulativni paket ispravki 3 za SQL Server 2008 servisni paket 2Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje ispravke za SQL Server 2008. Microsoft preporučuje da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2402659 SQL Server 2008 builds koji su objavljeni nakon što je SQL Server 2008 servisni paket 2 objavljen Hitne ispravke za Microsoft SQL Server 2008 kreirane su za određene SQL Server servisne pakete. Morate primeniti hitnu ispravku za SQL Server 2008 servisni paket 2 na instalaciju SQL Server 2008 servisnog paketa 2. Podrazumevano, sve hitne ispravke koje su obezbeđene u SQL Server servisnom paketu uključene su u sledeći SQL Server servisni paket.

SQL Server 2008 R2 servisni paket 1

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 1 za SQL Server 2008 R2 servisni paket 1. Za više informacija o nabavljanju ovog paketa kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2544793 Kumulativni paket ispravki 1 za SQL Server 2008 R2 servisni paket 1Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje SQL Server 2008 R2 ispravke. Preporučujemo da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2567616 SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 Service Pack 1 was released

SQL Server 2008 R2

Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 7. Za više informacija o nabavljanju ovog paketa kumulativnih ispravki za SQL Server 2008 R2 kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2507770 Kumulativni paket ispravki 7 za SQL Server 2008 R2 Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje SQL Server 2008 R2 ispravke. Preporučujemo da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

981356 SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 was released

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".

Rešenje

Da biste zaobišli ovaj problem, ponovo nađite upit tako da plan upita ne koristi funkciju DATEDIFF u predikatima. Na primer, sledeće stavke mogu da se sporo pokreću:create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) Međutim, upit možete ponovo da napisete kao sledeći da biste zaobiљli 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)

Reference

Za više informacija o postepenom modelu servisiranja za SQL Server kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

935897 Sql Server tim je dostupan u SQL Server timu za isporuku hitnih ispravki za prijavljene problemeZa više informacija o šemi imenovanja za ispravke sistema SQL Server kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

822499 Nova šema imenovanja za pakete softverskih ispravki za Microsoft SQL ServerZa više informacija o terminologiji softverskih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

824684 Opis standardne terminologije koja se koristi za opisivanje Microsoft softverskih ispravki

Potrebna vam je dodatna pomoć?

Unapredite veštine
Istražite obuku
Prvi nabavite nove funkcije
Pridružite se Microsoft insajdere

Da li su vam ove informacije koristile?

Hvala vam na povratnim informacijama!

Hvala za povratne informacije! Izgleda da će biti od pomoći ako vas povežemo sa našim agentima Office podrške.

×