« לכל הכתבות

ניטור שאילתות ארוכות

במערכת פעילה שאילתות רצות כמעט בכל רגע נתון ומשך ריצתן משפיע על ביצועי המערכת, ככל שמשך הריצה של השאילתות ארוך יותר נפגעים יותר ביצועי המערכת וגם שאילתות הממתינות להתפנות משאבים המוחזקים על ידי שאילתות קודמות להן נאלצות להמתין זמן ממושך יותר וכך תהליכים במערכת נדחים, מתעכבים ומעכבים תהליכים אחרים.
כדי להימנע מפגיעה בביצועי המערכת במהלך הזמן עם הגידול בכמות המידע הנמצאת בבסיסי הנתונים שלה ולזהות במה להתמקד כדי לשפר את ביצועי המערכת יש צורך לנטר את השאילתות הארוכות ולבחון במידת הצורך אפשרויות לשיפור ביצועים. זיהוי השאילתות הארוכות ביותר יכול לסייע לנו לתזמן טוב יותר תהליכים במערכת, לתכנן טוב יותר יצירת מחיצות ותחזוקת אינדקסים בטבלאות גדולות.
הדרך לדעת מהן השאילתות הפעילות ברגע נתון היא באמצעות הרצת הסקריפט הבא:

SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext

אם ברצונך לנתח את השאילתות הארוכות ביותר המתועדות בטבלת הסטטיסטיקות ובכך לראות גם נתונים היסטוריים מומלץ להריץ את הסקריפט הבא:
SELECT DISTINCT TOP 10
t.TEXT QueryName,
s.execution_count AS ExecutionCount,
s.last_execution_time AS LastExecutionTime,
s.max_elapsed_time AS MaxElapsedTime,
ISNULL(s.total_elapsed_time / s.execution_count, 0) AS AvgElapsedTime,
s.creation_time AS LogCreatedOn,
ISNULL(s.execution_count / DATEDIFF(s, s.creation_time,GETDATE()), 0) AS FrequencyPerSec
FROM sys.dm_exec_query_stats s
CROSS APPLY sys.dm_exec_sql_text( s.sql_handle ) t
ORDER BY
s.max_elapsed_time DESC
GO

וכך לקבל נתונים אודות עשרת השאילתות הארוכות ביותר המתועדות בטבלת הסטטיסטיקות.
ניטור השאילתות הארוכות חיוני לזיהוי צווארי בקבוק במערכת, לתכנון תזמוני תהליכים ולתחזוקת המערכת באופן כללי, לכן רצוי להריץ שאילתות אלה כחלק מפעילות תחזוקה שגרתית ולפעול לשיפור ביצועים במידת הצורך.

כותב המאמר: אלון זמיר, DBA מומחה.

Leave a Reply

Your email address will not be published. Required fields are marked *