我有一个简单的表格,我创建并填充:
USE MyDB
GO
CREATE TABLE dbo.mytable (
my_id INTEGER IDENTITY(1,1) NOT NULL,
description VARCHAR(MAX) NOT NULL,
image VARBINARY(MAX) NOT NULL
);
INSERT INTO dbo.mytable (
description, image
)
SELECT
'foo',
CAST('bar' AS VARBINARY(MAX));
查询成功完成。然后我尝试:
SELECT * -- Or SELECT COUNT(*)
FROM MyDB.dbo.mytable;
永远等待......
运行查询here我看到5个独占锁(3 X,2 IX)未被释放约30分钟。一旦释放锁定,SELECT查询几乎立即完成。
为什么这些锁可以保存这么久? 我该怎么做才能缩短INSERT和SELECT之间的时间?
*请注意,上述示例中的INSERT在尝试从我的某个应用程序插入图像后显示相同的行为时用作手动测试。使用的图像大小约为14.2kB。
答案 0 :(得分:1)
看起来你有开放交易(可能是隐含的)。我建议在COMMIT
之后添加INSERT
:
INSERT INTO dbo.mytable (description, image)
SELECT 'foo',
CAST('bar' AS VARBINARY(MAX));
COMMIT;