sql-server - 本机编译存储过程 sp_getapplock 替代方案
问题描述
tldr; 本机编译的存储过程中 sp_getapplock 的替代方法是什么。
我有一个内存优化表,上面的索引很少。它是关键任务应用程序。我使用的是内存优化表,因为它的日志记录最少。我正在开发订单匹配/交易匹配引擎。一次插入一个订单并与未结订单匹配。这不是批量操作。我尝试过使用常规表,但无法达到我需要的吞吐量。内存优化表解决了吞吐量问题。
我想限制 SQL 服务器不运行多个存储过程的实例。在常规存储过程中,这可以通过 sp_getapplock 来实现。如何使用本机编译的存储过程来实现这一点?
我用谷歌搜索并没有找到答案。
解决方案
一种方法是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
推荐阅读
- c++ - 如何在 qt 中通过 ODBC 驱动程序连接到 oracle 12c?
- amazon-web-services - 如何使用承担角色将 S3 对象从另一个 AWS 账户放入您自己的账户 S3 存储桶?
- spring - 用我自己的自定义反序列化器替换 OAuth2AccessTokenJackson2Deserializer
- python - 如何在 SpaCy 的 Matcher 或 PhraseMatcher 中使用标准正则表达式
- unity3d - 是否可以将 Blender 中的粒子系统动画导入 Unity,并将其转换为 Unity 中的工作粒子?
- python - TensorFlow v2:CancelledError:[Op:StatefulPartitionedCall]
- tsql - "Incorrect syntax near 'WHERE'" in Delete queries
- python - 生成多类型集合的所有可能排列
- mysql - 使用 Group By 的字符串出现的 SQL 总和
- mapbox-gl-js - 如果显示弹出窗口悬停而不是单击,如何保持弹出窗口可见。一旦你离开标记它就会隐藏