รอ WRITELOG สูงบนฐานข้อมูล Azure SQL
การวิเคราะห์ WaitStats ของฉันของฐานข้อมูล Azure SQL ของเราแสดง WRITELOG และ HADR_SYNC_COMMIT เพื่อตอบโต้การรอสูงสุด นี่คือทรัพยากร Premium 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
ขอความช่วยเหลือใด ๆ
ขอบคุณ
คำตอบ
WRITELOG กำลังรอการคอมมิตเพื่อให้บันทึกการทำธุรกรรมของคุณถูกทำให้แข็งเป็นดิสก์และ HADR_SYNC_COMMIT กำลังรอการคอมมิตเพื่อให้บันทึกการทำธุรกรรมของคุณถูกส่งผ่านเครือข่ายไปยังแบบจำลองสำรองและทำให้แข็งลงในดิสก์ ดังนั้นพวกเขาจึงรอคล้ายกันมาก
ทั้งสองอย่างบ่งชี้ว่าแอปพลิเคชันของคุณทำธุรกรรมจำนวนมากซึ่งอาจมากเกินไป
และในไฟล์บันทึกระดับพรีเมียมของคุณอยู่ในแฟลชไดรฟ์ในเครื่องที่มีเวลาแฝงต่ำมากดังนั้นการรอคอย WRITELOG จำนวนมากแนะนำว่ามีบางอย่างที่ต้องแก้ไขในแอปพลิเคชันของคุณ
หากคุณมีกระบวนการใด ๆ ที่เรียกใช้ INSERT, UPDATE หรือ DELETE ของแถวเดี่ยวในการวนซ้ำที่รัดกุมให้พิจารณาการรวมเข้าด้วยกันในธุรกรรมที่ชัดเจนดังนั้นคุณต้องรอให้บันทึกธุรกรรมถูกล้างในตอนท้ายเท่านั้น
เช่นเคยQuery Storeเป็นเพื่อนของคุณและสามารถแสดงการรอด้วยข้อความค้นหาและคุณสามารถวิเคราะห์การรอตามเซสชันได้เช่นกันในsys.dm_exec_session_wait_statsเพื่อดูว่าส่วนใดของภาระงานของคุณกำลังประสบกับการรอเหล่านี้
คุณสามารถเข้าใจได้ดีขึ้นว่าลูกค้าของคุณกำลังรอมากแค่ไหนโดยการเปรียบเทียบเวลาที่ผ่านไปเซสชันและเวลา CPU กับเวลารอ เช่น
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