Mihai は、現在のシステム オブジェクト を指していますdm_exec_cached_plans
。(あなたの質問への回答を調べたところ、[syscacheobjects]
実際には非推奨であることがわかりました。)したがって、私は彼の回答に賛成票を投じました。
ただし、WHERE
. を使用すると、前に示したような をdm_exec_cached_plans
使用した同様のクエリが次のようになります。WHERE
SELECT usecounts, cacheobjtype, objtype, text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE [text] LIKE '%WHERE%''%'
----AND [text] NOT LIKE '%sp_executesql%' ----queries probably ok, with sp_executesql
----WHERE usecounts > 1 ----un-commenting this might also be interesting to check out.
ORDER BY usecounts DESC;
または、Mihai のクエリに追加するだけです。
SELECT
CP.usecounts
, CP.cacheobjtype
, ST.text as sql_Statement
, QP.query_plan
FROM
sys.dm_exec_cached_plans CP
CROSS APPLY sys.dm_exec_sql_text(CP.plan_handle) ST
CROSS APPLY sys.dm_exec_query_plan(CP.plan_handle) QP
WHERE
CP.objtype = 'Adhoc'
AND ST.dbid = DB_ID()
AND ST.text LIKE '%WHERE%''%'
ORDER BY
CP.usecounts DESC
ORDER BY
よく発生するクエリが頻繁な露出を引き起こしているという考えに基づいて構築された に注意してください。しかし、おそらくすでにお気づきのように...疑わしいコードがクエリ文字列自体を構築している場合、一意の値 (行番号、顧客 ID、注文番号など) によって一意のクエリが生成される可能性があります。sp_executesql
) がありますが、実際に確認することが最も重要である可能性がありますusecounts = 1
。
あなたの質問に対する答えに関する限り、(「SQL クエリはいつこのテーブルから削除されますか?」): キャッシュに十分なクエリがあり、「メモリ プレッシャ」が発生すると、古いクエリは新しいクエリとしてキャッシュから削除されます。入ってきて...そしてSQLが再起動するとすべてがクリアされます。( http://www.sqlservercentral.com/Forums/Topic1375781-391-1.aspxおよびhttp://technet.microsoft.com/en-us/library/ms181055%28v=sql.105%29.aspxを参照)
それが役立つことを願っています...