۱۳۸۷/۱۰/۳۰

مونيتور كردن ميزان مصرف CPU در اس كيوال سرور


در اين مقاله قصد داريم نحوه مونيتور كردن ميزان مصرف CPU توسط اس كيوال سرور را بررسي كنيم. براي بدست آوردن ميزان CPU مصرفي اس كيوال سرور مي‌توان به اسكريپت زير رجوع كرد:

DECLARE @CPU_BUSY int, @IDLE int
SELECT @CPU_BUSY = @@CPU_BUSY, @IDLE = @@IDLE WAITFOR DELAY '000:00:01'
SELECT (@@CPU_BUSY - @CPU_BUSY)/((@@IDLE - @IDLE + @@CPU_BUSY - @CPU_BUSY) *1.00) *100 AS 'CPU Utilization by sqlsrvr.exe'

ماخذ

در ادامه قصد داريم، هر 5 دقيقه به صورت خودكار بررسي كنيم كه آيا ميزان مصرف CPU در اس كيوال سرور بالاي 50 درصد است؟ و اگر بله، ايميلي را به مسؤول مربوطه جهت بررسي ارسال كنيم.

بنابراين اولين كاري كه بايد صورت گيرد، فعال سازي Database Mail در اس كيوال سرور است كه به صورت پيش فرض غيرفعال است. براي اين منظور تنها كافي است اسكريپت زير را بر روي سرور اجرا كنيد:

USE [master]
GO
sp_configure 'show advanced options',1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure 'Database Mail XPs',1
GO
--RECONFIGURE
GO
-- Create a New Mail Profile for Notifications
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'DBA_Notifications',
@description = 'Profile for sending Automated DBA Notifications'
GO
-- Set the New Profile as the Default
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'DBA_Notifications',
@principal_name = 'public',
@is_default = 1 ;
GO
-- Create an Account for the Notifications
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'SQLMonitor',
@description = 'Account for Automated DBA Notifications',
@email_address = 'nasiri@site.net', -- Change This
@display_name = 'SQL Monitor',
@mailserver_name = 'mail.site.net' -- Change This
GO
-- Add the Account to the Profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'DBA_Notifications',
@account_name = 'SQLMonitor',
@sequence_number = 1

GO

ماخذ

اين اسكريپت براي اس كيوال سرورهاي 2005 به بعد طراحي شده و تنها دو سطر آن‌را پيش از اجرا بايد ويرايش كنيد. سطر مربوط به email_address و mailserver_name . آدرس ايميل درحقيقت آدرس ايميل قسمت from پيغام ارسالي را تشكيل مي‌دهد. نام سرور ميل هم، منظور آدرس smtp server شما در شبكه است.

يا اگر علاقمند بوديد كه اين‌كار را توسط ويزاردهاي management studio انجام دهيد (كه در نهايت هيچ تفاوتي با اسكريپت فوق نخواهد داشت)، مي‌توان به اين مقاله رجوع كرد.

پس از اجراي اسكريپت فوق، براي بررسي صحت عملكرد فوق مي‌توان دستور زير را اجرا كرد:

--test
EXECUTE msdb.dbo.sp_send_dbmail
@recipients = 'nasiri@site.net', -- Change This
@Subject = 'Test Message generated from SQL Server DatabaseMail',
@Body = 'This is a test message from SQL Server DatabaseMail'

ساير پارامترهاي اين دستور را در MSDN مي‌توان ملاحظه نمود.

تا اينجا اس كيوال سرور براي ارسال ايميل آماده شد. در ادامه قصد داريم يك job جديد در اس كيوال سرور ايجاد كنيم تا تمام موارد فوق را لحاظ كند.


مطابق تصوير فوق ابتدا يك job جديد را آغاز خواهيم كرد.



در ادامه اسكريپت زير را جهت اجرا به آن معرفي مي‌كنيم. توسط اين اسكريپت، ميزان جاري مصرف CPU اس كيوال سرور محاسبه شده و اگر اين ميزان بيشتر از 50 بود، يك ايميل به مسؤول مربوطه با ذكر ميزان CPU usage ارسال مي‌گردد.

DECLARE @CPUUsage INT
DECLARE @CPU_BUSY INT,
@IDLE INT

SELECT @CPU_BUSY = @@CPU_BUSY,
@IDLE = @@IDLE

WAITFOR DELAY '000:00:01'
SELECT @CPUUsage = (@@CPU_BUSY - @CPU_BUSY) / ((@@IDLE - @IDLE + @@CPU_BUSY - @CPU_BUSY) * 1.00)
* 100 -- CPU Utilization by sqlsrvr.exe


IF @CPUUsage > 50
BEGIN
DECLARE @msg NVARCHAR(1000)
SET @msg = 'Please check SQL server, CPU usage is ' + CAST(@CPUUsage AS NVARCHAR(50))
+ '%.'

EXECUTE msdb.dbo.sp_send_dbmail
@recipients = 'nasiri@site.net', -- Change This
@copy_recipients = 'nasiri@site.net', -- Change This
@Subject = 'CPU overload',
@Body = @msg
,@importance = 'High'
END



و در آخر زمان اجراي آن را به هر روز، هر 5 دقيقه يكبار تنظيم خواهيم كرد.

اگر نياز به راه حلي پخته‌تر و بررسي متوسط چندين مقدار قبلي ، مقايسه آن‌ها و سپس ارسال ايميل داشتيد، مي‌توان به فصل 14 كتاب Super SQL Server Systems مراجعه كرد.