monitor temp db usage for MSSQL

  1. create a SP to record the temp file usage, and record the active session with SQL with requested paged from temp db

点击(此处)折叠或打开

  1. USE [DBCenter]
  2. GO

  3. CREATE PROCEDURE [dba].[sys_tmp_monitor_85]
  4. AS
  5. begin
  6. truncate table dbcenter..tmpdbmonitor_SQL
  7. insert into dbcenter..tmpdbmonitor_85
  8. select sum(convert(float,size) * (8192/1024)/1024/1024) TMPFILE_GB, sum(convert(float,maxsize) * (8192/1024)/1024/1024) MAX_TMPFILE_GB,(sum(size)*1.0/sum(maxsize))*100 USED_PER,GETDATE() [DATE_TIME]
  9.  from tempdb.dbo.sysfiles where name like 'tempdev%'

  10. insert into dbcenter..tmpdbmonitor_SQL
  11. select replace(a.hostname,' ','') as hostname ,''''+replace(program_name,' ','')+'''' as program_name
  12. , loginame,db_name(a.dbid) AS DBname, j.*,GETDATE() date_time
  13. from (
  14. SELECT t1.session_id, t1.internal_objects_alloc_page_count*8.0 internal_objects_alloc_KB,
  15. t1.user_objects_alloc_page_count*8.0 user_objects_alloc_KB,
  16. t1.internal_objects_dealloc_page_count*8.0 internal_objects_dealloc_KB,
  17. t1.user_objects_dealloc_page_count*8.0 user_objects_dealloc_KB,
  18. st.text
  19. from tempdb.sys.dm_db_session_space_usage as t1,
  20. tempdb.sys.dm_exec_requests as t4
  21. CROSS APPLY tempdb.sys.dm_exec_sql_text(t4.sql_handle) AS st
  22. where t1.session_id = t4.session_id
  23.   and t1.session_id >50
  24.   and (t1.internal_objects_alloc_page_count>0
  25.     or t1.user_objects_alloc_page_count >0
  26.     or t1.internal_objects_dealloc_page_count>0
  27.     or t1.user_objects_dealloc_page_count>0) ) as j
  28. left join
  29.     tempdb.sys.sysprocesses as a with(nolock) on a.spid=j.session_id
  30.     where isnull(a.loginame,'') <>''

  31. insert into dbcenter..tmpdbmonitor_SQL_his
  32. select replace(a.hostname,' ','') as hostname ,''''+replace(program_name,' ','')+'''' as program_name
  33. , loginame,db_name(a.dbid) AS DBname, j.*,GETDATE() date_time
  34. from (
  35. SELECT t1.session_id, t1.internal_objects_alloc_page_count*8.0 internal_objects_alloc_KB,
  36. t1.user_objects_alloc_page_count*8.0 user_objects_alloc_KB,
  37. t1.internal_objects_dealloc_page_count*8.0 internal_objects_dealloc_KB,
  38. t1.user_objects_dealloc_page_count*8.0 user_objects_dealloc_KB,
  39. st.text
  40. from tempdb.sys.dm_db_session_space_usage as t1,
  41. tempdb.sys.dm_exec_requests as t4
  42. CROSS APPLY tempdb.sys.dm_exec_sql_text(t4.sql_handle) AS st
  43. where t1.session_id = t4.session_id
  44.   and t1.session_id >50
  45.   and (t1.internal_objects_alloc_page_count>0
  46.     or t1.user_objects_alloc_page_count >0
  47.     or t1.internal_objects_dealloc_page_count>0
  48.     or t1.user_objects_dealloc_page_count>0) ) as j
  49. left join
  50.     tempdb.sys.sysprocesses as a with(nolock) on a.spid=j.session_id
  51.     where isnull(a.loginame,'') <>''

  52. end
2. create a job which will get the tmpdb usage info
   if usage percent >=85 sent out mail 

点击(此处)折叠或打开

  1. declare
  2. @used_per int,
  3. @sql varchar(8000),
  4. @sbj varchar(1000)

  5. begin
  6. select @used_per=(sum(size)*1.0/sum(maxsize))*100 from tempdb.dbo.sysfiles where name like 'tempdev%'
  7. print @used_per
  8. if @used_per>=85
  9. begin
  10.     exec [DBCenter].[dba].[sys_tmp_monitor_85]
  11.     set @sql='SELECT [hostname]
  12.          ,[program_name]
  13.          ,[loginame]
  14.          ,[DBname]
  15.          ,[session_id]
  16.          ,[text]
  17.          ,[date_time]
  18.      FROM [DBCenter].[dbo].[tmpdbmonitor_SQL]'
  19.           select @sbj=@@SERVERNAME
  20.         set @sbj=@sbj+'tmpdb usage over 85 %'
  21.      --print @sql
  22.     EXEC msdb.dbo.sp_send_dbmail
  23.         @profile_name = 'monitor',
  24.         @recipients = '1234567@qq.com',
  25.         @query = @sql ,
  26.         @subject = @sbj,
  27.         @attach_query_result_as_file = 1 ;
  28. end
  29. end


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16131092/viewspace-2138347/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16131092/viewspace-2138347/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值