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?
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);