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

Откуда: Москва
Сообщений: 4893
Убил сессию, которая долго жевала большую таблицу

KILL 56;

Сессия висит уже час в ROLLBACK 56 rollback AWAITING COMMAND . Как можно понять, сколько она будет этим ещё заниматься? SQL 2014 EE

TEXT session_id status command cpu_time total_elapsed_time session_id request_id start_time status command sql_handle statement_start_offset statement_end_offset plan_handle database_id user_id connection_id blocking_session_id wait_type wait_time last_wait_type wait_resource open_transaction_count open_resultset_count transaction_id context_info percent_complete estimated_completion_time cpu_time total_elapsed_time scheduler_id task_address reads writes logical_reads text_size language date_format date_first quoted_identifier arithabort ansi_null_dflt_on ansi_defaults ansi_warnings ansi_padding ansi_nulls concat_null_yields_null transaction_isolation_level lock_timeout deadlock_priority row_count prev_error nest_level granted_query_memory executing_managed_code group_id query_hash query_plan_hash statement_sql_handle statement_context_id dbid objectid number encrypted text



ROLLBACK 56 rollback AWAITING COMMAND 3745380 8446945 56 0 2016-01-25 14:26:46.387 rollback AWAITING COMMAND 0x02000000CD47B639E9ACB2A35C453814624B9CF1A46138EC0000000000000000000000000000000000000000 -1 -1 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 8 1 EFA5F885-998A-426A-B133-884EDF08BC0F 0 IO_COMPLETION 31 IO_COMPLETION 1 1 18634147991 56,00465 1368235 3745380 8446945 12 0x0000010EF205C8C8 16031590 10065993 1398823607 2147483647 us_english mdy 7 1 1 1 0 1 1 1 1 2 -1 0 0 0 1 0 0 2 NULL NULL NULL NULL NULL NULL NULL 0
25 янв 16, 16:49    [18726995]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
KILL 56 WITH STATUSONLY
25 янв 16, 16:50    [18727006]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Гавриленко Сергей Алексеевич,



спасибо
25 янв 16, 16:57    [18727070]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
komrad
Member

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

http://allen-mcguire.blogspot.nl/2013/02/estimated-time-to-complete.html
25 янв 16, 18:03    [18727356]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
Приветствую!
Правильно я понимаю, что если я перед DML запросом не написал begin tran , то уже rollback сделать не смогу?
Или можно как то узнать id транзакции и отменить ее?
Если нет, то только бекап?
28 апр 16, 11:58    [19116673]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
Glory
Member

Откуда:
Сообщений: 104751
mishanya3624
Правильно я понимаю, что если я перед DML запросом не написал begin tran , то уже rollback сделать не смогу?

Вы не можете сделать отмену уже завершенной транзакции

mishanya3624
Или можно как то узнать id транзакции и отменить ее?

Какой еще id ? Отменить завершенные транзации нельзя.
28 апр 16, 12:01    [19116694]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
mishanya3624
Member

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

Спасибо!
28 апр 16, 12:03    [19116698]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
mishanya3624
Приветствую!
Правильно я понимаю, что если я перед DML запросом не написал begin tran , то уже rollback сделать не смогу?
Или можно как то узнать id транзакции и отменить ее?
Если нет, то только бекап?
Можно сделать kill номер сессии.
Неважно, сделали begin tran, или нет, ни на что не влияет.
rollback может делаться вечно. Можно попробовать перезагрузить сиквел. Если не поможет, или что то сломается при перезагрузке, то да, восстановление из бакапа.
28 апр 16, 12:10    [19116746]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
mishanya3624
Или можно как то узнать id транзакции и отменить ее?
А, или вы не по теме топика, а просто совсем про другую тему? Как откатить завершённую транзакцию, сделанную 18 лет назад?
Такое невозможно, только рестор из бакапа.
28 апр 16, 12:11    [19116757]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
mishanya3624
Member

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

не, не 18 лет назад, а 5 минут:)
28 апр 16, 12:34    [19116893]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
Владислав Колосов
Member

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

восстановить из резервной копии базы + резервной копии текущего журнала транзакций, если модель восстановления полная.
В справке все это есть.
28 апр 16, 12:39    [19116938]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
mishanya3624
alexeyvg,

не, не 18 лет назад, а 5 минут:)
А есть разница?

Т.к. слишком сложно (а часто невозможно) выявлять взаимовлияние последовательностей изменений состояния базы, то восстановление отдельных фрагментов состояния базы запрещено.
28 апр 16, 12:45    [19116993]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
mishanya3624
alexeyvg,

не, не 18 лет назад, а 5 минут:)
В принципе есть проги, которые выводят отдельные транзакции в виде команд/изменений данных. Вот ими можно выковырять изменения, и их вручную откатить или скорректировать.
Но проги небесплатные.

Или восстанавливать базу в отдельном месте на момент времени, и самому выковыривать изменения.
28 апр 16, 12:47    [19117005]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
Владислав Колосов,

не, как и что восстанавливать из бэкапа это все ясно и уже восстановлено:)
Интерес был именно к транзакциям, на что Glory ответил.
Всем спасибо.
28 апр 16, 12:48    [19117011]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
o-o
Guest
mishanya3624
Интерес был именно к транзакциям, на что Glory ответил.

так и alexeyvg тоже ответил.
вы в своем вопросе не уточнили, транзакция *уже закоммичена* или нет.
Glory ответил про закоммиченные.
alexeyvg про *пока еще* не закоммиченные,
и даже необязательно это явные транзакции.
т.е. вы запустили огроменный DELETE без фильтра на таблице в 500 Гиг.
проходит час, вы начинаете подозревать, что делается что-то не то.
никакого BEGIN TRAN явно написано не было.
но транзакция не завершена, ее можно прибить (kill).
начнется роллбэк.
прождете еще 2 часа и DELETE-а типа не было
28 апр 16, 13:01    [19117091]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
o-o,
У меня всего 10 сек выполнялся и была commit соответсвенно.
Но спасибо за детальное разъяснение, с первого раза пролетело от alexeyvg!
А как найти нужную сессию например, как у автора топика 56, чтобы kill, sys.dm_exec_sessions ?
28 апр 16, 13:21    [19117211]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
По сабжу есть у меня такие мысли:

Юзер invm как-то написал такую вещь: 18174608

То есть можно посмотреть, сколько сиквел сожрал места в логе, а сколько он зарезервировал:
select  st.session_id
      , s.status
      , s.last_request_start_time
      , sum( dt.database_transaction_log_bytes_used + dt.database_transaction_log_bytes_used_system ) / 1024 / 1024 as mb_log_consumption
      , sum( dt.database_transaction_log_bytes_reserved + dt.database_transaction_log_bytes_reserved_system ) / 1024 / 1024 as mb_log_reserved
      , min( dt.database_transaction_last_lsn )
  from sys.dm_tran_active_transactions at 
  join sys.dm_tran_database_transactions dt 
    on dt.transaction_id = at.transaction_id 
  join sys.dm_tran_session_transactions st 
    on st.transaction_id = at.transaction_id 
  join sys.dm_exec_sessions s 
    on s.session_id = st.session_id
where dt.database_id = db_id()
group by st.session_id, s.status, s.last_request_start_time
order by min(dt.database_transaction_last_lsn);


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

Понимаю, что есть ньюансы и это все частные случаи, но мне помогло пару раз
28 апр 16, 13:24    [19117234]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
_Фыв_
Guest
А если кильнуть ролбэк разве база не станет неконсистентной?
28 апр 16, 14:39    [19117677]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
o-o
Guest
_Фыв_
А если кильнуть ролбэк разве база не станет неконсистентной?

а кто тут килит роллбэк?
было предложено килить логически неверный или чересчур долгоиграющий DML,
если он еще не закоммитился
28 апр 16, 14:50    [19117769]     Ответить | Цитировать Сообщить модератору
 Re: прогресс rollback-а  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
_Фыв_
А если кильнуть ролбэк разве база не станет неконсистентной?


Кильнут ролбэк невозможно. Но можно его запустить по новой. Если, например, перезапустить базу.

Тут, как говорится, любая суета лишь затягивает процесс.
28 апр 16, 15:11    [19117934]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить