sql锁查看

 数据库乎好乎坏,从网上找到查看语句

----------------
use master

DECLARE @dbid varchar(20), 
        @dbname sysname, 
        @objname sysname, 
        @objid int, 
        @execstr varchar(8000), 
        @nexecstr nvarchar(4000) 
 
CREATE TABLE #locks (spid int, 
                     dbid int, 
                     objid int, objectname sysname NULL, 
                     indid int, 
                     type char(20), 
                     resource char(200), 
                     mode char(50), 
                     status char(50)) 
 
-- Get basic locking info from sp_lock 
INSERT #locks (spid, dbid, objid, indid, type, resource, mode, status) EXEC sp_lock 
 
-- Loop through the work table and translate each object id into an object name 
DECLARE DBs CURSOR FOR SELECT DISTINCT dbid=CAST(dbid AS varchar) FROM #locks 
OPEN DBs 
FETCH DBs INTO @dbid 
WHILE (@@FETCH_STATUS=0) BEGIN 
        SET @dbname=DB_NAME(@dbid) 
        EXEC master..xp_sprintf @execstr OUTPUT,'UPDATE #locks 
        SET objectname=o.name FROM %s..sysobjects o 
        WHERE (#locks.type=''TAB'' OR #locks.type=''PAG'') 
        AND dbid=%s AND #locks.objid=o.id',@dbname, @dbid
        EXEC(@execstr) 
       
        EXEC master..xp_sprintf @execstr OUTPUT, 'UPDATE #locks 
        SET objectname=i.name FROM %s..sysindexes i 
        WHERE (#locks.type=''IDX'' OR #locks.type=''KEY'') 
        AND dbid=%s AND #locks.objid=i.id 
        AND #locks.indid=i.indid', @dbname, @dbid
        EXEC(@execstr) 
       
        EXEC master..xp_sprintf @execstr OUTPUT, 'UPDATE #locks 
        SET objectname=f.name FROM %s..sysfiles f WHERE #locks.type=''FIL'' 
        AND dbid=%s AND #locks.objid=f.fileid', @dbname, @dbid
        EXEC(@execstr) 
       
        FETCH DBs INTO @dbid 
END 
CLOSE DBs 
DEALLOCATE DBs 
 
-- Return the result set 
SELECT login=LEFT(p.loginame,20), db=LEFT(DB_NAME(l.dbid),30), l.type, object=CASE 
   WHEN l.type='DB' 
   THEN LEFT(DB_NAME(l.dbid),30) 
   ELSE LEFT(objectname,30) END, l.resource, l.mode, l.status, l.objid, l.indid, l.spid
 
   FROM #locks l JOIN sysprocesses p ON (l.spid=p.spid) 
   ORDER BY 1,2,3,4,5,6,7 

 
DROP TABLE #locks 

--查看锁定进程的执行语句
 DBCC INPUTBUFFER(95)

--关闭进程

kill 进程号

---查看系统进程

 select blocked,* from sysprocesses where waittime <>0  order by cpu

 

 

从上面的结果我们可以看到spid、dbid、objid、indid、type、resource、mode和status字段。spid是进程标识号码,用于识别到SQL 服务器的连接。要发现哪些用户和该spid相连,你就要执行存储过程sp_who,并将spid作为一个参数传输给该程序。dbid是锁定发生的数据库,你可以在主数据库中的sysdatabases表格中找到它。字段objid用来显示在数据库中锁定发生所在的对象。要查看这个对象,你可以在主数据库中的sysobjects表格中查询指定的objid

http://www.soft6.com/tech/7/70403.html

列名数据类型描述
spidsmallintSQL Server 进程 ID 号。
dbidsmallint请求锁的数据库标识号。
ObjIdint请求锁的对象的对象标识号。
IndIdsmallint索引标识号。
typenchar(4)锁的类型:

DB:数据库
FIL:文件
IDX:索引
PG:页
KEY:键
TAB:表
EXT:扩展盘区
RID:行标识符

Resourcenchar(16)syslockinfo.restext 中的值对应的锁资源。
Modenvarchar(8)锁请求者的锁模式。该锁模式代表已授予模式、转换模式或等待模式。
Statusint锁的请求状态

GRANT
WAIT
CNVRT


 

http://msdn.microsoft.com/zh-cn/library/ms179881(SQL.90).aspx

列名数据类型说明

spid

smallint

SQL Server 会话 ID。

kpid

smallint

Microsoft Windows 线程 ID。

blocked

smallint

正在阻塞请求的会话的 ID。如果此列为 NULL,则表示请求未被阻塞,或锁定会话的会话信息不可用(或无法进行标识)。

-2 = 阻塞资源由孤立的分布式事务拥有。

-3 = 阻塞资源由延迟的恢复事务拥有。

-4 = 由于内部闩锁状态转换而无法确定阻塞闩锁所有者的会话 ID。

waittype

binary(2)

保留。

waittime

bigint

当前等待时间(毫秒)。

0 = 进程不等待。

lastwaittype

nchar(32)

指示上次或当前等待类型名称的字符串。

waitresource

nchar(32)

锁资源的文本化表示法。

dbid

smallint

当前正由进程使用的数据库 ID。

uid

smallint

执行命令的用户 ID。如果用户数和角色数超过 32,767,则会溢出或返回 NULL。有关详细信息,请参阅查询 SQL Server 系统目录

cpu

int

进程的累计 CPU 时间。无论 SET STATISTICS TIME 选项是 ON 还是 OFF,都为所有进程更新该项。

physical_io

int

进程的累计磁盘读取和写入。

memusage

int

当前为此进程分配的过程缓存中的页数。一个负数,表示进程正在释放由另一个进程分配的内存。

login_time

datetime

客户端进程登录到服务器的时间。对于系统进程,将存储 SQL Server 的启动时间。

last_batch

datetime

客户端进程上次执行远程存储过程调用或 EXECUTE 语句的时间。对于系统进程,将存储 SQL Server 的启动时间。

ecid

smallint

用于唯一标识代表单个进程进行操作的子线程的执行上下文 ID。

open_tran

smallint

进程的打开事务数。

status

nchar(30)

进程 ID 状态。可能的值有:

dormant = SQL Server 正在重置会话。

running = 会话正在运行一个或多个批。多个活动的结果集 (MARS) 启用后,会话可以运行多个批。有关详细信息,请参阅Using Multiple Active Result Sets (MARS)

background = 会话正在运行一个后台任务,例如死锁检测。

rollback = 会话具有正在处理的事务回滚。

pending = 会话正在等待工作线程变为可用。

runnable = 会话中的任务在等待获取时间量程时位于计划程序的可执行队列中。

spinloop = 会话中的任务正在等待调节锁变为可用。

suspended = 会话正在等待事件(如 I/O)完成。

sid

binary(86)

用户的全局唯一标识符 (GUID)。

hostname

nchar(128)

工作站的名称。

program_name

nchar(128)

应用程序的名称。

hostprocess

nchar(10)

工作站进程 ID 号。

cmd

nchar(16)

当前正在执行的命令。

nt_domain

nchar(128)

客户端的 Microsoft Windows 域(如果使用 Windows 身份验证)或可信连接的 Windows 域。

nt_username

nchar(128)

进程的 Windows 用户名(如果使用 Windows 身份验证)或可信连接的 Windows 用户名。

net_address

nchar(12)

为每个用户工作站上的网络适配器分配的唯一标识符。当用户登录时,该标识符插入 net_address 列。

net_library

nchar(12)

用于存储客户端网络库的列。每个客户端进程都在网络连接上进入。网络连接有一个与这些进程关联的网络库,该网络库使得这些进程可以建立连接。有关详细信息,请参阅网络协议和 TDS 端点

loginame

nchar(128)

登录名。

context_info

binary(128)

使用 SET CONTEXT_INFO 语句存储在批中的数据。

sql_handle

binary(20)

表示当前正在执行的批或对象。

注意   此值是从对象的批或内存地址派生的。通过使用基于 SQL Server 2005 哈希的算法无法计算此值。

stmt_start

int

为指定 sql_handle 运行当前 SQL 语句的起始偏移量。

stmt_end

int

为指定 sql_handle 运行当前 SQL 语句的结束偏移量。

-1 指出当前语句为指定的 sql_handle 运行到 fn_get_sql 函数返回结果的结尾。

request_id

int

请求 ID。用于标识在特定会话中运行的请求。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值