tldr;什么是本机编译存储过程中sp_getapplock的替代方法。
我有一个内存优化表,上面有很少的索引。它是关键任务应用程序。我正在使用内存优化表,因为它是最小的日志记录。我正在开发订单匹配/交易匹配引擎。一次插入一个订单并与未结订单匹配。这不是批量操作。我试过常规表,但我无法达到我要求的吞吐量。内存优化表已解决了吞吐量问题。
我想限制SQL Server不要运行多个存储过程的实例。在常规存储过程中,这可以使用sp_getapplock来实现。如何使用本机编译的存储过程实现此目的?
我用Google搜索并没有找到答案。答案 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