Ich habe Probleme mit einer Datenbank.
Ich kann grundlegende Abfragen ausführen, wenn auch viel langsamer als normal.
Wenn ich versuche, die Hierarchiebäume für Tabellen, Ansichten oder Prozeduren im SSMS-Objekt-Explorer anzuzeigen, erhalte ich
lock request time out period exceeded
.Meine SSRS-Berichte, die für Objekte in dieser Datenbank ausgeführt werden, werden nicht mehr ausgeführt.
Jobs, die Prozeduren zugeordnet sind, die in dieser Datenbank gespeichert sind, werden ebenfalls nicht ausgeführt.
Ich habe versucht sp_who2
, alle Verbindungen in der Datenbank zu finden und zu beenden. Das Problem wurde jedoch nicht gelöst.
Was geht hier vor sich? Wie kann ich das beheben?
sql-server
sql-server-2008
Lloyd Banks
quelle
quelle
Antworten:
Dies wurde durch ein fortwährendes Rollback einer Transaktion verursacht. Musste irgendwann meinen Server-Cluster neu starten
quelle
Abgesehen von der Berücksichtigung von Harware müssen Sie das Skript möglicherweise ausführen, um zu überprüfen, in welchen Aktivitäten die SQL-Sitzung zurückgehalten wird. Eines der häufigsten Szenarien besteht darin,
Implicit transactions Option
in SQL Server Management Studio kein zu verwenden .quelle
locking request time out period exceed
ich das beurteile, würde ich sagen, Laufenimplicit transaction option
würde einen besseren Hinweis auf die Ursachen geben.Dieses Problem trat auf, als ich eine explizite Transaktion startete, in der ich eine Tabelle in tempdb aus einem Skript erstellte, das in einer anderen Datenbank (nicht tempdb) ausgeführt wurde. Als ich die Transaktion festschrieb, schien das Festschreiben die Sperre für die Tabelle, die ich in tempdb erstellt hatte, nicht aufzuheben.
Dank dieser Seite habe ich
USE
tempdb ausgeführtDBCC OPENTRAN
und die SPID der Verbindung zu tempdb erhalten, die die Sperre verursacht hat. Dann muss ichKILL <SPID number>
es töten.Nicht sehr anmutig, und ich verlor alle Informationen in der Tabelle, die ich in Tempdb erstellt hatte, aber das war in meinem Fall in Ordnung.
quelle
Es gibt so viele Dinge, dass ich nur ein paar Fragen anbieten kann, die Ihnen helfen, eine Antwort zu finden.
Befindet sich die Datenbank auf einem Server, auf dem nur SQL Server ausgeführt wird? Wenn nicht, können andere Prozesse stören, indem sie wertvolle Prozessorzeit stehlen.
Ist der DB-Server im Wesentlichen nicht genügend Arbeitsspeicher? SQL Server wird versuchen, jedes einzelne Byte zuzuweisen, das es kann. Wenn jedoch die Kapazität ausgelastet ist und Ihre Abfragen das Laden von mehr Daten erfordern, muss auf die Verwendung des virtuellen Speichers zurückgegriffen werden, was die Zeit, die selbst einfache Abfragen möglicherweise in Anspruch nehmen, erheblich verlängert.
Ist die Netzwerkbandbreite des DB-Servers zu gering, um die Daten rechtzeitig zu übertragen?
Letztendlich scheint der Computer, auf dem Sie SQL Server hosten, zu klein für das zu sein, was Sie versuchen. Es ist durchaus möglich, dass Sie endlich die Hardware-Grenzen erreicht haben, an denen die Leistung drastisch sinkt. Wenn dies der Fall ist (die obigen Fragen helfen Ihnen dabei, dies zu ermitteln), sollten Sie die Datenbank auf einen Server verschieben, der für die Datenmenge (und die Abfragen), die Sie verarbeiten möchten, die richtige Größe aufweist.
Dies kann bedeuten, dass schnellere Prozessoren, schnellere Laufwerke oder einfach mehr RAM installiert werden.
quelle
"Wenn ich versuche, die Hierarchiestrukturen für Tabellen, Ansichten oder Prozeduren im SSMS-Objekt-Explorer anzuzeigen, wird die Zeitüberschreitung für Sperranforderungen überschritten."
Ich hatte genau das gleiche Problem. Ich ging zum Abfrage-Ausführungsfenster und; getippte und ausgeführte
ROLLBACK
Anweisung.Es sieht so aus, als ob einige der Aussagen, die ich zuvor ausgeführt habe, eine offene Transaktion enthielten. Insbesondere, weil einige von ihnen DDL-Anweisungen enthalten. Nachdem ich ein Rollback durchgeführt hatte, begannen die Objekthierarchien zu funktionieren.
quelle
Wie schon viele darauf hingewiesen hatten, gibt es in der Regel eine lang andauernde Transaktion, die meistens dazu führte, dass mein Fehler SET IMPLICIT TRANSACTIONS ON verwendete, was überhaupt nicht verwendet werden sollte. Um zu sehen, warum Brent Ozars aufschlussreicher Artikel zu Rate gezogen wurde
Auf jeden Fall können Sie mit der folgenden Abfrage eine Liste der ausstehenden Transaktionen mit langer Laufzeit abrufen.
https://www.brentozar.com/archive/2018/02/set-implicit_transactions-one-hell-bad-idea/
quelle