DMV'leri okurken READ UNCOMMITTED ayarı


12

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDSistem DMV'lerini okumadan önce birkaç kişinin aradığını gördüm . Aynı işlemdeki DMV'lere ve tablolara çağrıları karıştırmıyorsanız, bunu yapmak için herhangi bir neden var mı?


1
Aklınızda belirli bir DMV var mı? (Son zamanlarda fark ettiğim bir örnek burada sqlskills.com/blogs/jonathan/… )
Martin Smith

Jonathan bunu yaptığı için, bazı durumlarda bir neden olması gerektiğinden şüpheleniyorum. ☺ Soruyu sormamı isteyen şey sys.dm_exec_query_stats, sys.dm_exec_sql_textve ile birleştirilen bir sorguda görmekti sys.dm_exec_query_plan.
James L

Yanıtlar:


11

Adamlardan biri demo DMV sorgularını bu şekilde yazarken, nedenini açıklayacağım.

Yalnızca DMV'leri sorgulamak önemli midir? Hayır. Ama er ya da geç DMV betimlerinizden birini alacak ve baktığınız şey hakkında daha fazla bilgi almak için sys.databases veya sys.tables veya başka bir sistem nesnesine katılacaksınız. Burada taahhüt edilmemiş bir okumayı bilmiyorsanız, diğer sorgular tarafından engellenebilir ve diğer sorguları engelleyebilirsiniz. Bunu defalarca yaktım, bu yüzden herhangi bir teşhis çalışması yaptığımda varsayılan olarak READ UNCOMMITTED kullanıyorum.


1
@MartinSmith biraz zaman aldı, ama sonunda meta veri fonksiyonlarından kaç tanesinin izolasyon seviyesini görmezden geldiği hakkında blog yazdım . Benim bir sürü kod temizlemek için denedim ama hiçbir şey ziyade gibi yerleşik ins daha katılır tercih beri geliştirdik yeni OBJECT_ID(), SCHEMA_NAME()vb
Aaron Bertrand

7

Bunun bir fark yarattığını görmüyorum.

Aşağıdakileri denediğimde ve winmerge'deki her iki yalıtım seviyesi için kilit çıktısını karşılaştırırsam, bunlar tamamen aynıdır (ve hatta koymak SERIALIZABLEçıktıyı değiştirmez).

/*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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.