Как найти запросы, которые использовали больше всего памяти для сортировок - PullRequest
4 голосов
/ 18 января 2012

Как определить, какие запросы использовали больше всего памяти для сортировки / объединения / и т. Д.? Как определить, сколько памяти занимал один конкретный запрос?

Я надеялся найти что-то вроде SET STATISTICS IO ON для отдельного запроса и DMV, чтобы найти худших нарушителей, но я не смог найти ни одного.

Ответы [ 2 ]

6 голосов
/ 18 января 2012

sys.dm_exec_query_memory_grants * * 1004

  • requested_memory_kb: общий запрошенный объем памяти в килобайтах
  • granted_memory_kb: общий объем памяти, фактически предоставленный в килобайтах.
1 голос
/ 18 января 2012

Попробуйте, чтобы найти индивидуальные запросы высокопоставленных нарушителей и планы их выполнения

-- Find single-use, ad-hoc queries that are bloating the plan cache
SELECT TOP(100) [text], cp.size_in_bytes
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE cp.cacheobjtype = N'Compiled Plan' 
AND cp.objtype = N'Adhoc' 
AND cp.usecounts = 1
ORDER BY cp.size_in_bytes DESC;

Более того, зайдите на блог Глена Берри и получите полный диагностический скрипт (где я выше). У него есть несколько действительно хороших сценариев на основе DMV для поиска запросов IO / Mem / CPU с высокой нагрузкой (AdHoc и SP).

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...