Update: Leistungsprobleme auftreten, steigt Sperraktivität Datenbank in SQL Server

Gilt für: SQL Server 2012 EnterpriseSQL Server 2012 DeveloperSQL Server 2012 Standard Mehr

Service Pack 1 für SQL Server 2014 und Service Pack 3 für SQL Server 2012 dieses Update enthalten, und müssen keine Ablaufverfolgungsflags aktivieren die Fehlerbehebung hinzufügen. Um das Update nach Installation eines kumulativen Updates im Abschnitt "Lösung" aktivieren, müssen Sie Microsoft SQL Server-Startparameter Ablaufverfolgungsflag 1236 hinzufügen.

Problembeschreibung


Angenommen Sie, eine Instanz von Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 oder SQL Server 2008 R2 auf einem Computer ausführen, der viele Prozessoren enthält. Wenn die Anzahl der Sperren (Typ = Datenbank) für eine bestimmte Datenbank einen bestimmten Schwellenwert überschreitet, werden folgende Performance-Probleme auftreten:
  • Höhere Werte auftreten für LOCK_HASH Spinlock Count.

    Hinweis Siehe Abschnitt "Weitere Informationen" Informationen zu diesem Spinlock überwachen.
  • Abfragen oder Operationen, die Datenbanksperren erfordern, dauern ein lange abgeschlossen werden. Beispielsweise können Sie die folgenden Leistung verzögert feststellen:
    • SQL Server-Benutzernamen
    • Verbindungsserver Abfragen
    • sp_reset_connection
    • Transaktionen
Hinweis Zu der Liste der Sperren (Typ = Datenbank) auf einer bestimmten Datenbank finden Sie im Abschnitt "Weitere Informationen". Der Schwellenwert je nach Umgebung unterschiedlich.

Problemlösung


Informationen zum kumulativen Update

Das Problem wurde erstmals in folgenden kumulativen Update von SQL Server behoben.

Kumulative Update 13 für SQL Server 2008 R2 SP2

Kumulative Update 17 für SQL Server 2008 SP3

Kumulative Update 1 für SQL Server 2014

Kumulative Update 9 für SQL Server 2012 SP1

Hotfix-Informationen

Ein unterstützter Hotfix ist von Microsoft erhältlich. Dieser Hotfix soll nur der Behebung des Problems dienen, das in diesem Artikel beschrieben wird. Verwenden Sie diesen Hotfix nur auf Systemen, bei denen dieses spezielle Problem auftritt.

Wenn der Hotfix zum Download zur Verfügung steht, gibt es einen Abschnitt "Hotfix download available" ("Hotfixdownload verfügbar") im oberen Bereich dieses Knowledge Base-Artikels. Wenn dieser Abschnitt nicht angezeigt wird, senden Sie eine Anforderung an Microsoft Customer Service and Support, um den Hotfix zu erhalten.

Hinweis Falls weitere Probleme auftreten oder andere Schritte zur Problembehandlung erforderlich ist, müssen Sie möglicherweise eine separate Serviceanfrage erstellen. Die normalen Supportkosten gilt für zusätzliche Support-Fragen und Problemen, die für diesen speziellen Hotfix nicht qualifizieren. Eine vollständige Liste der Telefonnummern von Microsoft Customer Service and Support oder eine separate Serviceanfrage erstellen finden Sie auf folgender Microsoft-Website:Hinweis Das Formular "Hotfix Download Available" zeigt die Sprachen an, für die der Hotfix verfügbar ist. Wenn Ihre Sprache nicht angezeigt wird, ist dieser Hotfix für Ihre Sprache nicht verfügbar.

Status


Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.

Weitere Informationen


Wenn eine Anwendung eine Verbindung zu SQL Server herstellt, wird zuerst einen Datenbankkontext hergestellt. Standardmäßig versucht die Verbindung Datenbank Sperre im SH-Modus. SH Datenbanksperre werden freigegeben, wenn die Verbindung beendet oder Datenbank während der Lebensdauer der Verbindung geändert wird. Wenn Sie viele aktive Verbindungen haben, die dieselbe Datenbankkontext verwenden, haben Sie viele Sperren der Datenbank Ressourcentyp für die betreffende Datenbank.

Auf dem Computer mindestens 16 CPUs, verwenden nur Tabellenobjekte ein partitionierter sperren. Allerdings sind die Datenbanksperren nicht partitioniert. Daher je größer die Anzahl der Sperren, desto länger dauert für SQL Server-Sperre für die Datenbank. Meisten treten keine Probleme auf, die dadurch verursacht werden. Aber als die Zahl einen bestimmten Schwellenwert überschreitet, zusätzliche und die Sperre erhalten. Obwohl nur Mikrosekunden für jede zusätzliche Sperre kostet kann die Gesamtzeit schnell steigern Sperre Hash Buckets mit einem Spinlock geschützt sind. Dies verursacht zusätzliche CPU-Zyklen und weitere Arbeitskräfte auf die Sperre wartet.

Dieser Hotfix stellt Sperre partitionieren Ablaufverfolgungsflag T1236 beim Start aktiviert ist . Partitionieren die Datenbanksperre hält die Tiefe der Sperrliste in jeder lokalen Partition überschaubar. Diese Vorgehensweise wird eine Datenbanksperre Zugriffspfad erheblich optimiert.

LOCK_HASH Spinlock überwachen, können Sie die folgende Abfrage.
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 = 1
WHILE @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
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
DROP TABLE #spinlock_stats
Weitere Informationen zur Diagnose und Behebung Spinlock Konflikte für SQL Server finden Sie im folgenden Dokument:

Hinweis Obwohl dieses Dokument für SQL Server 2008 R2 geschrieben wird, sind die Informationen noch für SQL Server 2012.

Referenzen


Weitere Informationen zu Ablaufverfolgungsflags SQL Server 2012 finden Sie auf der folgenden TechNet-Website:


Weitere Informationen zum ermitteln die Anzahl von Datenbanksperren Benutzer pro Datenbank verwenden Sie die folgende Abfrage zum Berechnen dieses Werts:
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