۱۳۸۷/۰۸/۱۸

گزارشگيري از تاريخچه‌ي اجراي كوئري‌ها در SQL Server


چند روز قبل مشكلي رخ داده بود به اين شرح!
سروري كهSQL server بر روي آن نصب بود بخاطر SQL server ، بيش از 50 درصد CPU usage مداوم پيدا كرده بود. عموما مصرف CPU اس كيوال سرور روي سرورهاي قوي بالا نيست و تداوم اين حالت به اين شدت يعني بروز مشكل.
اينجا است كه اين سؤال پيش مياد، SQL Server الان داره چكار ميكنه كه تا اين حد به صورت مداوم مصرف CPU آن بالا رفته؟ (حدودا 2 ساعت تمام به صورت مداوم مصرف CPU بالاي 50 درصد بود)
با استفاده از كوئري زير مي‌شود، عبارات SQL ايي را كه هم اكنون در حال اجرا هستند را به صورت زنده مشاهده كرد: (در اس كيوال سرور 2005 به بعد)
USE master;
SELECT st.text, r.session_id, r.status, r.command, r.cpu_time, r.total_elapsed_time
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS st

مشكل از بروز يك loop بود كه به اين صورت دقيقا كوئري مربوطه تشخيص داده شد و برطرف شد.

همچنين با استفاده از كوئري زير مي‌توان آخرين 50 كوئري اجرا شده در SQL server را به همراه زمان اجراي آنها گزارشگيري كرد:
SELECT TOP 50
deqs.last_execution_time AS [Time],
dest.text AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS apply
sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY
deqs.last_execution_time DESC

اگر علاقمند باشيد در مورد اين نوع كوئري‌ها اطلاعات بيشتري كسب كنيد، مطالعه مقاله زير توصيه مي‌شود:
http://www.sqlteam.com/article/dynamic-management-views