Нативная скомпилированная хранимая процедура 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
Другие вопросы по тегам