ms sql история запросов к базе

View the Job History

В Управляемом экземпляре Azure SQL в настоящее время поддерживается большинство функций агента SQL Server (но не все). Подробные сведения см. в статье Различия в T-SQL между Управляемым экземпляром SQL Azure и SQL Server.

В этой статье описано, как просматривать журнал заданий агента Microsoft SQL Server в SQL Server с помощью среды SQL Server Management Studio, Transact-SQL или управляющих объектов SQL Server.

Перед началом работы

Для просмотра журнала заданий используется:

Перед началом

безопасность

Использование среды SQL Server Management Studio

Просмотр журнала заданий

В обозревателе объектов подключитесь к экземпляру компонента Компонент SQL Server Database Engineи разверните его.

Раскройте узел Агент SQL Server, а затем узел Задания.

Щелкните задание правой кнопкой мыши и выберите Просмотр журнала.

В обозревателе файла журнала просмотрите журнал заданий.

Для обновления журнала заданий нажмите кнопку Обновить. Для ограничения числа строк нажмите кнопку Фильтр и введите параметры фильтрации.

Использование Transact-SQL

Просмотр журнала заданий

В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine.

На стандартной панели выберите пункт Создать запрос.

Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.

Использование управляющих объектов SQL Server

Просмотр журнала заданий

Вызовите метод EnumHistory класса Job на любом языке программирования, таком как Visual Basic, Visual C# или PowerShell. Дополнительные сведения см. в статье Управляющие объекты SQL Server (SMO).

Источник

Как просмотреть выполненные запросы в среде SQL Server Management Studio?

Я новичок в SQL Server Management Studio и задаюсь вопросом: есть ли способ увидеть, какие запросы были запущены против базы данных?

в мониторе активности есть отчет «последние дорогие запросы», но я предполагаю, что это не все запросы, так как я не вижу те, которые я запустил.

Я запускаю SQL Server Express 2008 v 10.0.1600.22.

8 ответов

использовать SQL Profiler и используйте фильтр на нем, чтобы получить самые дорогие запросы.

используйте Монитор активности. Это последняя панель инструментов в верхней панели. Он покажет вам список «последних дорогостоящих запросов». Вы можете дважды щелкнуть их, чтобы увидеть план выполнения и т. д.

Если вы хотите видеть запросы, которые уже выполнены, нет поддерживаемого способа по умолчанию для этого. Есть некоторые обходные пути, которые вы можете попробовать, но не ожидайте найти все.

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

вы можете сделать это с помощью DBCC LOG или fn_dblog команды или стороннего чтения журнала, как ApexSQL Log (обратите внимание, что инструмент с ценой)

теперь, если вы планируете аудит операторов, которые будут выполняться в будущем, вы можете использовать SQL Profiler, чтобы поймать все.

вам нужен профилировщик SQL, который фактически работает за пределами SQL Management Studio. Если у вас есть платная версия SQL Server (например, developer edition), она должна быть включена в нее как другая утилита.

Источник

Можно ли просмотреть исторические запросы в базе данных SQL Server?

Кто-то запускал запрос в нашей базе данных SQL Server удаленно и их система разбилась.

У них нет резервной копии этого запроса и вы хотите посмотреть, что было запущено на сервере.

Можно ли найти этот запрос в журнале или в какой-либо истории где-нибудь?

6 ответов

ИЗМЕНИТЬ

Чтобы сделать это более подробным ответом, ссылка, связанная выше, Grant предоставляет запрос просто перейти к кешу экземпляра, чтобы вытащить запрос, который вы только что выполнили (или по крайней мере пытаетесь):

Еще несколько вариантов, которые были отмечены в комментариях блога Grant:

Если текущим файлом является, например, E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc, предыдущие файлы должны быть log_199.trc, log_198.trc и т. д. Получите содержимое трассы с помощью:

Вы можете получать информацию из кэшированных планов запросов, проверять BOL для информации о sys.dm_exec_query_stats или запускать это из студии управления, подключенной к той же базе данных:

Отфильтруйте выход с помощью

, чтобы сузить результаты.

Если база данных находилась в режиме полного восстановления, тогда может возникнуть возможность восстановить некоторые данные и получить представление о том, что было сделано путем чтения журнала транзакций.

К сожалению, это не поддерживается по умолчанию, но есть способы сделать это.

Вы можете попробовать использовать сторонние инструменты, такие как журнал ApexSQL или спасение журналов SQL (бесплатно, но только SQL 2000).

ApexSQL имеет функциональность «Выполненные запросы», которая позволяет вам искать и фильтровать по дате.

Я не уверен, что он извлекает историю из кеша SSMS или фактически отслеживает ее сам по себе. Вы можете попытаться установить его и надеяться на лучшее.

Источник

Как просмотреть историю запросов в SQL Server Management Studio

Сохранена ли история запросов в некоторых файлах журнала? Если да, можете ли вы сказать мне, как найти их местоположение? Если нет, можете ли вы дать мне совет о том, как его увидеть?

[Поскольку этот вопрос, скорее всего, будет закрыт как дубликат.]

Если SQL Server не был перезапущен (и план не был выведен и т.д.), вы можете найти запрос в кеше плана.

Если вы потеряли файл из-за сбоя Management Studio, вы можете найти здесь файлы восстановления:

В противном случае вам нужно будет использовать что-то еще, чтобы помочь вам сохранить историю запросов, например SSMS Tools Pack, как указано в Ed Harper answer – хотя это не ‘t бесплатно в SQL Server 2012+. Или вы можете настроить небольшую трассировку, отфильтрованную по имени входа или имени хоста (но для этого используйте для этого трассировку на стороне сервера, а не Profiler).

Как отметил @Ненад-Живкович, может быть полезно присоединиться к sys.dm_exec_query_stats и упорядочить на last_execution_time :

В конце, но, надеюсь, полезно, поскольку он добавляет больше деталей…

По умолчанию невозможно просмотреть запросы, выполненные в SSMS. Есть несколько вариантов, хотя.

Чтение журнала транзакций – это не простая вещь, потому что она в проприетарном формате. Однако, если вам нужно просмотреть запросы, которые выполнялись исторически (кроме SELECT), это единственный способ.

Для этого вы можете использовать сторонние инструменты, такие как ApexSQL Log и SQL Log Rescue (бесплатно, но только для SQL 2000). Проверьте эту тему для получения более подробной информации здесь SQL Server Transaction Log Explorer/Analyzer

Профилировщик SQL Server – лучше всего подходит, если вы просто хотите начать аудит и вас не интересует, что произошло раньше. Убедитесь, что вы используете фильтры, чтобы выбрать только те транзакции, которые вам нужны. В противном случае вы получите очень много данных очень быстро.

Трассировка SQL Server – лучше всего подходит, если вы хотите захватить все или большинство команд и сохранить их в файле трассировки, который может быть проанализирован позже.

Триггеры – лучше всего подходят, если вы хотите захватить DML (кроме select) и сохранить их где-нибудь в базе данных

Пакет инструментов SSMS, помимо прочего, добавляет функциональность для записи истории выполнения.

Как уже отмечали другие, вы можете использовать SQL Profiler, но вы также можете использовать его функциональность через системные хранимые процедуры sp_trace_ *. Например, этот фрагмент SQL будет (по крайней мере, в 2000 году; я думаю, что то же самое для SQL 2008, но вам придется перепроверить) перехватывает события RPC:Completed и SQL:BatchCompleted для всех запросов, выполнение которых занимает более 10 секунд и сохраните вывод в файл трассировки, который вы можете открыть в профилировщике SQL позже:

Вы можете найти идентификатор для каждого события трассировки, столбцов и т.д. В Books Online; просто искать sp_trace_create, sp_trace_setevent и sp_trace_setfiler sprocs. Затем вы можете управлять трассировкой следующим образом:

… где ’15’ – это идентификатор трассировки (как сообщается в sp_trace_create, который первый скрипт выкинул выше).

Вы можете проверить, с какими трассировками работают:

Единственное, что я скажу с осторожностью – я не знаю, какую нагрузку это окажет на вашу систему; это добавит некоторые, но насколько велико это “некоторые”, вероятно, зависит от того, насколько занят ваш сервер.

Система не записывает запросы таким образом. Если вы знаете, что хотите сделать это раньше времени, вы можете использовать SQL Profiler для записи того, что входит и отслеживать запросы во время работы Профайлера.

Вы можете отслеживать SQL-запросы SQL Profiler, если вам это нужно

Я использую приведенный ниже запрос для отслеживания активности приложения на SQL-сервере, у которого нет профилировщика трассировки.
Метод использует Query Store (SQL Server 2016+) вместо DMV. Это дает лучшую возможность просматривать исторические данные, а также более быстрый поиск.
Очень эффективно записывать короткие запросы, которые невозможно захватить sp_who/sp_whoisactive.

вы можете использовать “Автоматически генерировать script при каждом сохранении”, если вы используете студию управления.
Это, конечно, не журнал.
Проверьте, полезны ли вам..;)

Если интересующие вас запросы – это динамические запросы, которые прерываются с перерывами, вы можете записывать SQL и datetime и пользователя в таблицу во время создания динамического оператора. Это будет сделано в каждом конкретном случае, хотя для этого требуется определенное программирование, и для этого требуется дополнительное время обработки, поэтому сделайте это только для тех немногих запросов, которые вас больше всего волнуют. Но наличие журнала выполняемых конкретных операторов может действительно помочь, когда вы пытаетесь выяснить, почему он терпит неудачу один раз в месяц. Динамические запросы трудно проверить, и иногда вы получаете одно конкретное входное значение, которое просто не будет работать, и выполнение этого ведения журнала во время создания SQL часто является лучшим способом увидеть, что конкретно было в sql, который был построен.

Самым большим ограничением является то, что этот сценарий не будет работать, если вы нажмете “Выполнить” вместо использования сочетания клавиш, и этот сценарий не сохранит весь файл – только выделенный текст. Но вы всегда можете изменить скрипт для выполнения запроса, а затем выбрать все ( CTRL + A ) перед копированием/сохранением.

Использование современного редактора с функциями поиска в файлах позволит вам осуществлять поиск в истории SQL. Вы можете даже прихотить и скопировать свои файлы в базу данных SQLite3 для запроса ваших запросов.

Это должно показать вам время и дату, когда был выполнен запрос

Источник

Получение информации о текущих исполняемых запросах MS SQL Server

В ходе расследования проблем возникает необходимость получить информацию о текущих исполняемых запросах в СУБД. Примером когда необходима подобная информация может служить разбор превышения времени ожидания на блокировке СУБД. В этой статье я создам подобную ситуацию и покажу какую информацию можно получить.

Подготовка

Суть примера заключается в том чтобы получить ожидание на блокировке СУБД. Для этого нам потребуется тестовая база данных, а также информация об имени таблицы в базе для составления SQL-запроса. С помощью обработки выполним запись в регистр и встанем на ожидании, не завершив транзакцию. В Management Studio выполним запрос чтения данных из регистра. Поскольку в предлагаемом примере уровень изоляции Read Committed, запрос на чтение будет ожидать освобождения ресурса, который заблокирован транзакцией записи.

Создание базы данных

Создадим базу данных, в которой установим режим управления блокировкой «Управляемый», основной режим запуска «Обычное приложение», режим использования модальных окон в «Использовать», режим совместимости «8.2.13». Добавим в базу регистр сведений «ТекущиеИсполняемыеЗапросы» (непериодический, независимый). В регистре добавим измерение: «Измерение1» (тип Число) и ресурс: «Ресурс1» (тип Число). Также создадим обработку «ЗаписьВРегистрВТранзакции» со следующим кодом:

SQL-запрос

Для составления SQL-запроса нам потребуется имя таблицы базы данных, соответствующее регистру сведений. Для этого воспользуемся обработкой из статьи «Получение информации о структуре хранения базы данных в терминах 1С:Предприятие и СУБД». В моей базе данных имя этой таблицы: «_InfoRg243», напишем следующий запрос выборки всех данных из таблицы:

Эксперимент

Эксперимент довольно прост:

В результате этих действий в нашей базе данных выполняется запрос, который ожидает освобождения ресурса. Если бы было установлено время таймаута (а по умолчанию его нет), возникла бы ошибка превышения времени ожидания на блокировке.

Получение информации о текущих запросах

Текущее состояние нашей системы дает нам возможность выполнить запрос, который вернет информацию об исполняемых в данный момент запросах. В моем запросе будут использованы следующие динамические административные представления:

ПредставлениеОписание
dm_exec_requestsВозвращает сведения о каждом из запросов, выполняющихся в SQL Server
dm_exec_sql_textВозвращает текст пакета SQL, который определен указанным параметром
dm_exec_query_planВозвращает события инструкции Showplan в XML-формате для пакета, указанного в дескрипторе плана

Текст запроса приведен ниже, а также доступен во вложении к статье:

В условии отбора «MyBase» — имя моей базы данных в СУБД. Результат запроса представлен на картинке ниже:

ms sql история запросов к базе. ExecRequests 1. ms sql история запросов к базе фото. ms sql история запросов к базе-ExecRequests 1. картинка ms sql история запросов к базе. картинка ExecRequests 1. В Управляемом экземпляре Azure SQL в настоящее время поддерживается большинство функций агента SQL Server (но не все). Подробные сведения см. в статье Различия в T-SQL между Управляемым экземпляром SQL Azure и SQL Server.Текущие исполняемые запросы

У меня на картинке выведено 2 строки: первая (обведена красным цветом) — запрос, ожидающий освобождения ресурса; вторая — сам запрос получения информации об исполняемых запросах, поэтому ее разбирать не будем.

Ниже приведу описания колонок результата запроса:

Имя колонкиОписание
DB_NameИмя базы данных к которой выполняется запрос
start_timeОтметка времени поступления запроса
session_idИдентификатор сеанса, к которому относится данный запрос
statusСостояние запроса
commandТип выполняемой команды
IOЧисло операций чтения и записи, выполненных данным запросом
logical_readsЧисло логических операций чтения, выполненных данным запросом
cpu_timeВремя ЦП (в миллисекундах), затраченное на выполнение запроса
total_elapsed_timeОбщее время, истекшее с момента поступления запроса (в миллисекундах)
blocking_session_idИдентификатор сеанса, блокирующего запрос
wait_typeЕсли запрос в настоящий момент блокирован, в столбце содержится тип ожидания
wait_timeЕсли запрос в настоящий момент блокирован, в столбце содержится продолжительность текущего ожидания (в миллисекундах)
wait_resourceЕсли запрос в настоящий момент блокирован, в столбце указан ресурс, освобождения которого ожидает запрос
textТекст поступившего запроса
query_planПредполагаемый план выполнения поступившего запроса

Анализ результата запроса

Интерпретируем результат запроса:

02.08.2016 в 12:50:18 сеансом с идентификатором «70» к базе данных «MyBase» был отправлен запрос типа SELECT. Текст запроса, а так же предполагаемый план выполнения запроса указаны в полях text и query_plan соответственно. Запрос был приостановлен (suspend) по причине ожидания получения разделяемой (S) блокировки на ресурсе «KEY: …». Данный ресурс захвачен блокирующим сеансом с идентификатором 69. Время ожидания, а так же общее время истекшее с момента получения запроса указаны в полях wait_time и total_elapsed_time соответственно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *