Каков наилучший способ отслеживания длительных запросов в 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 ваших индексов перестроения.

yrushka
источник
1

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

Jcolebrand
источник
1

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

Gaius
источник
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, чтобы отслеживать, когда было написано сообщение, какой процесс написал сообщение и т. Д. Извините, что не включил эту информацию в мой пример.

datagod
источник