Знайдіть усі запити, виконані нещодавно в базі даних


21

[Я програміст T-SQL для початківців]
[..і сподіваюся, я на правильному сайті обміну стеками]

Я хотів би отримати список усіх виконаних запитів (принаймні, тих, які я виконував сьогодні з ранку). Мені потрібно скласти звіт про час виконання запитів.

Онлайн-пошук не дав мені багато корисної інформації. Єдиний запит, який я знайшов в Інтернеті, який здався досить близьким, - це

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

Цей запит повернув кілька дивних результатів (більшість з яких були купою відростків). Більше того, всі ці результати показують запити, що виконуються з сьогоднішнього дня (мені потрібні запити з ранку).

У попередніх питаннях я нічого не міг знайти (якщо подібне питання вже було задано, будь ласка, вкажіть мене на це).

Я побачив кілька пропозицій щодо SQL Profiler, але, мабуть, профілер допоможе мені лише в тому випадку, якщо я вже розпочав слід (виправте мене, якщо я помиляюся).

Чи може хтось запропонувати мені, як я повинен пройти, щоб отримати список усіх запитів, які виконуються в базі даних з ранку (включаючи часи виконання запитів) ..

[Було б корисно (не вимога), якщо я також можу якось отримати ім'я користувача користувача, який виконав запит]

Відповіді:


12

Цей запит повернув кілька дивних результатів (більшість з яких були купою відростків). Більше того, всі ці результати показують запити, що виконуються з сьогоднішнього дня (мені потрібні запити з ранку).

Це тому, що ви шукаєте кеш процедур, і плани, які були використані на ранок, вже не можуть там жити (через тиск пам’яті, перезапуск сервера / екземпляра, очищення кеш-файлу вручну тощо).

Реальний спосіб отримати запити, виконані проти екземпляра (або конкретніше бази даних), - це створити SQL Trace або розширений сеанс подій. Правильно створене, будь-яке з них дасть вам інформацію, яку ви шукаєте.

Якщо ви шукаєте статистику виконання цього ранку і лише сьогодні вранці (тобто налаштування вищезазначених моніторингових реалізацій як проактивних завдань, що виконуються в наступний раз, недостатньо), то, якщо це вже було створено, не буде шлях спочатку , щоб отримати цю інформацію.

Для подальшої довідки почніть із сліду SQL, який фіксує подію SQL: StmtCompleted . У XE це була б sql_statement_completedподія.

На мою думку, замість того, щоб продовжувати пошук залишків статистики виконання запитів, я б почав витрачати час на з'ясування способів відновити навантаження, яку ви намагаєтеся виміряти. Але цього разу до цього налаштуйте належний відстеження / моніторинг.


Чи можна фільтрувати за стовпцями SQL: StmtCompleted Data?
Кікенет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.