Sql सर्वर से हाई डिस्क I / O या हाई डिस्क I / O धीमा sql सर्वर है?


18

मैं हमारे एसक्यूएल सर्वर पर प्रदर्शन के मुद्दों के बारे में एक डीबीए और कुछ हार्डवेयर लोगों के साथ बहस कर रहा हूं। आम तौर पर सबकुछ ठीक है, हालांकि पिछले कुछ हफ्तों में हम एसक्यूएल सर्वर में भारी अंतराल पर चल रहे हैं। यह स्पष्ट है कि SQL सर्वर डिस्क I / O पर प्रतीक्षा कर रहा है। लेकिन मुझे लगता है कि यह बताया जा रहा है कि SQL सर्वर SQL असामान्य रूप से उच्च I / O के लिए पूछ रहा है। जो मामला नहीं है। मैं देख सकता हूं कि क्या चल रहा है, सामान्य से बाहर कुछ भी नहीं है, और सभी डीबीए को यह देखने की परवाह है कि अवरुद्ध और इतने पर क्या कारण है, जो बेकार है। उदाहरण के लिए, मुख्य बात जो हम देखते हैं वह ASPState डेटाबेस पर प्रचालन है, जिसका उपयोग हम वेब सर्वर पर ASP सत्र राज्य के प्रबंधन के लिए कर रहे हैं। ये ऑपरेशन आमतौर पर Sp_who2 सक्रिय परिणामों पर कभी नहीं देखे जाते क्योंकि वे इतनी जल्दी होते हैं। डेटाबेस सरल रिकवरी मोड में है और लॉगिंग आपराधिक है। हालाँकि इन अंतराल स्पैकों के दौरान हम डेटाबेस को अवरुद्ध या प्रतीक्षा करते हुए बहुत से चुनिंदा और अपडेट संचालन देख सकते हैं। मुझे यकीन है कि जो चल रहा है, वह यह है कि कोई या कोई काम कुछ चल रहा है जो डेटाबेस लॉग और डेटा फ़ाइलों के लिए उपयोग किए जाने वाले छापे सरणियों पर भारी डिस्क का उपयोग कर रहा है। समस्या यह साबित कर रही है, क्योंकि कोई भी यह स्वीकार नहीं करना चाहता है कि वे कुछ ऐसा कर रहे हैं जो हमारी वेबसाइट को मार रहा है।

मेरा सवाल यह है कि प्रदर्शन काउंटर या जो कुछ भी मैं लॉग इन कर सकता हूं वह दिखाएगा कि एसक्यूएल सर्वर आई / ओ पर इंतजार कर रहा है, लेकिन इसलिए नहीं कि इसके सामान्य से अधिक के लिए पूछ रहा है, इसके बजाय बीक्यूस डिस्क एसक्यूएल सर्वर से अनुरोधों का जवाब देने में व्यस्त है के रूप में जल्दी के रूप में यह सामान्य रूप से होगा?


3
नेटवर्क I / O वास्तव में आप किस प्रतीक्षा स्थिति को देख रहे हैं? यानी, आप एक का उपयोग कर रहे हैं SAN?
एरिक हिगिंस

यह देखने के लिए जांचें कि क्या आपके पास कोई प्रश्न हैं जो DB सर्वर पर संसाधन उपयोग पर हावी हैं। अगर वहाँ हैं, उन ट्यूनिंग की कोशिश करो। यदि आपके पास कोई बुरा बर्ताव करने वाला प्रश्न नहीं है, तो उच्च PAGEIOLATCH प्रतीक्षा आमतौर पर आपके सिस्टम के I / O बाध्य होने का संकेत देगी। इसके अलावा, जैसा कि @EricHiggins कहता है, SAN अक्सर धीमा होते हैं और डेटाबेस के साथ प्रदर्शन समस्याओं का कारण बनते हैं।
ConcernedOfTunbridgeWells

इसका NETAPP सरणी Qlic फाइबर HBA के साथ sql सर्वर से जुड़ा है।
एजी

मुझे पता है कि यह एक अपेक्षाकृत पुराना सवाल है, और यह सीधे आपके मुद्दे को ठीक नहीं करेगा ... लेकिन हमने सत्र राज्य के लिए aspnet_state.exe पर स्विच किया और हमारे SQL सर्वर का बहुत अच्छा लोड देखा। यह अच्छी तरह से प्रलेखित नहीं है लेकिन सेटअप के लिए बहुत आसान है।
मैटगैगनर

तो आपने क्या किया / डीबीए ने क्या किया और क्या समस्या थी?
मुकुस

जवाबों:


19

निम्नलिखित परफ़ॉर्म काउंटरों पर एक नज़र डालें:

IO अनुरोधों की एक उच्च संख्या को चलाने वाले SQL सर्वर को उच्च संख्या स्कैन, पृष्ठ लुकअप और पृष्ठ रीड्स में वृद्धि और उच्च पृष्ठ IO कुंडी प्रतीक्षा के साथ पुष्टि की जाएगी। sys.dm_exec_query_statsउच्च भौतिक रीड काउंट्स वाली प्रविष्टियों के लिए एक नज़र डालने की कोशिश कर रहा है । वे जल्दी से अपराधी को इंगित कर सकते थे।

सामान्य रूप से समस्या को प्रदर्शन समस्या निवारण समस्या के रूप में, प्रतीक्षा और क्युस जैसी पद्धति के बाद सही दृष्टिकोण है। आपको लगता है कि डीबीए सही काम कर रहा है, इसलिए आपको उसे सुनना चाहिए।


मुझे DBA के साथ कोई समस्या नहीं है वह सबसे अच्छे DBA में से एक है जिसके साथ मैंने काम किया है। और उसने मुझे उच्च अवरुद्ध संग्रहित प्रक्रियाओं की एक सूची दी है। लेकिन जैसा कि मैंने उल्लेख किया है कि बहुत सारे अवरोध पैदा करने वाले एक प्रोक्सेस "TempUpdateStateItemLong" है, जो hte SQL सत्र स्टेट स्टोर द्वारा उपयोग किया जाने वाला एक प्रोक्योरमेंट है। इसका MS प्रोक, और यह केवल एक ही टेबल को अपडेट करता है सेशनआईडी जो कि टेबल पर अनुक्रमित प्राथमिक कुंजी है। इसके अलावा इस तालिका में 2000-3000 रिकॉर्ड हैं, इसलिए अपडेट को वास्तव में समय नहीं लेना चाहिए।
ऐकसी

शुरुआत करने के लिए यह एक अच्छा स्थान है। हम अभी भी SQL Server 2000 चला रहे हैं, हम अपग्रेड करने की प्रक्रिया में हैं, लेकिन यह कुछ और महीनों के लिए नहीं होगा, इसलिए मेरे पास PAO IO Latch का इंतजार करने के लिए काउंटर नहीं है। एक बार फिर धन्यवाद।
एजी

ध्यान दें कि प्रति-से अवरुद्ध करना उच्च IO का अर्थ नहीं है। यह ताला विवाद हो सकता है, और यह तालिका के आकार को प्रभावित नहीं करेगा, विशेष रूप से यदि ऑप्टिमाइज़र टेबल स्कैन आधारित योजना का चयन करता है।
रेमुस रुसानु

और यह भी जाँच प्रक्रिया के लिए IO Data Bytes/secऔर यदि किसी अन्य प्रक्रिया डिस्क trashing है देखते हैं।
रेमुस रुसानु

12

वास्तव में क्या हो रहा है, यह पता लगाने के लिए ग्लेन बेरी के नैदानिक ​​प्रश्नों और एडम मैकनिक के SP_Whoisactive का उपयोग शुरू करने के लिए ।

पहले देखें कि इस क्वेरी को चलाकर कौन सी डेटाबेस फ़ाइलों में सबसे अधिक IO अड़चन है (Glenn Berry द्वारा प्रश्न)

SELECT  DB_NAME(fs.database_id) AS [Database Name] ,
        mf.physical_name ,
        io_stall_read_ms ,
        num_of_reads ,
        CAST(io_stall_read_ms / ( 1.0 + num_of_reads ) AS NUMERIC(10, 1)) AS [avg_read_stall_ms] ,
        io_stall_write_ms ,
        num_of_writes ,
        CAST(io_stall_write_ms / ( 1.0 + num_of_writes ) AS NUMERIC(10, 1)) AS [avg_write_stall_ms] ,
        io_stall_read_ms + io_stall_write_ms AS [io_stalls] ,
        num_of_reads + num_of_writes AS [total_io] ,
        CAST(( io_stall_read_ms + io_stall_write_ms ) / ( 1.0 + num_of_reads
                                                          + num_of_writes ) AS NUMERIC(10,
                                                              1)) AS [avg_io_stall_ms]
FROM    sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
        INNER JOIN sys.master_files AS mf WITH ( NOLOCK ) ON fs.database_id = mf.database_id
                                                             AND fs.[file_id] = mf.[file_id]
ORDER BY avg_io_stall_ms DESC
OPTION  ( RECOMPILE );

फिर इस क्वेरी को उन शीर्ष दस घटनाओं को देखने के लिए चलाएं जिन्हें आपका सर्वर प्रतीक्षा कर रहा है ( जोनाथन केहियास द्वारा क्वेरी )। आपको ग्लेन बेरी डायग्नोस्टिक क्वेरी से समान क्वेरी भी मिलेगी।

SELECT TOP 10
        wait_type ,
        max_wait_time_ms wait_time_ms ,
        signal_wait_time_ms ,
        wait_time_ms - signal_wait_time_ms AS resource_wait_time_ms ,
        100.0 * wait_time_ms / SUM(wait_time_ms) OVER ( ) AS percent_total_waits ,
        100.0 * signal_wait_time_ms / SUM(signal_wait_time_ms) OVER ( ) AS percent_total_signal_waits ,
        100.0 * ( wait_time_ms - signal_wait_time_ms )
        / SUM(wait_time_ms) OVER ( ) AS percent_total_resource_waits
FROM    sys.dm_os_wait_stats
WHERE   wait_time_ms > 0 -- remove zero wait_time
        AND wait_type NOT IN -- filter out additional irrelevant waits
( 'SLEEP_TASK', 'BROKER_TASK_STOP', 'BROKER_TO_FLUSH', 'SQLTRACE_BUFFER_FLUSH',
  'CLR_AUTO_EVENT', 'CLR_MANUAL_EVENT', 'LAZYWRITER_SLEEP', 'SLEEP_SYSTEMTASK',
  'SLEEP_BPOOL_FLUSH', 'BROKER_EVENTHANDLER', 'XE_DISPATCHER_WAIT',
  'FT_IFTSHC_MUTEX', 'CHECKPOINT_QUEUE', 'FT_IFTS_SCHEDULER_IDLE_WAIT',
  'BROKER_TRANSMITTER', 'FT_IFTSHC_MUTEX', 'KSOURCE_WAKEUP',
  'LAZYWRITER_SLEEP', 'LOGMGR_QUEUE', 'ONDEMAND_TASK_QUEUE',
  'REQUEST_FOR_DEADLOCK_SEARCH', 'XE_TIMER_EVENT', 'BAD_PAGE_PROCESS',
  'DBMIRROR_EVENTS_QUEUE', 'BROKER_RECEIVE_WAITFOR',
  'PREEMPTIVE_OS_GETPROCADDRESS', 'PREEMPTIVE_OS_AUTHENTICATIONOPS', 'WAITFOR',
  'DISPATCHER_QUEUE_SEMAPHORE', 'XE_DISPATCHER_JOIN', 'RESOURCE_QUEUE' )
ORDER BY wait_time_ms DESC

एक बार आपके पास यह जानकारी होने के बाद समस्या का निवारण करना अधिक आसान होगा।

BTW आप यहाँ समस्या निवारण के लिए sp_whoisactive का उपयोग करने के बारे में कई पोस्ट पा सकते हैं


1
मैंने इस सूची में अंतिम स्क्रिप्ट का उपयोग किया है - इसकी किक गधा।
the_good_pony 10

1

"समस्या इसे साबित कर रही है", सही कहा। SQL सर्वर पर एक नज़र डालें : डिस्क I / O को छोटा करें

यह DMV का अनुसरण करने के बारे में बात कर रहा है

sys.dm_io_virtual_file_stats
sys.dm_io_pending_io_requests

संदर्भ:

  1. SQL सर्वर के भीतर से IO सबसिस्टम लेटेंसी की जांच कैसे करें
  2. ग्लेन बेरी का एसक्यूएल सर्वर प्रदर्शन - sysinos_io_pending_io_requests
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.