什么事
前几天有点无聊,想写点新东西。
公司的系统复杂,SQL Server经常会CPU占用100%,SQL Monitor就是用来帮助分析什么SQL的执行导致这个问题的。
怎么办
原理非常简单,首先是获取所有SQL进程,方法有多种:
1.sys.sysprocesses:在SQL Server 2000就声明要被移除了,不建议使用。实际上sys.sysprocesses是用以下的dmv来映射的。
2. sp_who
3. sp_who2:跟sp_who类似,获取的字段比sys.sysprocesses和以下的dmv要少。
4. sys.dm_exec_sessions等相关dmv:
select * from sys.dm_exec_connections
select * from sys.dm_exec_requests
select * from sys.dm_exec_sessions
关于sys.dm_exec_sessions等dmv,可以参看这里:http://msdn.microsoft.com/en-us/library/ms187997.aspx
然后dbcc INPUTBUFFER(spid)来获取指定进程执行的SQL,最后用kill spid来中止SQL进程。
实际调试起来,会用到其它复杂的SQL,譬如是什么锁,锁定哪个数据库中的哪个表,等等,下一篇文章才写吧。
能干嘛
1. 监控SQL Server的进程和Job,查看当前执行的SQL/命令,并终止之。
2. 对象浏览器,跟 SQL Server Management Studio 类似
3. 查询数据
4. 数据库收缩、备份、分离等
5. 性能分析
6. 对象/脚本查找
什么要求
这个项目是用C# 3.5写的,为了省事,用了Linq,所以要求.net框架为3.5 Client Profile,如果你把Linq换成for/next,可以在2.0环境使用。
在哪里
项目地址:http://sqlmon.codeplex.com/
最新版本下载:SQLMon 3.0 alpha 8 src SQLMon 3.0 alpha 8 binary