Нативная скомпилированная хранимая процедура sp_getapplock альтернатива
tldr; что является альтернативой sp_getapplock в собственной скомпилированной хранимой процедуре.
У меня есть оптимизированная для памяти таблица и несколько индексов на ней. это критически важное приложение. Я использую оптимизированную память таблицы, так как это делает минимальное ведение журнала. Я разрабатываю механизм сопоставления ордеров / торговли. один заказ вставляется за раз и сопоставляется с открытыми заказами. это не массовая операция. Я пытался с обычной таблицей, но я не смог достичь требуемой пропускной способности. оптимизированная для памяти таблица решила проблему пропускной способности.
Я хочу ограничить SQL-сервер, чтобы не запускать более одного экземпляра хранимой процедуры. в обычной хранимой процедуре это может быть достигнуто с помощью sp_getapplock. Как я могу добиться этого с помощью скомпилированной хранимой процедуры?
Я погуглил и не нашел ответа.
1 ответ
Одним из методов является выполнение sp_getapplock
во внешней хранимой процедуре, которая оборачивает вызов к собственному процессу:
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