Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Незафиксированные транзакции  [new]
YoHnA
Member

Откуда:
Сообщений: 43
День добрый!

В сервере я еще пока немного полешко.
Пытаюсь поставить эксперименты по скорости выполнения запросов на сервере (диплом), пока достаточно тривиальных.
Создала элементарную табличку (ID, фио, возраст), заполнила ее рандомно 100 000 строк.
Создала табличку для записи результатов (ID, уровень изоляции, номер транзакции, милисекунды, количество записей в читаемой таблице)
Запускаю параллельно 2 хранимые процедуры со следующим кодом:
ALTER procedure [dbo].[Osnova]
@Zapusk nvarchar(255),
@Numb int
as
begin transaction NoName 
    declare @T2 time
    declare @T1 time
    declare @Rez int, @Ss int
    waitfor time @Zapusk
    set @T1 = CONVERT (datetime2, CURRENT_TIMESTAMP)
    Select * from Age 
    set @Ss=(select count(ID) from Age)
    Select * from Age where ID in (222, 2544, 845, 3645, 148255, 555555)
    Select * from Age where FIO like '%fsj%'
    Select * from Age where age>10 and age<20
    set @T2 = CONVERT (datetime2, CURRENT_TIMESTAMP)
    set @Rez = DATEDIFF(MILLISECOND,@T1,@T2)
    insert into RegTime1 values ('Read Commited', @Numb, @Rez, @Ss)
commit

Процедуры выполняются в указанное время, результаты селектов выпадают, зеленая галочка "Запрос успешно выполнен" стоит, сообщений об ошибках нет.
Пытаюсь прочитать табличку с результатами - бесконечно выполняет запрос. Как будто она заблокирована.
Закрываю студию - пишет, что есть незафиксированные транзакции и предлагает их зафиксировать. Фиксирую, перезапускаюсь - в таблицу записи вставлены, все читается.
Так происходит не всегда, где-то 1 раз из 10, в остальные 9 все нормально проходит, записывается, фиксируется.

Отладка, естественно, не помогает, поскольку проблема появляется только при параллельном выполнении нескольких процедур.

Это дедлок на вставку данных? или что это может быть?

Подскажите, пожалуйста, чего конкретно я не понимаю и не вижу.

На соседнем форуме меня послали в SQL Profiler смотреть трассировку ("настройте его на события SQL:BatchStarting, SQL:BatchCompleted, SQL:StmtStarting, SQL:StmtCompleted, SP:StmtStarting, SP:StmtCompleted, настройте фильтр по номеру сессии и смотрите что ваш скрипт выполняет.")
Смотрю, но, видимо, совсем не включаюсь, куда смотреть на самом деле и где искать косяк.

Помогите, пожалуйста.
29 май 17, 10:53    [20519282]     Ответить | Цитировать Сообщить модератору
 Re: Незафиксированные транзакции  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Не понятно, зачем тут транзакция. Тут всего одна команда на запись. Транзакция нужна если команд несколько.

Давать имя транзакции в данном случае не нужно.
29 май 17, 10:58    [20519304]     Ответить | Цитировать Сообщить модератору
 Re: Незафиксированные транзакции  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
YoHnA,

возможно у вас ошибка, из-за чего commit не выполняется.
Оберните код в обработчик ошибок try .. end try, в нём выполняйте откат транзакции и throw в простейшем варианте.
29 май 17, 11:13    [20519375]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить