Передача транзакции с оператором обновления перед вызовом внешней службы - PullRequest
0 голосов
/ 17 мая 2018

Вчера я задал вопрос: Время ожидания для запроса на выборку из внешней службы после обновления на той же таблице , но я начинаю новый разговор об этой же проблеме, потому что я исследовал ее больше и сейчасэто оказалось немного другой проблемой, чем я думал ранее.

enter image description here

Это изображение из инструмента мониторинга базы данных после того, как я использовал функцию из своегоприложение.Эти три зеленых запроса запускаются из моего Java-приложения и представляют собой:

  1. процедура с запросом выбора
  2. процедура с двумя запросами на обновление в MyTable
  3. запрос выбора в MyTable

затем вызывается внешняя служба, которая выполняет запрос на выборку на MyTable (красная).Этот запрос истекает (потому что он не может читать из MyTable).Я не знаю почему.Я попытался изменить эту вторую процедуру с помощью запросов на обновление, чтобы эти обновления были зафиксированы перед вызовом внешней службы.Я пытался:

  1. помещать только запросы на обновление внутри процедуры

    CREATE PROCEDURE 
    ...
    AS
    BEGIN
        UPDATE
            ....
    
        UPDATE
            ....
    END
    
  2. помещать запросы на обновление в транзакцию и фиксировать ее внутри этой процедуры

  3. , но только когда я заканчиваю процедуру с:

     IF @@TRANCOUNT > 0 COMMIT TRAN
    

без запуска транзакции внутри этой процедуры, я не получаю тайм-аут (красный) выберите запрос.Но это кажется ужасной идеей совершить транзакцию, я не знаю, с чего она началась.

Есть идеи, что я могу с этим поделать или как исследовать эту проблему?По сути, я застрял здесь и не знаю, что делать дальше.

...