【IT168 技术文档】一直习惯于oracle的空间查看使用数据字典,锁检测可以用到oem工具或者其他工具里面看session。
Sybase还不是很习惯。Sybase提供了系统存储过程来看空间的使用,不过很难按照自己的要求定制,所以就去看对应系统存储过程的实现,然后查sybase的系统表参考,相对来说,还好,系统存储过程的实现没有加密,所以比较容易看明白。
对于空间监控,oracle提供了表,可以直接用。对Sybase不熟悉,只能用sp_helpdb或者sp_spaceuesd类似的系统存储过程,考虑了一下,看系统表的参考吧。所以写出如下语句:
use master
go
select b.name,sum(a.size) *2 ,sum(a.unreservedpgs) *2 unreservedpgs from sysusages a,sysdatabases b
where a.dbid=b.dbid
group by b.name
go
测试,ok。
说明:*2表示页的大小是2k,得到的结果也是k,结果集中第一个字段是数据库的名称,第二个是该数据库分配的空间,第三个是该数据库尚未使用的空间。根据实际需要扩展该sql即可,可以得到某个表空间的使用率超过75%之类的告警。
对于死锁的监控,很麻烦,参考sp_sysmon以及sp_who和sp_lock的实现,写了语句如下:
select p.spid,suser_name(p.suid),p.blocked,suser_name(p1.suid),db_name(p.dbid),p.status,p.program_name,getdate(),p.time_blocked
from master..sysprocesses p,master..sysprocesses p1
where p.blocked>0 and p.blocked *=p1.spid
可以根据time_blocked的大小判断是阻塞还是死锁,如果时间很短就结束了,说明是阻塞,如果很长,就应该是死锁了。