Oprava: Výkonu problémy při zvyšuje aktivitu uzamčení databáze na serveru SQL Server

DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.

Projděte si také anglickou verzi článku: 2926217
Poznámka
Ve výchozím nastavení SQL Server 2014 Service Pack 1 a Service Pack 3 pro SQL Server 2012 patří tato oprava a není nutné přidávat všechny příznaky trasování, chcete-li povolit opravu. Chcete-li povolit opravu nainstalujete jednu kumulativní aktualizace v části řešení, je třeba spustit Microsoft SQL Server přidáním příznaku trasování 1236 parametry spouštění.
Příznaky
Spustit instanci 2014 Microsoft SQL Server, SQL Server 2012, SQL Server 2008 nebo SQL Server 2008 R2 v počítači, který obsahuje mnoho procesorů se předpokládá. Pokud počet uzamčení (typ prostředku = databáze) pro určitou databázi překračuje určitou mez, dochází k následujícím problémům s výkonem:
  • Zvýšenými hodnotami dojít pro LOCK_HASH počet spinlock.

    Poznámka: Naleznete v části "Další informace" informace o tom, jak sledovat tento spinlock.
  • Dotazy nebo operace, které vyžadují uzamčení databáze trvat dlouhou dobu na dokončení. Například můžete si všimnout následujících zpoždění výkonu:
    • Přihlášení k serveru SQL Server
    • Propojený server dotazy
    • sp_reset_connection
    • Transakce
Poznámka: Chcete-li vyhledat seznam zámků (typ prostředku = databáze) na danou databázi, naleznete v části "Další informace". Prahová hodnota se liší podle prostředí.
Řešení

Informace o kumulativní aktualizaci.

Tento problém byl poprvé opraven v následující kumulativní aktualizace serveru SQL Server.

Kumulativní aktualizace 13 pro SQL Server 2008 R2 s aktualizací SP2

Kumulativní aktualizace 17 pro SQL Server 2008 SP3

Kumulativní aktualizace 1 pro SQL Server 2014

Kumulativní aktualizace 9 pro SQL Server 2012 SP1

O kumulativní aktualizace pro SQL Server

Každé nové kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Rezervovat nejnovější kumulativní aktualizace pro SQL Server:

Informace o opravě hotfix

Společnost Microsoft má k dispozici podporovanou opravu hotfix. Tato oprava hotfix je však určena pouze problému popsanému v tomto článku. Použití této opravy hotfix pouze u systémů, ve kterých dochází k tomuto konkrétnímu problému.

Pokud oprava hotfix je k dispozici ke stažení, je sekce "Oprava Hotfix je k dispozici ke stažení" v horní části tohoto článku znalostní báze Knowledge Base. Pokud tento oddíl není uveden, odešlete požadavek na Microsoft Zákaznický servis a podporu k získání opravy hotfix.

Poznámka: Případné další problémy nebo řešení potíží je požadováno, bude pravděpodobně nutné vytvořit zvláštní požadavek na službu. Výdaje na technickou podporu použije dalších otázek a problémů, které se netýkají této konkrétní opravy hotfix. Pro úplný seznam telefonních čísel společnosti Microsoft Zákaznikého servisu a podpory nebo chcete-li vytvořit zvláštní požadavek na službu navštivte následující web společnosti Microsoft: Poznámka: "Hotfix stažení k dispozici" formulář zobrazí jazyky, pro které je oprava hotfix k dispozici. Pokud váš jazyk není zobrazen, to je protože oprava hotfix není k dispozici pro daný jazyk.

Prohlášení
Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".
Další informace
Pokud aplikace provede připojení k serveru SQL Server, nejprve vytvoří místní databáze. Ve výchozím nastavení připojení se pokusí získat zámek databáze v režimu SH. Uzamčení Databáze SH budou vydány při připojení je zastavena nebo změně kontextu databáze po dobu platnosti spojení. Pokud máte mnoho aktivní připojení, které používají stejnou databázi kontextu, může mít mnoho zámky typu prostředku databáze pro konkrétní databázi.

V počítači, který má 16 nebo více procesorů pouze tabulka objektů pomocí schéma oddílů zámku. Nicméně uzamčení databáze nejsou rozděleny do oddílů. Proto čím větší počet databáze uzamkne, doba pro získání uzamčení databáze serveru SQL Server. Většina aplikací s žádnými problémy, které jsou způsobeny tímto návrhem. Ale jakmile číslo překračuje určitou mez, je nutné dodatečné práce a času získat zámek. Přestože náklady pouze micro sekund pro každý další zámek, celkový čas velmi rychle zvětšit protože bloků hash zámku jsou chráněny pomocí spinlock. To způsobí, že další cykly CPU a čeká na další pracovníky získat zámek.

Tato oprava hotfix zavádí li povolen příznak trasování T1236 při spuštění rozdělení uzamčení databáze . Rozdělení do oddílů uzamčení databáze udržuje hloubku zamknout seznam lze spravovat v každém místním oddílu. To významně optimalizuje přístup k cestě, která se používá k získání uzamčení databáze .

Sledování LOCK_HASH spinlock, můžete použít následující dotaz.
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @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      ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats
Další informace o diagnostice a řešení sporu spinlock na serveru SQL Server naleznete v následujícím dokumentu:

Poznámka: Ačkoli tento dokument je napsán pro SQL Server 2008 R2, informace jsou stále použitelné pro SQL Server 2012.
Odkazy
Další informace o trasování příznaky v systému SQL Server 2012 naleznete na následujícím webu TechNet:


Další informace o tom, jak zjistit počet uzamčení databáze v uživatele databáze použijte tuto hodnotu můžete vypočítat následující dotaz:
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks group by  Resource_database_id, resource_type, request_mode, request_status


Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 2926217 - Poslední kontrola: 12/03/2015 05:57:00 - Revize: 9.0

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2008 Service Pack 3, Microsoft SQL Server 2008 R2 Service Pack 2

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbautohotfix kbhotfixserver kbmt KB2926217 KbMtcs
Váš názor