Сохраняется ли история запросов в некоторых файлах журнала? Если да, можете ли вы сказать мне, как найти их местоположение? Если нет, можете ли вы дать мне совет, как это увидеть?
sql-server
logging
ssms
mstaniloiu
источник
источник
Ответы:
[Поскольку этот вопрос , скорее всего, будет закрыт как дубликат.]
Если SQL Server не был перезапущен (и план не был удален и т. Д.), Вы можете найти запрос в кэше плана.
Если вы потеряли файл из-за сбоя Management Studio, вы можете найти файлы восстановления здесь:
В противном случае вам нужно будет использовать что-то еще, чтобы помочь вам сохранить историю запросов, например, SSMS Tools Pack, как упомянуто в ответе Эда Харпера, хотя это не бесплатно в SQL Server 2012+. Или вы можете настроить легкую трассировку, отфильтрованную по вашему логину или имени хоста (но для этого используйте трассировку на стороне сервера, а не Profiler).
Как прокомментировал @ Nenad-Zivkovic, было бы полезно присоединиться
sys.dm_exec_query_stats
и заказатьlast_execution_time
:источник
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 для записи поступающих сообщений и отслеживания запросов во время работы Profiler.
источник
Я использую приведенный ниже запрос для отслеживания активности приложения на сервере SQL, на котором не включен профилировщик трассировки. Метод использует хранилище запросов (SQL Server 2016+) вместо DMV. Это дает лучшую возможность просмотра исторических данных, а также ускоряет поиск. Очень эффективно захватывать краткосрочные запросы, которые не могут быть захвачены sp_who / sp_whoisactive.
источник
Это должно показать вам время и дату, когда был выполнен запрос
источник
Вы можете отслеживать запросы SQL с помощью SQL Profiler, если вам это нужно
источник
Историю запросов можно посмотреть с помощью системных представлений:
Например, используя следующий запрос:
Текущие запущенные запросы можно увидеть с помощью следующего скрипта:
Этот запрос отображает все активные запросы и все те запросы, которые явно блокируют активные запросы.
Все эти и другие полезные скрипты реализованы в виде представлений в базе данных SRV , которая распространяется свободно. Например, первый скрипт появился из представления [inf]. [VBigQuery] , а второй - из представления [inf]. [VRequests] .
Существуют также различные сторонние решения для истории запросов. Я использую Query Manager из Dbeaver : и Query Execution History из SQL Tools , который встроен в SSMS :
источник
Эта функция не существует "из коробки" в SSMS.
Если вы используете SSMS 18 или новее, вы можете попробовать SSMSPlus.
Он имеет функцию истории запросов.
https://github.com/akarzazi/SSMSPlus
Отказ от ответственности: я автор.
источник
Вы можете использовать «Автоматически генерировать скрипт при каждом сохранении», если вы используете Management Studio. Это не обязательно логирование. Проверьте, полезно ли вам ..;)
источник
Если интересующие вас запросы представляют собой динамические запросы, которые периодически прерываются, вы можете записать SQL, дату и время и пользователя в таблицу во время создания динамического оператора. Это будет сделано на индивидуальной основе, хотя, поскольку для этого требуется специальное программирование, и для этого требуется немного больше времени на обработку, так что делайте это только для тех немногих запросов, которые вас больше всего волнуют. Но наличие журнала выполнения определенных операторов может действительно помочь, когда вы пытаетесь выяснить, почему он терпит неудачу только раз в месяц. Динамические запросы сложно тщательно протестировать, и иногда вы получаете одно конкретное входное значение, которое просто не будет работать, и ведение этого журнала во время создания SQL часто является лучшим способом увидеть, что конкретно было в SQL, который был построен.
источник
Немного нестандартный метод заключается в написании сценария решения в AutoHotKey. Я использую это, и это не идеально, но работает и бесплатно. По сути, этот сценарий назначает горячую клавишу CTRL+ SHIFT+, Rкоторая скопирует выбранный SQL в SSMS ( CTRL+ C), сохранит файл SQL с меткой даты и затем выполнит выделенный запрос ( F5). Если вы не привыкли к сценариям AHK, начальная точка с запятой - это комментарий.
Самым большим ограничением является то, что этот сценарий не будет работать, если вы нажмете «Выполнить» вместо использования сочетания клавиш, и этот сценарий не сохранит весь файл - только выделенный текст. Но вы всегда можете изменить скрипт для выполнения запроса, а затем выбрать все ( CTRL+A ) перед копированием / сохранением.
Использование современного редактора с функциями поиска в файлах позволит вам осуществлять поиск в истории SQL. Вы можете даже прихотить и скопировать свои файлы в базу данных SQLite3 для запроса ваших запросов.
источник