Überwachen der Aktivität in einer einzelnen Tabelle mit dem SQL Server-Profiler

7

Ich habe eine Tabelle, die einen Identitätsstartwert für die eindeutige Identitätsspalte verwendet. Wir haben einige massive Sprünge im Identitätswert festgestellt, die wir nicht erklären können. Die Tabelle enthält 20.000 ungerade Zeilen, der maximale Identitätswert liegt über 560.000.000 und das Identitätsinkrement liegt bei 1!

Ich wollte den SQL Server-Profiler verwenden, um die Aktivität nur in dieser Tabelle zu überwachen, damit ich sehen konnte, was dazu führte, dass die Identität in großen Schritten sprang, aber als ich auf den Monitor schaute, war ich sofort verwirrt. Ich gebe zu, dass ich in Eile bin und keine Zeit habe, um wirklich zu lernen, wie dies funktioniert (so viel ich möchte), also könnte ich eine grobe Anleitung zu den Schritten verwenden, die Sie zur Überwachung der Aktivitäten auf einem Tisch unternehmen sollten.

Jede Hilfe wäre wirklich dankbar.

user22785
quelle

Antworten:

4

Starten Sie SQL Profiler, erstellen Sie eine neue Ablaufverfolgung und stellen Sie eine Verbindung zu dem SQL Server her, den Sie überwachen möchten.

Achtung, wenn dieser Produktionsserver sehr ausgelastet ist, sollten Sie SQL Profiler nicht verwenden, da dies den SQL Server verlangsamt

Normalerweise verwende ich das "Standard" -Profil und bearbeite es dann.

Klicken Sie auf die Registerkarte "Ereignisauswahl". Normalerweise deaktiviere ich "Audit Login", "Audit Logout", "ExistingConnections" und "RPC Batch Starting". Dies ergibt eine schöne saubere Trace-Ausgabe.

Stellen Sie sicher, dass "TextData" aktiviert ist.

Sie können der TraceData-Spalte einen Filter zum Trace von "LIKE %%" hinzufügen, dies schließt jedoch nur SQL-Anweisungen ein, die direkt an den Server gesendet werden. Wenn gespeicherte Prozeduren vorhanden sind, müssen Sie wissen, welche gespeicherten Prozeduren Ihre Tabelle berühren und filtern.

Wenn Sie Cursor-Abfragen haben, erhalten Sie viele "sp_fetch" -Stücke. Sie müssen nach der Anweisung DECLARE CURSOR mit derselben Cursor-ID suchen.

Wenn Sie darüber nachdenken, kann eine fehlerhafte Cursor-for-Schleife schnell viele tausend "Fehler" -Datensätze einfügen, und dies kann eine Ursache für diese großen Inkrementsprünge sein.

Kerl
quelle
1

Der Identitätswert wird bei jeder Einfügung erhöht, auch wenn die Einfügung fehlschlägt.

Wenn Sie eine Prüf- oder Fremdschlüsseleinschränkung haben, erhöht jeder Fehler die Identität. Wenn Sie einen "Wert zu groß" haben, schlägt die Einfügung fehl, aber die Identität nimmt zu.

Im Allgemeinen ist dies kein Problem. Der Zweck des Identitätsfelds besteht darin, eine eindeutige Referenz für diese Zeile bereitzustellen, und es ist eine menschliche Sache, sie sauber zu halten, ohne dass Zahlen fehlen, und es ist nichts, worüber sich die Datenbank aufregt.

Das dringlichere Problem ist, warum Ihre Beilagen versagen und Sie nichts davon wissen ...

Kerl
quelle
Ich bin mir der unterschiedlichen Gründe für die Zunahme des Identitätssaatguts bewusst. Was ich mit SQL Server Profiler verstehen möchte, ist, warum und was ich verlange, ist eine Anleitung zum Einrichten. Was ich an dem Sprung alarmierend finde, ist, dass es sich um Inkremente von über einer Million handeln kann, und ich weiß, dass nichts im System so oft versucht, darauf zuzugreifen - es ist nur eine Mitarbeitertabelle!
user22785
0

SQL Server setzt die Identitätsspalte beim Stoppen und Starten des Dienstes zurück. Es gibt ein Verbindungselement, bei dem jemand dachte, es sei ein Fehler, aber MS-Dinge, dies ist ein nettes Designmerkmal. https://connect.microsoft.com/SQLServer/feedback/details/739013/alwayson-fail

Es gibt ein Trace-Flag, das das Verhalten beim erneuten Säen der Identität deaktiviert. Das Hinzufügen von -T272 als Startflag hilft dabei.

Lowell Izaguirre
quelle