none
SQLServer 2000 中刪除數據引起blocking RRS feed

  • 问题

  • 環境SQLServer 2000 SP4

    有一個Job每個星期刪除一次表裏面的數據,同時有些時候會有一些程式在向數據庫中插入數據或者update之類的操作,但是操作的數據絕對是不一樣的.

    但是爲什麽我的刪除進程會一直擋住其他的session,同時我的刪除進程也執行的很緩慢,查看進程信息,我的進程是blocking.

    平時刪除該表只需要2分鐘,但是最近都是2個多小時都執行不完.

    請大家幫忙分析下,謝謝.


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年8月6日 0:03

答案

  • 表结构和数据操作范围, 影响锁定的资源范围.

    建议你使用下面的语句, 查询一下被锁住的资源(:

     sp_lock 被block的spid

    在上述结果中, Status = 'wait' 的表示正在等待请求的资源锁定, 再通过 sp_lock 去查询产生 block 在对应资源上下的锁, 你可以知道大致的原因.

    一般通过索引和减少每次操作影响的数据范围可以解决 block 的问题.

    2010年8月6日 4:46

全部回复

  • 这和你的表结构和具体语句有关系.

     

    1 数据库进行删除/更新操作时会对数据进行扫描,以查找到相应的行,如果表没有索引这回到这一个全表的扫描,这时仅是删除操作,就会被阻塞

    2 删除/更新的范围过大,导致真个页或者表级别的锁,也会阻塞


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年8月6日 0:57
    版主
  • 對了,問一下,假如A表和B表的主鍵列都一樣,而且是複合主鍵.

    那麼如果要比較主鍵相同的寫法 就只有a.col1=b.col1 and a.col2=b.col2   ..........

    這樣寫 能走到索引嗎?


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年8月6日 2:14
  • Will use index if you compare first column of the key first.
    2010年8月6日 2:18
  • 表结构和数据操作范围, 影响锁定的资源范围.

    建议你使用下面的语句, 查询一下被锁住的资源(:

     sp_lock 被block的spid

    在上述结果中, Status = 'wait' 的表示正在等待请求的资源锁定, 再通过 sp_lock 去查询产生 block 在对应资源上下的锁, 你可以知道大致的原因.

    一般通过索引和减少每次操作影响的数据范围可以解决 block 的问题.

    2010年8月6日 4:46