何时在调用存储过程时锁定表以进行插入

时间:2011-10-07 20:24:04

标签: sql performance sql-server-2005 table-locking

我有一个用于报告目的的表,每次用户从Web运行报表时都会插入数据。根据报告的参数,插入可以从单行变化到几千行。用于插入的select语句对于插入可以运行最多60秒。它已经过优化,但由于数据库的复杂性,我无法进一步调整它。我的问题是 - 什么时候表被锁定插入?是在调用存储过程时,执行select语句时,还是在select语句执行完毕时?我想限制表被锁定的时间,以便在运行最多50,000行的大型报表时不会影响其他用户。

离。

INSERT INTO reportTable
SELECT
   Column a,
   Column b
FROM
    Table a
    INNER JOIN
    Table b
       on b.ident = a.Bident

谢谢

1 个答案:

答案 0 :(得分:3)

跑吧:

ALTER DATABASE [<dbname>] SET READ_COMMITTED_SNAPSHOT ON;

并且不再担心插入阻塞阻止报告。请参阅Choosing Row Versioning-based Isolation Levels