#sql-server #sql-server-2005 #ado.net
#sql-сервер #sql-server-2005 #ado.net
Вопрос:
У меня проблема с отслеживанием параметров в sql server 2005 для динамического параметризованного запроса, который генерируется в клиенте C # через ado.net и доступ к нему в веб-приложении из IIS с использованием LocalSystem в качестве идентификатора пула приложений.
Когда я запускаю запрос в SSMS, он выполняется очень быстро, но время ожидания истекает через 30 секунд при запуске с клиента, поэтому я уверен в отслеживании параметров.
Теперь я хочу взглянуть на план запроса для запроса, который кэшируется от клиента, но, похоже, я не могу повторить запрос в SSMS, чтобы использовать этот кэшированный план.
Я запустил трассировку и получил точный запрос и все заданные параметры, которые использовал клиент, но это по-прежнему не дает мне кэшированный план запроса, когда я запускаю его в SSMS. Я предполагаю, что это как-то связано либо с именем приложения, либо с именем NTUserName, либо с именем входа (также предоставляемым трассировкой), но я не уверен, какой из них или какую комбинацию из них мне нужно установить (или как это сделать в SSMS) для запуска запроса, чтобы он использовал кэшированный план запроса.
Комментарии:
1. Почему бы не зафиксировать фактический план, используемый приложением? msdn.microsoft.com/en-us/library/ms190233.aspx
2. @Remus трассировка фактически не показывает его, потому что время ожидания истекает до завершения запроса
Ответ №1:
запустите запрос, затем, пока он выполняется, выполните следующий скрипт
SELECT session_id, blocking_session_id, command, cpu_time, reads, writes, logical_reads, row_count, total_elapsed_time, granted_query_memory, DB_NAME(DATABASE_ID),
last_wait_type, wait_resource, start_time, open_transaction_count, query_plan, text
FROM master.sys.dm_exec_requests (nolock) CROSS APPLY sys.dm_exec_query_plan(plan_handle) CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE session_id <> @@SPID
это вернет расчетный план, а также другую информацию обо всех выполняемых в данный момент запросах (вам необходимо разрешение на просмотр СОСТОЯНИЯ СЕРВЕРА).
Обычно в таких ситуациях вам поможет ОБНОВЛЕНИЕ СТАТИСТИКИ или создание вашей собственной статистики. Если вам нужна помощь с планом запроса, разместите XML где-нибудь, и я буду рад помочь.