简体   繁体   English

SQL Server VARBINARY INSERT锁定表超过30分钟

[英]SQL Server VARBINARY INSERT Locks Table for 30+ Minutes

I have a simple table I create and populate: 我有一个简单的表,我创建和填充:

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));

The query finishes successfully. 查询成功完成。 Then I try: 然后我尝试:

SELECT * -- Or SELECT COUNT(*)
FROM MyDB.dbo.mytable;

And wait forever... 永远等待......

Running the query found here I see 5 exclusive locks (3 X, 2 IX) that aren't released for ~30 minutes. 运行此处的查询我看到5个独占锁(3 X,2 IX)在约30分钟内未释放。 Once the locks are released SELECT queries finish almost instantly. 一旦锁被释放,SELECT查询几乎立即完成。

Why are these locks kept for so long? 为什么这些锁保持这么长时间? What can I do to reduce the time between INSERT and SELECT? 我该怎么做才能缩短INSERT和SELECT之间的时间?

*Note that the INSERT in the above example was used as a manual test after attempting to insert an image from one of my applications exhibited the same behavior. *请注意,上述示例中的INSERT在尝试从我的某个应用程序插入图像后显示相同的行为时用作手动测试。 The image used is ~14.2kB in size. 使用的图像大小约为14.2kB。

It looks like you have open transaction (probably implicit). 看起来你有开放交易(可能是隐含的)。 I suggest to add COMMIT after INSERT : 我建议在INSERT之后添加COMMIT

INSERT INTO dbo.mytable (description, image)
SELECT 'foo',
        CAST('bar' AS VARBINARY(MAX));

COMMIT;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM