SOG-Helpcenter Logo SOG Business - Software

sogdblockanalyzer - Analyse von SQL Server Datenbankblokaden


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]

 

-nosnap

Keine Erzeugung eines Snaphots zu Anfang des Programmlaufes.

-con Datenbankverbindung

Einstellen der gewünschten Datenbankverbindung (Standard: global)

-user Benutzer

Nur Datensätze des angegebenen Benutzer anzeigen. Kann verwendet werden, um bei der Entwicklung von Software ein Auge auf das Satzschutzverhalten zu haben.

-dbs Datenbank

Nur Datensätze zu der angegebenen Datenbank anzeigen.

-intervall Sekunden

Automatisches Erzeugen eines Snapshots alle n Sekunden

-autosave Verzeichnisname

Automatisches Speichern von Snapshots, sofern diese blockaderelevante Daten enthalten.

-autosaveintervall Sekunden

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.

-curdb

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.

-hotsave Verzeichnis

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.

-shutdown Verzeichnisse/-

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.

-autoclose

In Verbindung mit "-shutdown": Wenn alle Prozesse beendet wurden, beendet sich SOGDbLockAnalyzer von selbst.

-fkt Text

Zeigt in der Shutdown-Ansicht das Funktionspanel mit dem angegebenen Text an.

-ignoreprg Programme

Kommagetrennte Liste von Programmen, die in der Shutdownansicht nicht angezeigt werden sollen.

-host hosts

Kommagetrennte Liste von Hosts, die einzig in der Shutdownansicht angezeigt werden sollen.

-nonewprg

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.

Dateiname

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.

Die Ansichten


Ü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.

Ansicht Lockübersicht


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:

 

Relevanz

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)

Hostname

Name des Client-Computers, an dem der Prozess läuft (Aus Sicht des Datenbankservers).

Hostprocess

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.

BlockGroups

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.

Blocked

Anzahl der blockierten Datenbankprozesse. Ist der Wert größer als 0, wird er orange dargestellt.

WaitTime

Summe der Anzahl Millisekunden, die die Datenbankprozesse des Prozesses bereits gewartet haben. Ist der Wert nicht "0", wird er gelb dargestellt.

Spids

Anzahl der zugeordneten Datenbankprozesse (spid).

LogicalLocks

Anzahl der von diesem Prozess gehaltenen logischen Locks (hhlock). Ist der Wert >0 wird er gelb dargestellt.

LogicalWaits

Anzahl der von diesem Prozess durchgeführten logischen Warteoperationen (hhlock). Ist der Wert >0 wird er orange dargestellt.

LogicalWaiter

Anzahl der auf diesen Prozess logisch wartenden Datenbankprozesse (hhlock). Ist der Wert >0 wird er orange dargestellt.

PysicalLocks

Anzahl der von diesem Prozess gehaltenen physikalischen Locks. Ist der Wert >0 wird er gelb dargestellt.

PysicalWaits

Anzahl der von diesem Prozess durchgeführten physikalischen Warteoperationen. Ist der Wert >0 wird er orange dargestellt.

PysicalWaiter

Anzahl der auf diesen Prozess physikalisch wartenden Datenbankprozesse (hhlock). Ist der Wert >0 wird er orange dargestellt.

BlockedByProcess

Prozesse, durch die dieser Prozess blockiert wird im Format "Computername.ProzessId". Ist hier ein Wert enthalten, wird diese orange dargestellt.

ProgramName

Programmname des ausführenden Programms, wie er von dem Programm an die Datenbank übermittelt wurde.

User

Benutzername. Vom Programm an die Datenbank übermittelter Login oder NTLogin des Datenbankprozesses.

OpenTrans

Wert != 0 zeigt an, dass eine offene Transaktion vorhanden ist.

TransStart

Startzeit der aktuell offenen Transaktion.

XSach

Sachbearbeiter-Id, unter der der Prozess ausgeführt wird (Eintrag in dbsema).

Semaphore

Geschützte Sempahoren und Client-Lizenzen.

DeadLock

Dieser Schalter ist gesetzt, wenn der Prozess an einem DeadLock beteiligt ist. In diesem Fall wird das Feld in der Farbe Lila angezeigt.

RecNr

Eindeutige Satznummer. (Zu Debugzwecken).

Ansicht Prozessübersicht


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:

 

Relevanz

Ü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.

Dbs

Name der Datenbank

Spid

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.

Object

Tabellenname

Mode

Lockmods (Siehe SQL Server Dokumentation). U-Update X=Exclusive S-Shared I.=Intended

Type

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,

UniqKey

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.

IndId

IndexId des physkalischen Satzschutzes. 1: Primärdaten

Resource

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.

Status

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.

BlockedTime

Anzahl Millisekunden, die bereits auf den Lock gewartet wird. Ist der Wert >0 wird er gelb dargestellt.

Owner

Eigentümer des Locks in der Form "Spid (Prozess.ProzessId)". Ist der Prozess an einem DeadLock beteiligt, wird der Wert lila dargestellt.

Count

Werden die Daten konsolidiert, wird hier die Anzahl der konsolidierten Detaildaten dargestellt. Ist die Anzahl > 1, wird sie gelb dargestellt.

ParentIds

Die vom Clientprozess gemeldeten ParentIds (Im Falle von ActiveSkin: TabReiter)

ProgramName

Name des Programms

BlockGroups

Beteiligte Blockierungsgruppen

User

Benutzername

OpenTrans

Wert != 0 zeigt an, dass eine offene Transaktion vorhanden ist.

TransStart

Startzeit der aktuell offnene Transaktion.

DeadLock

Gesetzt, wenn der Prozess an einem DeadLock beteiligt ist. In diesem Fall wird der Wert lila dargestellt.

Hostname

Name des ClientComputers.

Hostprocess

ProcessId des Prozesses auf dem Client.

LockOwn

Eigentümernummer eines logsichen Schutzes.

LastRequestEndTime

Ende des letzten Datenbank-Requests auf der/den Verbindung(en)

HastActiveRequests

true: Für diese Verbindung liegen AktiveRequests vor. Abfrage durch Kontextmenü "Details" oder Doppelklick.

Dbid

SQL-Id der Datenbank

Objid

SQL-Id des Datenbankobjektes

XSach

Sachbearbeiter-Id, unter der der Prozess ausgeführt wird (Eintrag in dbsema).

Semaphore

Geschützte Sempahoren und Client-Lizenzen.

Dbhhcontexts

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

Conguids der Prozesses. Conguid sollte pro Datenbankprozess eindeutig sein.

CurDir

Vom Clientprozess in dbhhcontext eingetragenes aktuelles Verzeichnis.

ExePath

Vom Clientprozess in dbhhcontext eingetragenes ausführungs-Image.

CmdLine

Vom Clientprozess in dbhhcontext eingetragene Kommandozeile.

MachineName

Vom Clientprozess in dbhhcontext eingetragener Maschinenname.

DomainName

Vom Clientprozess in dbhhcontext eingetragener Domänenname der Benutzeranmeldung.

UserName

Vom Clientprozess in dbhhcontext eingetragener Benutzername der Benutzeranmeldung.

ExeInfo

Vom Clientprozess in dbhhcontext eingetragene Informationen zum ausgeführten Prozess. z.B. Versionnummern, 64Bit, etc.

Ansicht Lizenzübersicht


Ü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:

 

Relevanz

Ü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.

Dbs

Datenbank.

Projekt

Lizenzprojekt (Paket).

Anzahl

Anzahl vorhandener Lizenzen zu diesem Paket.

Benutzer

Aktueller Benutzer.

LfdNr

Laufende Lizenznummer. Ermöglicht das einfache "Auszählen" der aktiven Lizenzen.

Hostname

Name des Clients.

SessionId

TerminalServer Session des Client.

ProcCount

Anzahl der unter dieser Lizenz aktiven Prozesse.

SpidCount

Anzahl der unter dieser Lizenz aktiven Datenbankprozesse.

hhproj

Zugeordnetes Projekt.

hhfirm

Zugeordnete Firma.

Ansicht Datenbanknutzung


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.

Ansicht Transaktionen


In der Ansicht Transaktionen werden alle Transaktionen angezeigt, die Reservierungen in den Protokollen haben, und damit für Satzschütze relevant sind.

 

Relevanz

Ü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.

Dbs

Datenbank

TransId

Id der Transaktion

Spid

Datenbank-Prozesss

BeginTime

Zeitpunkt des Starts der Transaktion (physikalischer Startzeitpunkt)

LogRecordCount

Anzahl Datensätze, die protokolliert wurden.

LogBytesUsed

Anzahl Bytes die durch die Transaktion in den Protokollen genutzt werden.

LogBytesReserved

Anzahl Bytes die durch die Transaktion in den Protokollen reserviert werden.

LogBytesUsedSystem

System-Nutzung

LogBytesReservedSystem

System-Reservierung

Name

Name der Transaktion

Einstellungen


Über das Menu "Ansicht" können folgende Einstellungen beeinflusst werden. Die Einstellungen werden nicht langfristig gespeichert.

 

Lockresourcen abfragen

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.

AlleDetails

In der Ansicht Prozessübersicht werden alle geschützten Resourcen einzeln angezeigt. Ist der Schalter nicht gesetzt, werden gleichartige Locks pro Tabelle aufsummiert.

Guids zur Anzeige ersetzen

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.

Filter aktivieren

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.