本机编译存储过程sp_getapplock alternative

时间:2018-06-14 08:05:51

标签: sql-server stored-procedures memory-optimized-tables

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

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

我想限制SQL Server不要运行多个存储过程的实例。在常规存储过程中,这可以使用sp_getapplock来实现。如何使用本机编译的存储过程实现此目的?

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

1 个答案:

答案 0 :(得分: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