Hello World!

今天学习的一点数据库知识

1.删除索引需指明表名:如drop index [t_article].ix_t_article
2.创建了索引不一定效率就搞,要保证索引可以使用到。;组合索引的前导列要使用到。
3.SET NOCOUNT ON ,不要反悔查询的行计数
4.要知道是否发生了阻塞,当然要看master库的sysprocess表,看看是否有什么进程堵住了别的进程,语句如下:
Select * from master..sysprocesses where blocked > 0
为了进一步找出发生阻塞的语句,我用到的如下的语句
dbcc inputbuffer(51);--51就是blocked的值;
下面我们再来进一步定位阻塞的位置:
Sp_lock
结果如下(大部分数据略)
Spid dbid objid indid type resource mode status
-------------------------------------------------------------------------------------------------
51 14 206623779 0 TAB X WAIT
52 14 0 0 DB S GRANT
53 14 0 0 DB S GRANT
现在我们来看看spid = 51 这行, mode = X 表示排它锁, status = WAIT表示正在等待(即被阻塞了),dbid = 14 是数据库的id,objid = 206623779 是被锁的对象id,我们可以通过下列函数得到数据库和表:
Select db_name(@dbid) -----》book_db
select object_name(@objid) -------》 t_book
即book_db库的t_book表被锁住了,这时候再回投仔细检查 p_Book_content 存储过程,发现只有一个语句对t_book进行了操作:
update t_book set hitcount = hitcount + 1 where bookid = @bookid

 

posted @ 2012-05-07 16:50  世界万物  阅读(133)  评论(0编辑  收藏  举报
Bye World!