Update: Langsame Leistung oder Deadlock beim Wiederherstellen einer Datenbank und Ausführen von Anweisungen zur gleichen Zeit in SQL Server 2012

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 2725950 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Microsoft stellt Updates für Microsoft SQL Server 2012 als downloadbare Datei zur Verfügung. Da die kumulativ sind, enthält jede neue Version alle Hotfixes und alle die Sicherheitsupdates, die mit früheren SQL Server 2012 enthalten waren.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Szenario 1

Betrachten Sie das folgende Szenario:
  • Wiederherstellen eine Datenbank in Microsoft SQL Server 2012.
  • Bevor der Vorgang der Datenbankwiederherstellung abgeschlossen ist, wird ein anderer Prozess die Katalogansicht sys.database_recovery_status verweist und erfordert eine Sperre auf der gleichen Datenbank. Angenommen, ausführen Sie die folgende SELECT -Anweisung:

    SELECT * FROM sys.database_recovery_status
In diesem Szenario tritt langsam, in dem sich ein Prozess für die SELECT -Anweisung wartet, bis der Datenbank-Wiederherstellungsvorgang abgeschlossen ist.

Szenario 2

Betrachten Sie das folgende Szenario:
  • Wiederherstellen eine Datenbank in SQL Server 2012.
  • Bevor der Vorgang der Datenbankwiederherstellung abgeschlossen ist, führen Sie die folgende Anweisung:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Hinweis Die DataBaseID Stellt die ID der Datenbank auf der Sie die Datenbank-Wiederherstellung durchführen.
In diesem Szenario tritt ein Deadlock in der Datenbank-Wiederherstellungsvorgang. Diesen Deadlock bewirkt, dass den Datenbankwiederherstellungsvorgang fehlschlagen.

Ursache

Die zwei Szenarien, die im Abschnitt "Problembeschreibung" beschriebenen werden durch die gleichen Ursachen verursacht.

Im Abschnitt "Scenario1" tritt auf, das Problem, da der Datenbank-Wiederherstellungsvorgang eine exklusive Sperre für die Datenbank erforderlich ist. Wenn Sie die Anweisung, die in diesem Abschnitt erwähnt wird ausführen, ist eine gemeinsame Sperre für die gleiche Datenbank erforderlich. Aus diesem Grund wartet die gemeinsam verwendete Sperre für die exklusive Sperre, bis die exklusive Sperre aufgehoben wird.

Beim Ausführen der Anweisung, die in diesem Abschnitt erwähnt wird, ist eine gemeinsame Sperre im Abschnitt "Szenario 2" erforderlich, auf dieselbe Datenbank und für die sys.sysdbreg -Tabelle. In der letzten Phase des Datenbank-Wiederherstellungsvorgangs ist jedoch mit einigem eine Aktualisierungssperre für die sys.sysdbreg -Tabelle. Die gemeinsam verwendete Sperre ist jedoch nicht aus der Datenbank freigegeben. Aus diesem Grund ein Deadlock tritt auf, auf die sys.sysdbreg -Tabelle, und der Datenbankwiederherstellungsvorgang als Deadlock-Opfer werden eingestuft wird.

Lösung

Kumulatives Update-Informationen

Kumulatives Updatepaket 1 für SQL Server 2012 Service Pack 1

Die Fehlerbehebung für dieses Problem wurde erstmals im kumulativen Update 1 veröffentlicht. Weitere Informationen dazu, wie Sie dieses kumulative Updatepaket für SQL Server 2012 Service Pack 1 zu erhalten finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2765331 Kumulatives Updatepaket 1 für SQL Server 2012 Service Pack 1
Hinweis Da diese Builds kumulativ sind, jede neue Version enthält alle Hotfixes und alle die Sicherheitsupdates, die mit früheren SQL Server 2012 enthalten waren. Es wird empfohlen, dass es Sie sich die neueste Version, die diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2772858 Die SQL Server 2012 erstellt, die nach der Freigabe von SQL Server 2012 Service Pack 1

Kumulatives Updatepaket 3 für SQL Server 2012

Die Fehlerbehebung für dieses Problem wurde erstmals im kumulativen Update 3 veröffentlicht. Weitere Informationen dazu, wie Sie dieses kumulative Updatepaket für SQL Server 2012 zu erhalten finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2723749 Kumulatives Update 3 für SQL Server 2012
Hinweis Da diese Builds kumulativ sind, jede neue Version enthält alle Hotfixes und alle die Sicherheitsupdates, die mit früheren SQL Server 2012 enthalten waren. Es wird empfohlen, dass es Sie sich die neueste Version, die diesen Hotfix enthält. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
2692828 Die SQL Server 2012 erstellt, die nach der Freigabe von SQL Server 2012

Status

Microsoft hat bestätigt, dass dieses Problem auf die im Abschnitt "Gilt für" aufgeführten Microsoft-Produkten zutrifft.

Abhilfe

Um das Problem in Szenario 2 zu umgehen, verwenden Sie eine der folgenden Methoden.
Methode 1


Ändern Sie die Anweisung aus, um die gemeinsam verwendete Sperre für die sys.sysdbreg -Tabelle zu vermeiden, indem den Hinweis "NOLOCK".
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Methode 2
Legen Sie die Deadlockpriorität der Anweisung auf "Niedrig".
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Hinweis Wenn Sie die zweite Methode verwenden, um den Deadlock in der Anweisung und in den Datenbankwiederherstellungsvorgang zu vermeiden, werden die Codes in der IF-Anweisung nicht ausgeführt werden.

Informationsquellen

Weitere Informationen über die exklusive Sperre, gemeinsame Sperre und Aktualisierungssperre finden Sie auf der folgenden MSDN-Website:
Allgemeine Informationen über die Sperrmodi
Weitere Informationen die inkrementellen Dienstmodell für SQL Server finden Sie im folgenden Artikel der Microsoft Knowledge Base:
935897 Ein inkrementelles Dienstmodell ist vom SQL Server-Team zum Übermitteln von Hotfixes für gemeldete Probleme verfügbar
Weitere Informationen zum Benennungsschema für SQL Server-Updates finden Sie im folgenden Artikel der Microsoft Knowledge Base:
822499 Benennungsschema für Softwareupdate-Pakete für Microsoft SQL Server
Weitere Informationen zur Terminologie für Softwareupdates finden Sie im folgenden Artikel der Microsoft Knowledge Base:
824684 Beschreibung der Standardterminologie, die zum Beschreiben von Microsoft-Softwareupdates verwendet wird

Eigenschaften

Artikel-ID: 2725950 - Geändert am: Dienstag, 20. November 2012 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
Keywords: 
kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 2725950
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com