Microsoft distribuuje Microsoft SQL Server 2008 R2 opravy ako jeden súbor na stiahnutie. Pretože opravy sú kumulatívne, každé nové vydanie obsahuje všetky rýchlych opráv a všetky opravy zabezpečenia, ktoré boli zahrnuté do predchádzajúceho SQL servera 2008 R2 opraviť uvoľnenia.
Príznaky
Zoberme si nasledujúcu situáciu:
-
Aplikácia spustí dotaz, ktorý odkazuje na niektoré dočasné tabuľky v Microsoft SQL Server 2008 a v Microsoft SQL Server 2008 R2. Dočasné tabuľky sa v relácii vytvoria namiesto v uloženej procedúre.
-
Plán dotazu je uložený vo vyrovnávacej pamäti.
-
Viacerí používatelia používajú rovnaký dotaz v prostredí, ktoré je vysoko súčasné. Mnoho používateľov napríklad používa aplikáciu, ktorá spúšťa nasledujúci dotaz:
create table #x (col1 int) go insert into #x values (1) go select * from #x where col1 = 1 go
V tomto scenári sa vyskytnú problémy s výkonom aplikácie.Poznámka: Ďalšie informácie o tom, ako identifikovať tento problém, nájdete v časti Ďalšie informácie.
Príčina
Tento problém sa vyskytuje, pretože rovnaký dotaz plány sa vložia do vyrovnávacej pamäte v rovnakom hash vedierko pre každého používateľa, keď je text dotazu rovnaký. Keď sa veľký počet plánov zhoduje s rovnakým segmentom (označuje sa aj ako reťazec hash), čas na vyhľadanie plánu vo vyrovnávacej pamäti sa výrazne zvýši a problémy s výkonom sa môžu vyskytnúť. Okrem toho môžu pracovné vlákna stretnúť s ťažkým spinlock tvrdením a ďalšie vlákna sú ovplyvnené, ak tieto pracovné vlákna nevykonajú správny výnos z plánovača.
Riešenie
Poznámka: Momentálne je k dispozícii iba aktualizácia pre SQL Server 2008 R2. Pre SQL Server 2008 nájdete v časti alternatívne riešenie tento problém obísť.
Kumulatívna aktualizácia informácií
SQL Server 2008 R2 Service Pack 1
Oprava tohto problému bola prvýkrát vydaná v kumulatívnej aktualizácii 1 pre SQL Server 2008 R2 Service Pack 1. Ďalšie informácie o možnostiach získania tohto balíka kumulatívnych aktualizácií nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na nasledovné číslo článku:
2544793 Kumulatívna aktualizácia balíka 1 pre SQL Server 2008 R2 Service Pack 1Poznámka: Pretože zostavy sú kumulatívne, každé nové vydanie opraviť obsahuje všetky rýchlych opráv a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho SQL servera 2008 R2 opraviť uvoľnenia. Odporúčame, aby ste zvážili uplatnenie najnovších opráv, ktoré túto rýchlu opravu obsahujú. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na príslušné číslo článku:
2567616 Zostavy SQL servera 2008 R2, ktoré boli vydané po vydaní SQL servera 2008 R2 Service Pack 1
SQL Server 2008 R2
Oprava tohto problému bola prvýkrát vydaná v kumulatívnej aktualizácii 7. Ďalšie informácie o možnostiach získania tohto balíka kumulatívnych aktualizácií pre SQL Server 2008 R2 nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na nasledovné číslo článku:
2507770 Kumulatívna aktualizácia balíka 7 pre SQL Server 2008 R2 Poznámka: Pretože zostavy sú kumulatívne, každé nové vydanie opraviť obsahuje všetky rýchlych opráv a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho SQL servera 2008 R2 opraviť uvoľnenia. Odporúčame, aby ste zvážili uplatnenie najnovších opráv, ktoré túto rýchlu opravu obsahujú. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na príslušné číslo článku:
981356 Zostavy SQL servera 2008 R2, ktoré boli vydané po vydaní SQL servera 2008 R2
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.
Alternatívne riešenie
Ak chcete tento problém obísť v aplikácii SQL Server 2008 a SQL Server 2008 R2, premiestnite všetky odkazy na dočasné tabuľky do uložených procedúr.
Ďalšie informácie
Ďalšie informácie o tom, ako vytvoriť a upraviť základy tabuľky, nájdete na nasledujúcej webovej lokalite MSDN:
Vytvorenie a úprava základných informácií o tabuľkáchSpinlock môže byť identifikovaný z sys.dm_os_spinlock_stats dynamického zobrazenia správy (DMV) s vysokou mierou tvrdení na SOS_CACHESTORE spinlock. Ak chcete tento problém identifikovať, spustite dotaz, ktorý sa podobá nasledujúcemu hláseniu:
select cp.bucketid, count(cp.bucketid) as BucketCount, st.text from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) as st group by cp.bucketid, st.text having count(cp.bucketid) >1 order by BucketCount descAk sú pri spustení tohto dotazu splnené nasledovné podmienky, môžu sa vyskytnúť problémy s výkonom:
-
Tento dotaz vygeneruje rovnaký text dotazu.
-
Počet rovnakých bucketid je veľký.Poznámka: Veľký počet rovnakých bucketid je zvyčajne viac ako 1000.
-
Dočasné tabuľky s odkazmi na dotazy