Mithilfe des Programms sogdblockanalyzer können Datenbankblockaden eines SQL Server Datenbankservers analysiert werden.
Nach Erstellung eines Snapshots kann über eine Windows-Oberfläche eine Analyse der aktuellen Situation durchgeführt werden, ohne dass sich die analysierte Situation mit jeder Abfrage wieder vollkommen ändert. Bei Bedarf kann ein Snapshot in einer Datei gespeichert und z.B. auf einem anderen System zur weiteren Analyse geöffnet werden.
Die letzten erzeugten oder geöffneten Snapshots verbleiben im Speicher, sodass während eines Programmlaufes, auch ohne das in Dateien gespeichert wurden, zwischen den Snapshots gewechselt werden kann.
sogdblockanalyzer kann mit folgenden Parametern aufgerufen werden:
sogdblockanalyzer [-nosnap] [-user Benutzer] [-intervall Sekunden]
[-autosave Verzeichnisname] [-autosaveintervall Sekunden]
[-curdb]
[Dateiname]
Keine Erzeugung eines Snaphots zu Anfang des Programmlaufes.
Einstellen der gewünschten Datenbankverbindung (Standard: global)
Nur Datensätze des angegebenen Benutzer anzeigen. Kann verwendet werden, um bei der Entwicklung von Software ein Auge auf das Satzschutzverhalten zu haben.
Nur Datensätze zu der angegebenen Datenbank anzeigen.
Automatisches Erzeugen eines Snapshots alle n Sekunden
Automatisches Speichern von Snapshots, sofern diese blockaderelevante Daten enthalten.
Mindestintervall der zwischen dem automatischen Speichern von Snaphots liegen soll. Diese Option verhindert, dass Snapshots im Sekundenintervall geschrieben werden. Mindestwert: 30 (Sekunden).
Die Option wird außer Kraft gesetzt, wenn innerhalb kurzer Zeit unterschiedliche, voneinander unabhägige Blockierungssituationen auftreten.
Bestimmte Auswertungstabellen werden normalerweise in allen Datenbanken des Datenbankservers gesucht (lockown,lockitem,lockinfo,dbhhcontext,dbprocopt,dblizenz,dbsema). Mit der Option -curdb kann die Suche auf die aktuelle Datenbank eingegrenzt werden.
Definiert ein Verzeichnis, in das jeder erzeugte Snapshot direkt nach Erstellung ausgegeben wird. Kann verwendet werden, wenn auf einem Fremdsystem zwar ein Snapshot erstellt werden kann, dieser aber nicht zur Anzeige kommt.
Ermöglicht das Beenden von Prozessen, die in einem bestimmten Verzeichnis aktiv sind (und von dort mit der Datenbank aggieren). Angabe von "-" aktiviert die Funktion ohne Einschränkung auf ein bestimmtes Verzeichnis, z.B. zur Gesamtberuhigung eines System. Durch Pipe-Zeichen getrennt können auch mehrere Verzeichnisse angegeben werden.
In Verbindung mit "-shutdown": Wenn alle Prozesse beendet wurden, beendet sich SOGDbLockAnalyzer von selbst.
Zeigt in der Shutdown-Ansicht das Funktionspanel mit dem angegebenen Text an.
Kommagetrennte Liste von Programmen, die in der Shutdownansicht nicht angezeigt werden sollen.
Kommagetrennte Liste von Hosts, die einzig in der Shutdownansicht angezeigt werden sollen.
In der Shutdown-Ansicht werden keine neu hinzukommenden Programme angezeigt. Kann verwendet werden, wenn aktuell laufende Programme einmal beendet werden sollen, und dabei die sich wiederum neu startenden Programme nicht berücksichtigt werden sollen.
Name einer Snapshotdatei, die beim Programmstart geöffnet werden soll.
Speichern und Laden von Snapshots
Snapshots können über das Menü "Datei" gespeichert und geladen werden. Die gespeicherten Dateien können z.B. an den SOG-Support zur weiteren Auswertung übergeben werden.
Die Snapshots enthalten die bei der Erstellung abgefragten Datenbankdaten.
Wurde die Menüoption "Lockresourcen abfragen" gesetzt, sind auch die übersetzten Uniq-Keys enthalten.
Das Format der Datei ist eine Zip-komprimierte XML-Datei.
Über das Funktionsmenü "Ansicht" kann zwischen unterschiedlichen Ansichten gewechselt, sowie die aktuelle Ansicht konfiguriert werden.
Über "Ansicht" - "Spalten" können einzelne Spalten angezeigt oder versteckt werden. Nach Aktivierung der Ansicht sind einige Spalten nicht zu sehen, da die Auswertung dieser Spalten nicht immer von Interesse ist.
Wird die Option "Ansicht" - "Filter aktivieren" eingeschaltet, kann aufgrund von Datenwerten für viele Spalten ausgesucht werden, welche Zeilen angezeigt werden sollen. Dazu werden von den Spalten die mehr als einen unterschiedlichen Wert aufweisen, die ersten Werte in einem DropDown-Menü dargestellt. Durch ein- oder aushaken des Datenwertes, können die Zeilen ein- oder ausgeblendet werden, die diesen Wert enthalten. Im DropDown Menü wird der enthaltene Datenwert und in Klammern die Anzahl der betroffenen Datensätze dargestellt. Durch Verwendung der rechten Maustaste auf diesen Menüpunkten können alle Datenwert außer dem aktuellen versteckt werden. Durch Verwendug der rechten Maustaste auf dem Spaltennamen, können alle Datenwerte der Spalte aktiviert werden.
Über den Menüpunkt "Rodaten" kann auf die der Ausgabe zu Grunde liegenden Rodaten zugegriffen werden. Über "Rodaten" - "Extern öffnen" kann eine CSV-Datei mit allen im Snapshot enthaltenen Daten erzeugt, und in einer externen Anwendung (z.B. Excel) geöffnet werden.
Über "Ansicht" - "Lockresourcen abfragen" kann geschaltet werden, ob sogdblockanalyzer versuchen soll, Lock-Hashcodes in Klarschrift Tabellenkeys umzusetzen. Die Abfrage dieser Informationen in großen Datenbanken kann sehr lange dauern und ist nur in wenigen Fällen aussagekräftiger als der LockResource als solche.
In der Ansicht "Datenbanknutzung" wird für jede Datenbank angezeigt, welche Prozesse diese nutzen. Über das Kontextmenü können alle Spids eines Prozesses gekilled werden.
Die Ansicht Lockübersicht bietet eine einfache Übersicht über die aktuelle Locksituation. Dabei werden alle Informationen über einen Hostprozess konsolidiert. Durch Sortierung und Einfärbung werden die interessantesten Informationen hervorgehoben.
Folgende Spaten können dargestellt werden:
Dieses Datenfeld dient der Sortierung der Informationen in relevante und nicht relevante Inhalte. Je höher der Wert, um so wichtiger die Information.
Die Relevanz ermittelt sich in folgender Reihenfolge:
- Prozesse die an Blockierungssituationen beteiligt sind.
- Prozesse die Daten schützen.
- Prozesse die von Benutzern erzeugt wurden.
- Interne Datenbankprozesse (Diese werden meistens gar nicht dargestellt)
Name des Client-Computers, an dem der Prozess läuft (Aus Sicht des Datenbankservers).
Prozess-Id des Hostprozesses auf dem Client-Computer.
Verursacht der Hostprozess eine Datenbankblockade, wird die Prozess-Id rot dargestellt.
Wartet der Hostprozess auf Daten, die anderweitig blockiert sind, wird er orange dargestellt.
Blockiert der Hostprozess einen anderen Prozess, wird er rot dargestellt.
Ist der Prozess an einem DeadLock beteiligt, wird er Lila hervorgehoben.
Zur besseren Darstellung von Blockierungen werden alle Datenbankprozesse, die an gemeinsamen Blockierungen beteiligt sind in Blockierungsgruppen eingeteilt. Ein Hostprozess kann dabei zur gleichen Zeit auch an mehreren unabhängigen Blockierungsgruppen beteiligt sein.
Anzahl der blockierten Datenbankprozesse. Ist der Wert größer als 0, wird er orange dargestellt.
Summe der Anzahl Millisekunden, die die Datenbankprozesse des Prozesses bereits gewartet haben. Ist der Wert nicht "0", wird er gelb dargestellt.
Anzahl der zugeordneten Datenbankprozesse (spid).
Anzahl der von diesem Prozess gehaltenen logischen Locks (hhlock). Ist der Wert >0 wird er gelb dargestellt.
Anzahl der von diesem Prozess durchgeführten logischen Warteoperationen (hhlock). Ist der Wert >0 wird er orange dargestellt.
Anzahl der auf diesen Prozess logisch wartenden Datenbankprozesse (hhlock). Ist der Wert >0 wird er orange dargestellt.
Anzahl der von diesem Prozess gehaltenen physikalischen Locks. Ist der Wert >0 wird er gelb dargestellt.
Anzahl der von diesem Prozess durchgeführten physikalischen Warteoperationen. Ist der Wert >0 wird er orange dargestellt.
Anzahl der auf diesen Prozess physikalisch wartenden Datenbankprozesse (hhlock). Ist der Wert >0 wird er orange dargestellt.
Prozesse, durch die dieser Prozess blockiert wird im Format "Computername.ProzessId". Ist hier ein Wert enthalten, wird diese orange dargestellt.
Programmname des ausführenden Programms, wie er von dem Programm an die Datenbank übermittelt wurde.
Benutzername. Vom Programm an die Datenbank übermittelter Login oder NTLogin des Datenbankprozesses.
Wert != 0 zeigt an, dass eine offene Transaktion vorhanden ist.
Startzeit der aktuell offenen Transaktion.
Sachbearbeiter-Id, unter der der Prozess ausgeführt wird (Eintrag in dbsema).
Geschützte Sempahoren und Client-Lizenzen.
Dieser Schalter ist gesetzt, wenn der Prozess an einem DeadLock beteiligt ist. In diesem Fall wird das Feld in der Farbe Lila angezeigt.
Eindeutige Satznummer. (Zu Debugzwecken).
Durch Doppelklick eines Prozesses in der Lockübersicht, kann eine Prozessübersicht für diesen Prozess abgerufen werden.
In der Ansicht Prozessübersicht werden alle logischen und physikalischen Locks eines Prozesses in konsoliderter Form aufgelistet. Wird im Menü "Ansicht" die Option "Alle Details" aktiviert, erfolgt keine Konsolidierung, sodass jede geschützt Resource einzeln zu sehen ist. In dieser Detailstufe können ggf. auch die UniqKeys der betroffenen Tabellen angezeigt werden.
Folgende Spaten können dargestellt werden:
Über die Relevanz werden die wichtigen Informationen an den Anfang der Liste sortiert. Dabei gilt folgende Reihenfolge:
Resourcen, die an Blockierungssituationen beteiligt sind.
Resourcen, die potenziell für Blockierungen verantwortlich sein könnten.
Resourcen, die im allgemeinen kein Problem darstellen.
Name der Datenbank
Liste von Datenbank-Spids, die dieser Resource zugeordnet sind. Im Falle von logischen Schützen, können hier mehrere Spids angegeben sein. Die Resource wird automatisch freigegeben, wenn alle beteiligten Spids geschlossen worden sind.
Wird auf die Resource gewartet, wird die Spid orange dargestellt. Wird auf die Resource von einem anderen Prozess gewartet, wird die Spid rot dargestellt.
Ist der Prozess an einem DeadLock beteiligt, wird er lila dargestellt.
Tabellenname
Lockmods (Siehe SQL Server Dokumentation). U-Update X=Exclusive S-Shared I.=Intended
Art des Schutzes. KEY=Datensatz, PAG=Seite, DB=Datenbank, TAB=Tabelle, RID=RowIdentifier, FIL=DatabaseFile, APP=ApplicationResource, MD=MetaData/CatalogInformation, HBT=HeapOrBTreeIndex, AU=AllocationUnit, #lockitem=Logischer Satzschutz,
Eindeutiger Schlüssel der Tabelle (Key-1 oder Id). Wird nur bei logischen Satzschützen angezeigt, oder bei KEY-Daten, wenn die Option "Lockresourcen abfragen" gesetzt wurde, und die Abfrage erfolgreich war.
IndexId des physkalischen Satzschutzes. 1: Primärdaten
Technische Resource, die geschützt wird. Im Falle von KEY-Daten wird eine Umsetzung in lesbare Form im Format "hash-{n}" durchgeführt. Über "Ansicht" - "Guids zur Anzeige ersetzen" kann diese Umsetzung abgeschaltet werden.
Bitte beachten Sie: SQL Server schützt nicht den Datensatz selbst, sondern einen Hashwert seines primären Keys. Unter Umständen kann das dazu führen, dass durch einen Lock nicht nur ein Datensatz geschützt wird, sondern alle Datensätze, die zufälligerweise den gleichen Hashcode haben. Wird auf die Resource gewartet, wird sie orange dargestellt. Wird auf die Resource von einem anderen Prozess gewartet, wird sie rot dargestellt.
Lockstatus. GRANT: Lock wurde zugeteilt. WAIT: Auf den Lock wird gewartet. Ist der Status "WAIT" wird er orange dargestellt. Wird auf die Resource anderweitig gewartet, wird der Status rot dargestellt.
Anzahl Millisekunden, die bereits auf den Lock gewartet wird. Ist der Wert >0 wird er gelb dargestellt.
Eigentümer des Locks in der Form "Spid (Prozess.ProzessId)". Ist der Prozess an einem DeadLock beteiligt, wird der Wert lila dargestellt.
Werden die Daten konsolidiert, wird hier die Anzahl der konsolidierten Detaildaten dargestellt. Ist die Anzahl > 1, wird sie gelb dargestellt.
Die vom Clientprozess gemeldeten ParentIds (Im Falle von ActiveSkin: TabReiter)
Name des Programms
Beteiligte Blockierungsgruppen
Benutzername
Wert != 0 zeigt an, dass eine offene Transaktion vorhanden ist.
Startzeit der aktuell offnene Transaktion.
Gesetzt, wenn der Prozess an einem DeadLock beteiligt ist. In diesem Fall wird der Wert lila dargestellt.
Name des ClientComputers.
ProcessId des Prozesses auf dem Client.
Eigentümernummer eines logsichen Schutzes.
Ende des letzten Datenbank-Requests auf der/den Verbindung(en)
true: Für diese Verbindung liegen AktiveRequests vor. Abfrage durch Kontextmenü "Details" oder Doppelklick.
SQL-Id der Datenbank
SQL-Id des Datenbankobjektes
Sachbearbeiter-Id, unter der der Prozess ausgeführt wird (Eintrag in dbsema).
Geschützte Sempahoren und Client-Lizenzen.
Kontext-Ids der Prozesses. Alle DB-Prozesses eines Ausführungspfades weisen die gleiche Context-Id auf. Solange noch Datenbankprozesses dieser Context-Id existieren, werden verknüpfte Resourcen (lockown, dbsema, etc.) als gültig betrachtet.
Conguids der Prozesses. Conguid sollte pro Datenbankprozess eindeutig sein.
Vom Clientprozess in dbhhcontext eingetragenes aktuelles Verzeichnis.
Vom Clientprozess in dbhhcontext eingetragenes ausführungs-Image.
Vom Clientprozess in dbhhcontext eingetragene Kommandozeile.
Vom Clientprozess in dbhhcontext eingetragener Maschinenname.
Vom Clientprozess in dbhhcontext eingetragener Domänenname der Benutzeranmeldung.
Vom Clientprozess in dbhhcontext eingetragener Benutzername der Benutzeranmeldung.
Vom Clientprozess in dbhhcontext eingetragene Informationen zum ausgeführten Prozess. z.B. Versionnummern, 64Bit, etc.
Über das Menü "Ansicht" - "Lizenzübersicht" kann eine Übersicht der verwendeten Client-Lizenzen angezeigt werden.
Ein Doppelklick in dieser Ansicht auf einen Eintrag, zeigt alle geschützten Resourcen, aller zur dieser Client-Lizenz gehörenden Prozesse.
Folgende Spalten können dargestellt werden:
Über die Relevanz werden die wichtigen Informationen an den Anfang der Liste sortiert. Dabei gilt folgende Reihenfolge:
Datensätze, die gültig sind..
Ungültige Datensätze aus dem aktuellen Projekt/Firma..
Ungültige Datensätze aus fremden Projekten/Firmen.
Datenbank.
Lizenzprojekt (Paket).
Anzahl vorhandener Lizenzen zu diesem Paket.
Aktueller Benutzer.
Laufende Lizenznummer. Ermöglicht das einfache "Auszählen" der aktiven Lizenzen.
Name des Clients.
TerminalServer Session des Client.
Anzahl der unter dieser Lizenz aktiven Prozesse.
Anzahl der unter dieser Lizenz aktiven Datenbankprozesse.
Zugeordnetes Projekt.
Zugeordnete Firma.
In der Ansicht "Datenbanknutzung" wird für jede Datenbank angezeigt, welche Prozesse diese nutzen. Über das Kontextmenü können alle Spids eines Prozesses gekilled werden.
In der Ansicht Transaktionen werden alle Transaktionen angezeigt, die Reservierungen in den Protokollen haben, und damit für Satzschütze relevant sind.
Über die Relevanz werden wichtige Informationen an den Anfang der Liste sortiert. Dabei gilt: Gestartete Transaktionen haben vorrang, Transaktionen der aktuellen Datenbank werden zuerst angezeigt.
Datenbank
Id der Transaktion
Datenbank-Prozesss
Zeitpunkt des Starts der Transaktion (physikalischer Startzeitpunkt)
Anzahl Datensätze, die protokolliert wurden.
Anzahl Bytes die durch die Transaktion in den Protokollen genutzt werden.
Anzahl Bytes die durch die Transaktion in den Protokollen reserviert werden.
System-Nutzung
System-Reservierung
Name der Transaktion
Über das Menu "Ansicht" können folgende Einstellungen beeinflusst werden. Die Einstellungen werden nicht langfristig gespeichert.
Es wird versucht, die bei einem SQL-Lock geschützten SQL-Hash-Codes in Klarschrift UniqKey umzusetzen. Dies kann auf Kundensystemen recht lange dauern, wenn die beteiligten Tabellen viele Daten enthalten. Die Umsetzung kann für einen Snapshot auch im Nachhinein erfolgen. Sie ist aber nur dann möglich, wenn eine SQL-Verbindung zu dem SQL-Server besteht, auf dem der Snapshot erzeugt wurde. Die umgesetzten UniqKeys werden im Snaphot mit gespeichert.
In der Ansicht Prozessübersicht werden alle geschützten Resourcen einzeln angezeigt. Ist der Schalter nicht gesetzt, werden gleichartige Locks pro Tabelle aufsummiert.
Beim Erzeugen und beim Laden eines Snapshots aus einer Datei werden die im Snapshot enthaltenen Guids und LockResourcen in benutzerfreundliche Begriffe umgesetzt, die eine Analyse vereinfachen.
Für bestimmte Spalte wird eine Filterung auf enthaltene Datenwerte ermöglicht. Es werden nur solche Spalten angeboten, die unterschiedliche Datenwerte enthalten. Es werden nur die ersten n Datenwerte zur Auswahl angeboten.