做爲一個數據庫管理員,若是天天的平常監控的結果能夠使用一種方式能提醒到你的話,這樣能夠避免老是遠程鏈接上SQL SERVER每隔一段時間就去運行個操做,而後再看結果。SQL SERVER 2005中自帶的郵件功能能夠實現這個需求哦。sql
今天介紹下若是經過郵件和計劃任務來實現每隔1小時獲得數據庫緩存中平均操做最耗時的50個T-SQL語句。具體的操做分兩步:數據庫
1.設置SQL SERVER的郵件功能緩存
2.制定計劃任務ide
咱們先開始第一步操做:spa
1)登陸數據庫,在【對象資源管理器】裏面按下圖箭頭操做對象
2)右鍵點擊【數據庫郵件】,選擇【配置數據庫郵件】,下一步操做後選擇下圖選項後繼續下一步:blog
3)在出現的界面中執行下圖中的操做ip
4)點擊【添加】按鈕後,再出現的對話中進行以下操做ci
5)下一步後,將SQLSERVEREMAIL前面的複選框選中後,下一步,完成。資源
這時數據庫的郵件就配置好了。下面咱們使用T-SQL語句來實現郵件的發送,此時用到一個存儲過程msdb.dbo.sp_send_dbmail。該存儲過程的具體用法見MSDN。
使用以下語句來查看緩存中平均操做時間前50的操做。
- Exec msdb.dbo.sp_send_dbmail
- @profile_name='SQLSERVEREMAIL1', --使用的數據庫郵件配置文件
- @recipients='huangzhf@fabao.cn', --收件人地址,多個收件人可用分號分隔
- @subject='每小時緩存中執行時間最長的50個語句', --郵件主題
- @query='SELECT TOP 50
- total_worker_time/execution_count/1000 AS [Avg CPU Time(ms)],deqs.execution_count,
- (SELECT SUBSTRING(text,statement_start_offset/2+1,(CASE WHEN statement_end_offset = -1 then LEN(CONVERT(nvarchar(max), text)) * 2 ELSE statement_end_offset end -statement_start_offset)/2+1) FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
- FROM sys.dm_exec_query_stats deqs
- ORDER BY [Avg CPU Time(ms)] DESC', --具體的查詢T-SQL
- @attach_query_result_as_file = 1, --查詢結果以附件形式發送
- @query_no_truncate = 1 --不截斷長字段值
將上面的T-SQL作成計劃任務,並設置成每小時執行一次。
這樣每小時郵箱裏面就能收到須要的信息了。