Ich habe gesehen, wie mehrere Leute angerufen haben, SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
bevor sie System-DMVs gelesen haben. Gibt es jemals einen Grund, dies zu tun, vorausgesetzt, Sie mischen nicht Aufrufe von DMVs und Tabellen in derselben Transaktion?
sql-server
dmv
James L
quelle
quelle
sys.dm_exec_query_stats
zusys.dm_exec_sql_text
undsys.dm_exec_query_plan
.Antworten:
Da einer der Jungs auf diese Weise Demo-DMV-Abfragen schreibt, erkläre ich, warum.
Ist es wichtig, wenn Sie nur DMVs abfragen? Nein. Aber früher oder später werden Sie eines Ihrer DMV-Skripte nehmen und einen Join zu sys.databases oder sys.tables oder einem anderen Systemobjekt anheften, um mehr Informationen über das zu erhalten, was Sie suchen. Wenn Sie dort nicht unverbindlich gelesen haben, können Sie von anderen Abfragen blockiert werden und andere Abfragen blockieren. Das hat mich immer wieder verbrannt, daher verwende ich standardmäßig immer dann READ UNCOMMITTED, wenn ich irgendwelche Diagnosearbeiten mache.
quelle
OBJECT_ID()
,SCHEMA_NAME()
usw.Ich sehe keinen Unterschied.
Wenn ich Folgendes versuche und die Sperrausgabe für beide Isolationsstufen in winmerge vergleiche, sind sie genau gleich (und selbst wenn ich sie so einstelle, dass sich
SERIALIZABLE
die Ausgabe nicht ändert).quelle