नमस्ते,
मैं इस आलेख श्रृंखला में SQL सर्वर की प्रदर्शन समस्याओं का निवारण कैसे करना है, यह बताना जारी रखूंगा।
SQL सर्वर प्रदर्शन समस्या निवारण
इससे पहले पिछला लेख पढ़ें।
PERFMON के माध्यम से प्रदर्शन काउंटरों की निगरानी | SQL सर्वर प्रदर्शन समस्या निवारण -3
DMV (डायनेमिक मैनेजमेंट व्यू)
SQL सर्वर 2005 में पेश किए गए DMV (डायनेमिक मैनेजमेंट व्यू) और DMF (डायनेमिक मैनेजमेंट फंक्शन्स) के साथ, आप डेटाबेस में होने वाली सभी गतिविधियों की निगरानी कर सकते हैं, प्रदर्शन की स्थिति और डेटाबेस के प्रबंधन और निगरानी के लिए सिस्टम जानकारी प्रदर्शित कर सकते हैं।
सभी डेटाबेस (Oracle, SQL Server, MySQL, Sybase, PostreSQL, DB2, आदि) सिस्टम के बारे में कुछ आंतरिक जानकारी (सत्र, प्रक्रिया आदि गतिविधियां और उनके आंकड़े) एकत्र करते हैं और इन डेटा को सिस्टम टेबल और व्यू के रूप में प्रदान करते हैं।
OS और डेटाबेस के बारे में जानकारी प्राप्त करने के लिए, निम्न सूचनाएँ आमतौर पर सिस्टम टेबल में उपलब्ध होती हैं जिन्हें SQL सर्वर द्वारा समय-समय पर अपडेट किया जाता है।
- डेटाबेस और डेटाबेस सर्वर के बारे में सामान्य जानकारी (नाम, संस्करण, संस्करण, चरित्र सेट आदि)
- सक्रिय प्रश्न
- CPU, I / O और सक्रिय क्वेरी का मेमोरी उपयोग
- निष्पादन योजना
- चल रही क्वेरी द्वारा उपयोग किया जाने वाला अनुक्रमणिका
- मेमोरी, डिस्क और नेटवर्क में I/O प्रतीक्षा करें
- अनुपलब्ध इंडेक्स जो डेटाबेस के प्रदर्शन पर प्रतिकूल प्रभाव डालते हैं
- सूचकांक की उपयोग दर (स्कैन करें, मूल्यों की तलाश करें)
- डिस्क का रिस्पांस टाइम
DMF (डायनेमिक मैनेजमेंट फंक्शन)
हालाँकि SQL सर्वर में DMV और DMF एक जैसे लगते हैं, लेकिन उनके बीच के अंतर को सीधे DMV के नाम से क्वेर किया जा सकता है, जबकि DMF ऐसे फंक्शन हैं जो एक पैरामीटर लेते हैं और उसी के अनुसार एक टेबल लौटाते हैं।
डीएमवी और डीएमएफ के लिए धन्यवाद, आप उत्पादन के रूप में चल रहे महत्वपूर्ण डेटाबेस की निगरानी कर सकते हैं, समस्याओं की तुरंत पहचान कर सकते हैं और तदनुसार कार्रवाई कर सकते हैं। इन प्रश्नों के साथ, आप डेटाबेस में सक्रिय चल रहे प्रश्नों से अधिकांश CPU, I / O और मेमोरी उपभोग करने वाले कथनों को क्वेरी कर सकते हैं, लापता इंडेक्स टेबल ढूंढ सकते हैं और धीमी गति से चलने वाली क्वेरी ढूंढ सकते हैं।
SQL सर्वर में उपलब्ध सभी DMV और DMF को निम्न क्वेरी के साथ क्वेर किया जा सकता है।
नाम चुनें, sys.system_objects से type_desc जहां नाम से 'dm%' क्रम जैसा नाम;
SQL सर्वर में उपयोग किए गए ये DMV और DMF उपयोगकर्ताओं को सत्र, डेटाबेस, OS (ऑपरेटिंग सिस्टम), लेन-देन, आदि जैसी श्रेणियों के अनुसार जानकारी प्रदान करते हैं। उदाहरण के लिए; डेटाबेस श्रेणी में DMV और DMF sys.dm_db . से शुरू होते हैं या लेन-देन से संबंधित DMV और DMF sys.dm_tran . से शुरू होते हैं ।
श्रेणियों के अनुसार DMV और DMF की सूची इस प्रकार है।
सबसे अधिक इस्तेमाल किया जाने वाला DMV और DMF निम्नलिखित की तरह हैं।
निष्पादन (एसक्यूएल, क्वेरी, प्रक्रिया आदि): सक्रिय चल रहे प्रश्न 'डीएमवी और डीएमएफ जो जानकारी प्रदान करते हैं जैसे कि किस मशीन से किस उपयोगकर्ता को बुलाया जाता है, प्रक्रियाएं, अनुमानित समाप्ति समय और क्वेरी आंकड़े।
सबसे महत्वपूर्ण इस प्रकार हैं।
- sys.dm_exec_query_stats (DMV)
- sys.dm_exec_requests (DMV)
- sys.dm_exec_sessions (DMV)
- sys.dm_exec_connections (DMV)
- sys.dm_exec_query_plan (DMF)
- sys.dm_exec_sql_text (DMF)
- sys.dm_exec_cached_plans (DMV)
- sys.dm_exec_cursors (DMF)
डेटाबेस: यह डीएमवी और डीएमएफ है जो डेटाबेस स्तर पर इंडेक्स, मिररिंग और विभाजन के बारे में आवश्यक जानकारी देता है। सबसे महत्वपूर्ण इस प्रकार हैं।
- sys.dm_db_missing_index_details (DMV)
- sys.dm_db_missing_index_columns (डीएमएफ)
- sys.dm_db_missing_index_groups (DMV)
- sys.dm_db_missing_index_group_stats (DMV)
- sys.dm_db_index_usage_stats (DMV)
- sys.dm_db_index_physical_stats (DMF)
- sys.dm_db_index_operational_stats (DMF)
- dm_db_partition_stats (DMV)
- sys.dm_db_mirroring_connections (DMV)
ऑपरेटिंग सिस्टम: यह DMV और DMF है जो ऑपरेटिंग सिस्टम के बारे में आवश्यक जानकारी देता है। सबसे महत्वपूर्ण इस प्रकार हैं।
- sys.dm_os_sys_info (DMV)
- sys.dm_os_sys_memory(DMV)
- sys.dm_os_waiting_tasks(DMV)
- sys.dm_os_wait_stats(DMV)
- sys.dm_os_waiting_tasks (DMV)
- sys.dm_os_performance_counters(DMV)
- sys.dm_os_cluster_nodes (DMF)
- sys.dm_tran_active_transactions (DMV)
- sys.dm_tran_session_transactions (DMV)
- sys.dm_tran_database_transactions (DMV)
- sys.dm_tran_current_transaction (DMV)
शीर्ष 10 मामले का चयन करें जब sql_handle IS NULL तब '' और (substring(st.text,(qs.statement_start_offset+2)/2, (मामला जब qs.statement_end_offset =-1 तब len(convert(nvarchar(MAX))) ,st.text))*2 और qs.statement_end_offset end - qs.statement_start_offset) /2) ) query_text, qp.query_plan, (total_worker_time+0.0)/1000 के रूप में total_worker_time, (total_worker_time+0.0)/(execution_count* ) के रूप में [AvgCPUTime], Total_logical_reads के रूप में [LogicalReads], Total_logical_writes के रूप में [logicalWrites], एक्ज़ीक्यूशन_काउंट, क्रिएशन_टाइम, last_execution_time, Total_logical_reads+total_logical_writes as [AggIO], (total_logical_reads+total_execution_counts)/(total_logic_reads+total_execution_counts)/ st.dbid) डेटाबेस_नाम के रूप में, st.objectid object_id के रूप में sys.dm_exec_query_stats qs से क्रॉस लागू करें sys.dm_exec_sql_text(sql_handle) सेंट क्रॉस लागू करें sys.dm_exec_query_plan(qs.plan_handle) AS qp जहां Total_worker_time> 0 Total_worker_time desc द्वारा ऑर्डर करें;
जब मैं उपरोक्त क्वेरी को एडवेंचरवर्क्स परीक्षण डेटाबेस में चलाता हूं जिसका उपयोग मैंने अपने परीक्षणों के लिए किया था, तो आउटपुट निम्नानुसार होगा।
मैं स्क्रिप्ट साझा करूंगा (ओएस और डेटाबेस डीएमवी और डीएमएफ शामिल करें) जो ओएस के बारे में सामान्य जानकारी देता है कि SQL सर्वर डेटाबेस इंस्टेंस चल रहा है, जैसे कुल सीपीयू, मेमोरी, कुल डिस्क आकार, डेटाबेस आकार और लेनदेन लॉग आकार।
आपकी डेटाबेस सूची तैयार करते समय इस स्क्रिप्ट की विशेष रूप से आवश्यकता होती है।
sp_configure 'उन्नत विकल्प दिखाएं', 1;GORECONFIGURE;GOsp_configure 'ओले ऑटोमेशन प्रक्रियाएं', 1;GORECONFIGURE;GO/************************ ********************************/सेट नोट ऑनडेक्लेयर @hr intDECLARE @fso intDECLARE @drive char(1)DECLARE @ odrive intDECLARE @TotalSize varchar(20) DECLARE @MB न्यूमेरिक; सेट @ एमबी =1048576 टेबल # ड्राइव (ड्राइव चार (1) प्राथमिक कुंजी, फ्रीस्पेस इंट न्यूल, टोटल साइज इंट न्यूल) डालें अगर @hr <> 0 EXEC sp_OAGetErrorInfo@fsoDECLARE dcur CURSOR LOCAL FAST_FORWARDFOR सेलेक्ट ड्राइव से #drives का चयन करें, तो ड्राइव द्वारा dcur खोलें और फिर dcur से @driveWHILE @@FETCH_STATUS,@fso,'Get_OAMethod @fso,'Get_OAMethod @ ड्राइव से आगे फ़ेच करें। OUT, @driveIF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr =sp_OAGetProperty@odrive,'TotalSize', @TotalSize OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo@odrive UPDATE #drives SET [email protected]/@MB [email protected] dcur से @driveEndClose dcurDEALLOCATE dcurEXEC @hr=sp_OADestroy @fso IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso--Select @@Servername--SELECT---drive, TotalSize as 'Total(MB) ', फ्रीस्पेस #ड्राइव से 'फ्री (एमबी)' के रूप में - ड्राइव द्वारा ऑर्डर करें
तालिका बनाएं #CPUInfo(Logical_CPU_Count bigint, Hyperthread_Ratio bigint, Physical_CPU_Count bigint, Physical_Memory_MB bigint)
#CPUInfo (Logical_CPU_Count, Hyperthread_Ratio, Physical_CPU_Count, Physical_Memory_MB) में INSERT INTO [Logical_CPU_Count] ,hyperthread_ratio AS [Hyperthread_Ratio], sys. पूर्व> तालिका बनाएं Total_Database_Data_File_Size_MB) कन्वर्ट का चयन करें (वर्कर (50), सर्वरप्रॉपर्टी ('मशीननाम')) 'मशीन_नाम', कन्वर्ट (वर्कर (50), isnull (सर्वरप्रॉपर्टी ('इंस्टेंसनाम'), 'mssqlserver')) 'इंस्टेंस_नाम', कन्वर्ट (वर्कर () 50),@@ सर्वरनाम) 'एसक्यूएल_सर्वर_नाम', योग (ls.cntr_value/1024) [Total_Database_log_size_MB] के रूप में, योग (lu.cntr_value/1024) [Total_Database_log_used_MB] के रूप में, योग (ds.cntr_value/1024) [Total_Database_Data से [Total_Database_Data] के रूप में sys.databases d बायां बाहरी जुड़ना sys.dm_os_performance_counters पर lu.instance_name=d.name पर lu के रूप में और lu.counter_name जैसे N'Log फ़ाइल (ओं) का उपयोग किया गया आकार (KB)%' बायां बाहरी sys.dm_os_performance_counters को ls पर ls के रूप में शामिल करें। इंस्टा nce_name=d.name और ls.counter_name जैसे N'Log File(s) Size (KB)%' और ls.cntr_value> 0 लेफ्ट आउटर जॉइन sys.dm_os_performance_counters lp पर lp.instance_name=d.name और lp.counter_name जैसे N'Percent लॉग यूज़्ड%' बाएँ बाहरी sys.dm_os_performance_counters को ds के रूप में ds.instance_name=d.name और ds.counter_name जैसे N'Data फ़ाइल(s) साइज़ (KB)%' जहाँ d.database_id>4; - सिस्टम डेटाबेस में साइज़डिस्क एएस (- सनुकु üzerindeki tüm ड्राइव साइज़ और फ्री साइज़ बिलगिसी सेलेक्ट SUM (TotalSize) को 'Total_Disc_Sizeon_Server_MB' के रूप में, SUM (फ्रीस्पेस) को 'Total_Free_Disc_SizeOn_Server_MB' के रूप में, SUM (फ्रीस्पेस) को 'Total_Free_Disc_SizeOn_Server_MB' के रूप में चुनें, * #drive से #drive_C_SizeOn_Server_MB' सेलेक्ट करें। SizeDiscDROP तालिका # ड्राइव ड्रॉप तालिका #DatabaseInfoDROP तालिका #CPUInfo GO/********************** ******************//* ओले ऑटोमेशन प्रक्रियाओं को अक्षम करना */sp_configure 'उन्नत विकल्प दिखाएं', 1;गोरकॉन्फिगर;GOsp_configure 'ओले ऑटोमेशन प्रक्रियाएं', 0;गोरकॉन्फिगर;/ *********************************************** *****/जाओ
स्क्रिप्ट का आउटपुट इस प्रकार है।
मैं अगले लेख में SQL सर्वर प्रदर्शन समस्या निवारण की व्याख्या करना जारी रखूंगा।
SQL सर्वर प्रदर्शन समस्या निवारण -5 SQL सर्वर प्रोफाइलर का उपयोग करना