Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

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

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 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.
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 LOWIF 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: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

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 2725950 – Letzte Überarbeitung: 11/20/2012 20:52:00 – Revision: 2.0

Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, , Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Web

  • kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtde
Feedback
">