2016-08-08 6 views
3

Я экспериментирую с SET-OPTION XACT_ABORT ON, так как вижу много спящих сессий с открытой транзакцией, вызывающей проблемы в приложении.Подсчитайте количество откатов в SQL Sever 2008

Есть ли способ измерить, имеет ли эффект щелчок, или нет? Я думаю о чем-то вроде количества откатов в день. Как я могу их собрать?

Я нахожусь на SQL Server 2008 SP4.

ответ

2

Учитывая вашу базу данных в полном выздоровлении Model.You может объединить все резервные копии журнала транзакций, сделанные в день, и это ... Запрос

SELECT 
CASE 
WHEN OPERATION='LOP_ABORT_XACT' THEN 'COMMITS' 
ELSE 'ROLLBACKS' END AS 'OPERATIONS' 
,COUNT(*) AS CNT 
FROM FN_DBLOG(NULL,NULL) WHERE OPERATION IN ('LOP_COMMIT_XACT','LOP_ABORT_XACT') 
GROUP BY OPERATION 

Я сделал несколько тестов, используя некоторые выборочные данные ..

Begin tran test1 
insert into t1 
select 3 
rollback 

Выход:

Operations cnt 
Commits  3 
RollBacks 4 

Дополнение за комментарии:
Чтение журнала транзакций Резервное копирование может быть дорогим, я рекомендую вам сделать это на резервное копирование, принятых и не на активный журнал ..doing это на активном TLOG может иметь ниже эффектов

1.Since это делает Log Scan, Transaction log truncation will be prevented
2.Huge IO нагрузки на сервер в зависимости от вашего журнала резервного копирования Размер, since the output of ::fn_dblog can easily go into millions of rows

Ссылки:

http://rusanu.com/2014/03/10/how-to-read-and-interpret-the-sql-server-log/

https://blogs.msdn.microsoft.com/dfurman/2009/11/05/reading-database-transaction-log-with-fn_dump_dblog/

+1

Это не плохо ideea за с, но считает, что чтение назад журнала, на даже умеренную нагрузку на сервере, будет * довольно * дорого. –

+0

Это правда, я бы добавил больше, чтобы уточнить это – TheGameiswar

+1

Спасибо, что работает отлично. Я просто сделаю небольшую работу, чтобы выполнить ее на восстановленной версии. –

Смежные вопросы