sqlserver2008 Deadlock-Lösung und Methode zur Leistungsoptimierung

Über Deadlock:
sp_who active – Sehen Sie, welcher den Deadlock verursacht hat. Der blockierte Spid ist in Schwarz;
dbcc inputbuffer(@blk) – Sie können überprüfen, welche SQL-Anweisung den Deadlock verursacht hat;
sp_lock – Sehen Sie sich an, welche Ressource gesperrt ist. Objid ist die ID der gesperrten Ressource.
select object_name(objid) kann den Namen der betroffenen Tabelle abrufen;
Basierend auf den oben genannten Funktionen können wir eine gespeicherte Prozedur schreiben, die automatisch Deadlocks findet, wie folgt:
Finden Sie deadlock.sql
ANSI_NULLS EINSETZEN
LOS
QUOTED_IDENTIFIER EINSETZEN
LOS
PROZEDUR ERSTELLEN Find_Lock
AS
BEGINNEN
SET NOCOUNT ON;
deklariere @spid int,@blk int
DECLARE cur CURSOR FOR
select 0 ,blockiert
from (select * from sysprocesses where blockiert>0 ) a
wo nicht vorhanden(wählen Sie * aus (wählen Sie * aus Systemprozessen aus, in denen blockiert ist>0 ) b
wobei a.blocked=spid)
union select spid,blocked from sysprocesses where blockiert>0
Strom öffnen
FETCH NEXT FROM cur INTO @spid,@blk
WHILE @@FETCH_STATUS = 0
beginnen
wenn @spid =0
select ' Die Prozessnummer, die den Deadlock verursacht hat, ist: '+ CAST(@blk AS VARCHAR(10)) + ', die SQL-Syntax für seine Ausführung ist wie folgt& #39;
sonst
select ' Prozessnummer SPID: '+ CAST(@spid AS VARCHAR(10))+ ' is' + ' Prozessnummer SPID : '+ CAST(@blk AS VARCHAR(10)) +'
Blockierung, die vom aktuellen Prozess ausgeführte SQL-Syntax lautet wie folgt '
DBCC INPUTBUFFER (@blk)
FETCH NEXT FROM cur INTO @spid,@blk
Ende
Strom schließen
Strom freigeben
ENDE
LOS
SQLServer-Leistungsoptimierung


EXEC sp_configure 'show advanced option', '1' – Nur wenn diese erweiterte Option aktiviert ist, können Sie andere Konfigurationen ändern.
los 
RECONFIGURE – Führen Sie die RECONFIGURE-Anweisung zur Installation aus, d. h. um die obige Anweisung wirksam zu machen
los 
sp_configure 'Benutzerverbindungen','0'   –
los 
NEU KONFIGURIEREN 
los 


los
exec sp_configure 'awe aktiviert','1' – Der Speicher kann 64g unterstützen
exec sp_configure 'Lightweight Pooling','0' – keine NT-Fibre verwenden
exec sp_configure 'priority boost','1' – SQLServer-Priorität erhöhen
exec sp_configure 'Netzwerkpaketgröße (b)','8192' – Erhöhen Sie die Größe des SQLServer-Netzwerkpakets
mit Override neu konfigurieren
– Datenbankeinstellungen optimieren
@currentdatabase-Systemnamen deklarieren
select @currentdatabase = db_name((select dbid from master.dbo.sysprocesses wherespid = @@spid))
exec sp_dboption @currentdatabase, 'select into/bulkcopy', 'true' – Keine Protokollierung für Datenoperationen mit großer Kapazität
exec sp_dboption @currentdatabase, 'trunc. log on chkpt.', 'true' – Protokolle automatisch abschneiden
exec sp_dboption @currentdatabase, „Statistiken automatisch erstellen“, „true“ – Statistiken automatisch erstellen
exec sp_dboption @currentdatabase, 'Statistiken automatisch aktualisieren',„wahr“ – Automatisches Update-System
los
Wenn Sie keine routinemäßige Wartung durchführen, beginnen Sie jetzt damit.
Verwenden Sie häufig DBCC showcontig (Tabellenname), um die Fragmentierung der Tabelle zu überprüfen, hauptsächlich um die Scandichte zu überprüfen. Wenn die Scandichte der Haupttabelle < 40 % beträgt, bedeutet dies, dass Sie eine starke Fragmentierung haben und DBCC indexDefrag (Datenbank) verwenden können (Name, Tabellenname), um ihn zu defragmentieren. Oder verwenden Sie DBCC DBREINDEX (Tabellenname), um den Index neu zu erstellen.

おすすめ

転載: blog.csdn.net/Jockey/article/details/45097383