0

tldr; 本机编译的存储过程中 sp_getapplock 的替代方法是什么。

我有一个内存优化表,上面的索引很少。它是关键任务应用程序。我使用的是内存优化表,因为它的日志记录最少。我正在开发订单匹配/交易匹配引擎。一次插入一个订单并与未结订单匹配。这不是批量操作。我尝试过使用常规表,但无法达到我需要的吞吐量。内存优化表解决了吞吐量问题。

我想限制 SQL 服务器不运行多个存储过程的实例。在常规存储过程中,这可以通过 sp_getapplock 来实现。如何使用本机编译的存储过程来实现这一点?

我用谷歌搜索并没有找到答案。

4

1 回答 1

1

一种方法是sp_getapplock在包装了对本机 proc 的调用的外部存储过程中执行:

CREATE PROC dbo.usp_NativeProcWrapper
AS
BEGIN TRY
    BEGIN TRAN;
    EXEC sp_getapplock 'dbo.usp_NativeProc', 'Exclusive', 'Transaction';
    EXEC dbo.usp_NativeProc;
    EXEC sp_releaseapplock 'dbo.usp_NativeProc', 'Transaction';
    COMMIT;
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK;
    THROW;
END CATCH;
GO
于 2018-06-14T11:12:06.970 回答