Каков наилучший способ отслеживания длительных запросов в SQL Server?


10

Мне нужно выполнить довольно много длительных запросов (перестройка индексов, обновление больших наборов данных) для моей базы данных. Есть ли альтернатива выполнению запроса в SQL Server Management Studio и проверке его каждый час или около того? Я хотел бы получить по электронной почте или отправить сообщение, когда это будет сделано, но не знаю лучший инструмент для этого.

Ответы:


4

Следующий пост Гая: Вы можете создать сценарий .SQL, который делает то, что вам нужно, с использованием db перед сценарием -> создать задание агента SQL типа операционной системы, которое вызывает сценарий:

sqlcmd -E -S SERVERNAME -i "c: \ YOURSCRIPT.sql" -o "C: \ YOURSCRIPT_LOG.log"

Добавьте новый шаг и используйте процедуру msdb.dbo.sp_send_dbmail для отправки электронной почты. Эта функция может быть настроена для отображения внутри почты определенного запроса из таблиц SQL для подтверждения выполнения скрипта ... например, dbcc showcontig ваших индексов перестроения.


1

У вас есть возможность использовать задания SQL? Вы можете делать уведомления и тому подобное через там. Что касается получения прерывистых уведомлений, для этого потребуется некоторый код в хранимых процедурах и т. Д.


1

Да, просто используйте xp_sendmail . Вы можете отправить предустановленное сообщение или результаты оператора SQL так же легко. Эта функция была доступна начиная с SQL Server 6.5, однако в Denali она должна быть устаревшей - если это будет неотъемлемой частью вашей работы, вам следует использовать Database Mail, который гораздо более «корпоративный».


1

Я всегда пишу сообщения в таблицу «EventLog». При обработке больших объемов данных я управляю данными в чанках и записываю обновления состояния в EventLog после каждого чанка.

Когда я хочу проверить ход длительного процесса, я просто запрашиваю таблицу EventLog.

Пример вывода:

-------------------
- Мое Большое Обновление -
-------------------
Начало работы: 2011-05-03 10:00:00

Записи для обработки: 1 000 000
Куски: 200

--- кусок 1 ---
Попытка обновить MyTable
Записи обновлены: 5000
Оставшихся записей: 995 000
Пропускная способность: 4210 записей в секунду

--- кусок 2--
Попытка обновить MyTable
Записи обновлены: 5000
Оставшихся записей: 990 000
Пропускная способность: 3555 записей в секунду

--- кусок 3--
и т.п.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.