在一些性能测试中,性能瓶颈有时会出现在数据库端,这是我们往往想了解有哪些客户端连接到DB server.
可以通过SPID查看。
1. 利用如下代码找出SPID column坐在的表,这个表应该是sysprocesses。
select T.name,* from sys.system_columns C 。 join sys.all_objects T on C.object_id=T.object_id where C.name like '%spid%'
补充:如何利用查出column所在的表的名称?
————利用sys.columns 表和sys.tables表 查出column所在的表名,但是有时候0 record is returned,原因有可能是没有一个表包含你所查询的column,另外一个原因,可能是column是个系统表的column,这是你就需要用另外的脚本区查询。
select T.name,* from sys.columns C join sys.tables T on C.object_id=T.object_id where C.name like '%spid%'
————利用sys.system_columns 表和sys.all_objects表 查出column所在的表名
select T.name,* from sys.system_columns C 。 join sys.all_objects T on C.object_id=T.object_id where C.name like '%spid%'
2. 获得哪些访问DB server的机器列表和相关登陆账号信息:
select P.hostname, loginame, D.name,D.status,P.status,blocked,kpid, * from sysprocesses p left join sysDatabases d on p.dbid=d.dbid 利用上述语句,可以查到所有进程,其中hostName是访问db server机器名, loginame是登陆账号,blocked记录了进程死锁的数量。 其中stutus有下面几个值:Background
SPID 正在执行后台任务。
Sleeping
SPID 当前没有执行任务。 通常,这表示 SPID 正在等待应用程序的命令。
Runnable
SPID 当前正在执行任务。
Dormant
与 Sleeping 相同,但 Dormant 还表示在完成 RPC 事件后 SPID 已被重置。 重置将清除 RPC 事件期间所使用的资源。 这是个正常状态,并且 SPID 可用,正在等待执行后续命令。
Rollback
SPID 在事务的回滚过程中。
Defwakeup
表示 SPID 正在等待处于释放过程中的资源。 wait resource 字段应当表示提到的资源。
Spinloop
在试图获得用于 SMP 系统并发控制的旋转锁定 (spinlock) 时进程正处于等待中。
比较详细相关知识: http://blog.china-pub.com/more.asp?name=adminis&id=14012
