KB2926217 – OPRAVA: Problémy s výkonom sa vyskytujú, keď sa zvýši aktivita zamknutia databázy v SQL Server

Vzťahuje sa na
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2012 Express SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2008 Service Pack 3 SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard

Predvolene balík Service Pack 1 pre SQL Server 2014 a balík Service Pack 3 pre SQL Server 2012 obsahujú túto opravu a na povolenie opravy nemusíte pridávať žiadne príznaky sledovania. Ak chcete povoliť opravu po inštalácii niektorej z kumulatívnych aktualizácií v časti Riešenie, je potrebné spustiť Microsoft SQL Server pridaním príznaku sledovania 1236 do parametrov spúšťania.

Príznaky

Predpokladajme, že používate inštanciu Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 alebo SQL Server 2008 R2 v počítači s veľkým počtom procesorov. Keď počet zámkov (typ zdroja = DATABÁZA) pre konkrétnu databázu presiahne určitú prahovú hodnotu, vyskytnú sa nasledujúce problémy s výkonom:

  • Zvýšené hodnoty sa vyskytujú pre LOCK_HASH spinlock count.

    Poznámka: Informácie o tom, ako monitorovať tento spinlock, nájdete v časti "Ďalšie informácie".

  • Dokončenie dotazov alebo operácií, ktoré vyžadujú uzamknutie databázy, trvá dlho. Môžete si napríklad všimnúť nasledujúce oneskorenia výkonu:

    • Prihlásenia do SQL Server
    • Dotazy prepojeného servera
    • sp_reset_connection
    • Transakcie

Poznámka Ak chcete vyhľadať zoznam zámkov (typ zdroja = DATABÁZA) v danej databáze, pozrite si časť Ďalšie informácie. Prahová hodnota sa líši v závislosti od prostredia.

Riešenie

Informácie o kumulatívnych aktualizáciách

Tento problém bol prvýkrát opravený v nasledujúcej kumulatívnej aktualizácii SQL Server.

Kumulatívna aktualizácia 13 pre SQL Server 2008 R2 SP2 /en-us/help/2967540

Kumulatívna aktualizácia 17 pre SQL Server 2008 SP3 /en-us/help/2958696

Kumulatívna aktualizácia 1 pre SQL Server 2014 /en-us/help/2931693

Kumulatívna aktualizácia 9 pre SQL Server 2012 SP1 /en-us/help/2931078

Informácie o kumulatívnych aktualizáciách pre SQL Server

Každá nová kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcej kumulatívnej aktualizácii. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:

      

Informácie o rýchlych opravách
 Od spoločnosti Microsoft je k dispozícii podporovaná rýchla oprava. Táto rýchla oprava je však určená len na vyriešenie problému, ktorý je popísaný v tomto článku. Túto rýchlu opravu použite len v systémoch, v ktorých sa vyskytol tento konkrétny problém.

Ak je rýchla oprava k dispozícii na stiahnutie, v hornej časti článku databázy Knowledge Base sa nachádza časť K dispozícii na stiahnutie rýchlej opravy. Ak sa táto časť nezobrazuje, odošlite požiadavku na oddelenie služieb zákazníkom a technickej podpore spoločnosti Microsoft a požiadajte o rýchlu opravu.

Poznámka Ak sa vyskytnú ďalšie problémy alebo je potrebné riešenie problémov, možno bude potrebné vytvoriť samostatnú žiadosť o službu. Zvyčajné náklady na podporu sa budú vzťahovať na ďalšie otázky a problémy podpory, ktoré nespĺňajú podmienky na túto konkrétnu rýchlu opravu. Úplný zoznam telefónnych čísel na služby zákazníkom a technickej podpory spoločnosti Microsoft alebo ak chcete vytvoriť samostatnú žiadosť o službu, nájdete na nasledujúcej webovej lokalite spoločnosti Microsoft:

/contactus/?ws=support Poznámka: Formulár K dispozícii na stiahnutie rýchlej opravy zobrazuje jazyky, pre ktoré je rýchla oprava k dispozícii. Ak sa váš jazyk nezobrazuje, nie je pre daný jazyk k dispozícii rýchla oprava.

Stav

Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.

Ďalšie informácie

Keď sa aplikácia pripojí k SQL Server, najprv vytvorí kontext databázy. Podľa predvoleného nastavenia sa pripojenie pokúsi získať zámok DATABASE v režime SH. Zámok SH-DATABASE sa uvoľní po zastavení pripojenia alebo zmene kontextu databázy počas trvania pripojenia. Ak máte veľa aktívnych pripojení, ktoré používajú rovnaký kontext databázy, môžete mať pre danú databázu veľa zámkov typu zdroja DATABASE.

V počítači so 16 a viac procesormi používajú schému uzamknutia oblastí iba objekty tabuľky. Zámky databáz však nie sú rozdelené na oblasti. Preto čím väčší je počet uzamknutí databázy, tým dlhšie trvá, kým SQL Server získa uzamknutie databázy. Vo väčšine aplikácií sa nevyskytujú žiadne problémy spôsobené týmto návrhom. Akonáhle však počet prekročí určitú hranicu, na získanie zámku je potrebná ďalšia práca a čas. Hoci sú náklady len mikro sekundy za každý ďalší zámok, celkový čas sa môže rýchlo predĺžiť, pretože sektory hash zámku sú chránené pomocou spinlocku. To spôsobuje ďalšie cykly procesora a čaká sa na ďalších pracovníkov, ktorí získajú zámok.

Táto rýchla oprava zavádza uzamknutie oblasti DATABASE pri povolení príznaku sledovania T1236 pri spustení. Uzamknutie DATABASE na oblasti udržiava hĺbku zoznamu uzamknutia zvládnuteľnú v každom lokálnom oddiele. Tým sa výrazne optimalizuje prístupová cesta použitá na získanie zámku databázy.

Ak chcete monitorovať LOCK_HASH spinlock, môžete použiť nasledujúci dotaz. ZAPNÚŤ MOŽNOSŤ NOCOUNT
CREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)
DECLARE @counter int = 1
ZATIAĽ KÝM @counter< 100
      BEGIN
            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'
            WAITFOR DELAY '00:00:05'
            SET @counter +=1
      END
VYBERTE POLOŽKU * OD #spinlock_stats ORDER BY [CaptureTime]
DROP TABLE #spinlock_stats Ďalšie informácie o diagnostike a riešení sporu spinlocku na SQL Server nájdete v nasledujúcom dokumente:

Diagnostika a riešenie sporu o Spinlock na SQL Server Poznámka Hoci je tento dokument napísaný pre SQL Server 2008 R2, informácie sa stále vzťahujú na SQL Server 2012.

Odkazy

Ďalšie informácie o príznakoch sledovania v SQL Server 2012 nájdete na nasledujúcej webovej lokalite TechNet:

Informácie o príznakoch sledovania v SQL Server 2012
Ďalšie informácie o tom, ako zistiť počet zamknutí databázy u používateľa na databázu, získate pomocou nasledujúceho dotazu na výpočet tejto hodnoty:select Resource_database_id, resource_type, request_mode, request_status,
count (*) 'LockCount' from sys.dm_tran_locks
Zoskupiť podľa Resource_database_id, resource_type, request_mode request_status