您的位置:首页 > 其它

存储过程优化注意事项

2015-01-29 21:08 155 查看
一个表被锁,不能使用了,两种可能:查询时,自动对其进行"表锁"了; 查询时,语句过于复杂,花费的时间过长。

查询方式:


1. 使用SQL Server Profiler查看消耗时间;

SQL Server使用工具查看资源消耗: 打开SQL Server--【工具】-【SQL Server Profiler】

2. 查询在调用"存过"时,通过ID找到被锁的表。

查询死锁表的语句:

select

spid 进程,

status 状态,

登录帐号=SUBSTRING(SUSER_SNAME(sid),1,30),

用户机器名称=SUBSTRING(hostname,1,12),

是否被锁住=convert(char(3),blocked),

数据库名称=SUBSTRING(db_name(dbid),1,20),

cmd 命令,

waittype as 等待类型,

last_batch 最后批处理时间,

open_tran未提交事务的数量

from master.sys.sysprocessesorder by spid desc

解决办法:

1. 对此表查询时,进行行锁(RowLock);

2.优化查询语句,减少非ID,非索引的列的使用。

存储过程调用时使用的锁:

with(HOLDLOCK) //共享锁,直到事物结束才释放

with(TABLOCKX) //表锁,查询此表时,锁表

with(ROWLOCK) //行锁,查询此行信息时,锁行

select * from table With(ROWLOCK)where Id=@id
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: