Fragensteller
In einem Logon Trigger SET DEADLOCK_PRIORITY LOW Anweisung verwenden

Frage
-
Hallo
Ich suche nach einer Möglichkeit eine neue ankommende Session zu identifizieren und dann die Priorität für Deadlock für diese mit SET DEADLOCK_PRIORITY LOW zu ändern. Kann das mit einem Logon Trigger funktionieren?
Wenn nicht währe ich auch dankbar für eine Idee wie so was zu bewerkstelligen währe. Verwendet wird SQL Server 2012 Standard Edition mit SP3.
Danke!
Alle Antworten
-
Hallo
aufgrund eigener Tests kann ich bestätigen, dass man Sessions nicht indizieren kann.
Hintergrund hier ist dass es sich um eine "Set-Option" handelt, und da gilt folgendes:
If a SET statement is run in a stored procedure or trigger, the value of the SET option is restored after control is returned from the stored procedure or trigger. Also, if a SET statement is specified in a dynamic SQL string that is run by using either sp_executesql or EXECUTE, the value of the SET option is restored after control is returned from the batch specified in the dynamic SQL string.
(BOL)Sofern die Option nicht zufällig im jeweiligen Provider enthalten ist und zur Connection-Zeit angegeben werden kann, kann man SET DEADLOCK_PRIORITY LOW tatsächlich nur innerhalb der jeweils kritischen Prozeduren setzen
Andreas Wolter (Blog | Twitter)
MCSM: Microsoft Certified Solutions Master Data Platform/SQL Server 2012
MCM SQL Server 2008
MVP Data Platform
www.SarpedonQualityLab.com | www.andreas-wolter.com -
Hallo Herr Wolter,
vielen Dank für die Antwort!
Die Session kommt übrigens von einer Oracle 12c Datenbank über ein Gateway der selben Version. Wissen sie zufällig ob es bei dem Provider eine solche Option gibt? Es gibt da für jede Gateway eine INI Datei in der diverse Parameter möglich sind wobei ich aber leider nichts passendes gefunden habe, übersehe ich da vielleicht was?
Die Frage ist aber wahrscheinlich besser in einem Oracle Forum zu stellen. Sie haben mir aber trotzdem schon weiter geholfen. Danke!
-
Hallo
ich würde dem sehr geringe Chancen geben. Ich habe noch nie gesehen, das ein Provider dieses Setting kennt.
Wenn man es zuende denkt: Es muss ja ohnehin als Set-Befehl innerhalb der Session ausgeführt werden. Es ist keine Umgebungseinstellung wie zB das Transaction Isolation Level. Das kennen auch fast alle Provider. So eine Set-Option müsste ja immer als Befehl direkt nach Verbindungsaufbau erfolgen. Das kann man sicher als eigene Klasse machen, aber fertig wie gesagt wäre es mir neu.Sorry für die schlechten Nachrichten und das ich Ihnen da möglicherweise umsonst Hoffnung gemacht hatte.
Vielleicht können Sie in den Code der ANDEREN Sessions eingereifen, sprich in die Prozeduren, und denen eine "High Priority" verpassen. Ansonsten kann und sollte man versuchen über die Indizierung und andere Möglichkeiten die Wahrscheinlichkeit für deadlocks zu verringern.
Andreas Wolter (Blog | Twitter)
MCSM: Microsoft Certified Solutions Master Data Platform/SQL Server 2012
MCM SQL Server 2008
MVP Data Platform
www.SarpedonQualityLab.com | www.andreas-wolter.com