web-dev-qa-db-fra.com

Réglage de la lecture non engagée lors de la lecture de DMVS

J'ai vu plusieurs personnes appeler SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED Avant de lire le système DMVS. Y a-t-il une raison quelconque de cela de faire cela, en supposant que vous ne mélangez pas des appels sur des DMV et des tables dans la même transaction?

12
James L

Je ne vois pas que cela fait de différence.

Si j'essaie les éléments suivants et que vous comparez la sortie de verrouillage des deux niveaux d'isolation à Winmerge, ils sont exactement les mêmes (et même le mettre jusqu'à SERIALIZABLE ne change pas la sortie).

/*Do once so compilation and caching out the way*/
EXEC('select st.text, qp.query_plan, cp.cacheobjtype, cp.objtype, cp.plan_handle
from sys.dm_exec_cached_plans cp 
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
cross apply sys.dm_exec_query_plan(cp.plan_handle) qp')

DBCC TRACEON(1200,3604,-1);

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
PRINT 'READ COMMITTED'
EXEC('select st.text, qp.query_plan, cp.cacheobjtype, cp.objtype, cp.plan_handle
from sys.dm_exec_cached_plans cp 
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
cross apply sys.dm_exec_query_plan(cp.plan_handle) qp')


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
PRINT 'READ UNCOMMITTED'
EXEC('select st.text, qp.query_plan, cp.cacheobjtype, cp.objtype, cp.plan_handle
from sys.dm_exec_cached_plans cp 
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
cross apply sys.dm_exec_query_plan(cp.plan_handle) qp')

DBCC TRACEOFF(1200,3604,-1);
7
Martin Smith