DMV पढ़ते समय READ UNCOMMITTED सेट करना


12

मैंने कई लोगों को SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDसिस्टम DMV पढ़ने से पहले कॉल करते देखा है । क्या ऐसा करने का कोई कारण है, मान लें कि आप डीएमवी और तालिकाओं में कॉल को एक ही लेनदेन में नहीं मिला रहे हैं?


1
क्या आपके मन में कोई विशिष्ट DMV है? (एक उदाहरण जो मैंने हाल ही में देखा था, वह था sqlskills.com/blogs/jonathan/… )
मार्टिन स्मिथ

चूंकि जोनाथन यह कर रहा है, मुझे संदेह है कि कुछ परिस्थितियों में एक कारण होना चाहिए। ☺ जो सवाल पूछने के लिए मुझे प्रेरित किया, उसे एक प्रश्न में देख रहा था जो इसमें शामिल हो sys.dm_exec_query_statsगया sys.dm_exec_sql_textऔर sys.dm_exec_query_plan
जेम्स एल

जवाबों:


11

जैसा कि दोस्तों में से एक डेमो DMV क्वेरी को इस तरह से लिखता है, मैं समझाता हूँ कि क्यों।

क्या यह मायने रखता है अगर आप केवल डीएमवी की क्वेरी कर रहे हैं ? नहीं, लेकिन जितनी जल्दी या बाद में, आप अपनी DMV स्क्रिप्ट में से एक लेने जा रहे हैं और आप क्या देख रहे हैं, इसके बारे में अधिक जानकारी प्राप्त करने के लिए sys.dat डेटाबेस या sys.tables या किसी अन्य सिस्टम ऑब्जेक्ट से जुड़ने का प्रयास कर रहे हैं। यदि आपने वहां बिना पढ़े नहीं हैं, तो आप अन्य प्रश्नों को अवरुद्ध कर सकते हैं, और अन्य प्रश्नों को ब्लॉक कर सकते हैं। मुझे उस बार-बार जलाया गया है, इसलिए जब भी मैं कोई भी नैदानिक ​​कार्य कर रहा हूं, तो मैं डिफ़ॉल्ट रूप से READ UNCOMMITTED का उपयोग करता हूं।


1
@MartinSmith इसमें कुछ समय लगा, लेकिन मैंने अंततः इस बारे में ब्लॉग किया कि मेटाडेटा के कितने कार्य आइसोलेशन स्तर को अनदेखा करते हैं । मैं अपने कोड का एक बहुत साफ करने के लिए कोशिश की है, लेकिन मैं कुछ भी नया विकसित किया है तब से पसंद करती हैं बल्कि तरह बनाया-इन से जुड़ जाता है OBJECT_ID(), SCHEMA_NAME()आदि
हारून बर्ट्रेंड

7

मुझे नहीं लगता कि इससे कोई फर्क पड़ता है।

अगर मैं निम्नलिखित की कोशिश करता हूं और winmerge में दोनों अलगाव स्तरों के लिए लॉक आउटपुट की तुलना करता हूं तो वे बिल्कुल समान हैं (और इसे SERIALIZABLEआउटपुट को बदलने के लिए नहीं डालते हैं )।

/*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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.