उच्च WRITELOG Azure SQL डेटाबेस पर प्रतीक्षा करें

Aug 18 2020

हमारे Azure SQL डेटाबेस के मेरे WaitStats विश्लेषण WRITELOG और HADR_SYNC_COMMIT को उच्चतम प्रतीक्षा के रूप में दिखा रहा है। यह एक प्रीमियम 250 eDTU संसाधन है।

लिपि

SELECT   TOP (10) wait_type,
                  CAST (([wait_time_ms] / 1000.0) AS DECIMAL (16, 2)) AS [WaitS],
                  CAST (100.0 * [wait_time_ms] / SUM([wait_time_ms]) OVER () AS DECIMAL (16, 2)) AS [Percentage]
FROM     sys.dm_db_wait_stats
ORDER BY [Percentage] DESC;

मुझे इस बारे में अधिक जानकारी नहीं मिल रही है कि इसे AZure SQL डेटाबेस में कैसे संबोधित किया जाए।

किसी भी मदद की सराहना की है।

धन्यवाद

जवाब

3 DavidBrowne-Microsoft Aug 18 2020 at 02:56

WRITELOG आपके लेन-देन के लॉग रिकॉर्ड को हार्ड करने के लिए प्रतीक्षा कर रहा है, और HADR_SYNC_COMMIT नेटवर्क पर सेकेंडरी प्रतिकृति के लिए नेटवर्क पर भेजे जाने के लिए आपके लेन-देन के लॉग रिकॉर्ड की प्रतीक्षा कर रहा है और डिस्क पर हार्ड हो गया है। तो वे बहुत, बहुत समान इंतजार कर रहे हैं।

दोनों दर्शाते हैं कि आपका आवेदन बहुत अधिक लेन-देन कर रहा है, शायद बहुत सारे।
और प्रीमियम पर आपकी लॉग फ़ाइल बहुत कम विलंबता के साथ एक स्थानीय फ्लैश ड्राइव पर होती है, इसलिए बहुत सारे WRITELOG की प्रतीक्षा करने से पता चलता है कि आपके आवेदन में कुछ निश्चित होना चाहिए।

यदि आपके पास कोई प्रक्रिया है जो एक तंग लूप में INSERT, UPDATE, या एकल पंक्तियों की DELETE चलाती है, तो उन्हें एक स्पष्ट लेनदेन में लपेटने पर विचार करें, इसलिए आपको केवल लेनदेन लॉग के समाप्त होने का इंतजार करना होगा।

जैसा कि हमेशा Query Store आपका मित्र होता है, और आपको क्वेरी के द्वारा वेट दिखा सकता है, और आप वेट का विश्लेषण सत्र द्वारा sysinos_exec_session_wait_stats में भी कर सकते हैं, यह देखने के लिए कि आपके वर्कलोड के कौन से हिस्से इस प्रतीक्षा को पीड़ित कर रहे हैं।

आप इस बात का बेहतर अंदाजा लगा सकते हैं कि आपके ग्राहक सत्र के समय और सीपीयू समय की प्रतीक्षा समय की तुलना करके कितना इंतजार कर रहे हैं। ईजी

select s.session_id, 
       w.wait_type, 
       w.wait_time_ms, 
       w.signal_wait_time_ms, 
       s.total_elapsed_time, 
       s.cpu_time, 
       w.wait_time_ms/cast(nullif(s.total_elapsed_time,0) as float) wait_percent_of_elapsed
from  sys.dm_exec_sessions s
join sys.dm_exec_session_wait_stats w
  on s.session_id = w.session_id
where w.wait_time_ms > 0
order by wait_percent_of_elapsed desc