通過sys.dm_exec_procedure_stats得到存儲(chǔ)過程的執(zhí)行信息
SQL Server 2008通過sys.dm_exec_procedure_stats得到存儲(chǔ)過程的執(zhí)行信息的相關(guān)操作的相關(guān)知識(shí)是本文我們主要要介紹的內(nèi)容,接下來我們就開始介紹這部分內(nèi)容。
很多DBA都希望能夠得到某個(gè)存儲(chǔ)過程的執(zhí)行信息,比如:
1)執(zhí)行了多少次。
2)執(zhí)行的執(zhí)行計(jì)劃如何。
3)執(zhí)行的平均讀寫如何。
4)執(zhí)行平均需要多少時(shí)間。
等等。幸運(yùn)的是SQL server 2008 提供了一個(gè)這樣的DMV,使得我們比較容易就得到上面的信息。這個(gè)DMV是sys.dm_exec_procedure_stats,它輸出了下面的信息(部分截圖,具體的請(qǐng)參考聯(lián)機(jī)叢書):
列名 |
數(shù)據(jù)類型 |
說明 |
database_id |
int |
存儲(chǔ)過程所在的數(shù)據(jù)庫(kù) ID。 |
object_id |
int |
存儲(chǔ)過程的對(duì)象標(biāo)識(shí)號(hào)。 |
cached_time |
datetime |
存儲(chǔ)過程添加到緩存的時(shí)間。 |
cached_time |
datetime |
存儲(chǔ)過程添加到緩存的時(shí)間。 |
last_execution_time |
datetime |
上次執(zhí)行存儲(chǔ)過程的時(shí)間。 |
execution_count |
bigint |
存儲(chǔ)過程自上次編譯以來所執(zhí)行的次數(shù)。 |
total_worker_time |
bigint |
此存儲(chǔ)過程自編譯以來執(zhí)行所用的 CPU 時(shí)間總量(微秒)。 |
last_worker_time |
bigint |
上次執(zhí)行存儲(chǔ)過程所用的 CPU 時(shí)間(微秒)。 |
total_physical_reads |
bigint |
此存儲(chǔ)過程自編譯后在執(zhí)行期間所執(zhí)行的物理讀取總次數(shù)。 |
last_physical_reads |
bigint |
上次執(zhí)行存儲(chǔ)過程時(shí)所執(zhí)行的物理讀取次數(shù)。 |
min_physical_reads |
bigint |
該存儲(chǔ)過程在單次執(zhí)行期間所執(zhí)行的最少物理讀取次數(shù)。 |
max_physical_reads |
bigint |
該存儲(chǔ)過程在單次執(zhí)行期間所執(zhí)行的***物理讀取次數(shù)。 |
total_logical_writes |
bigint |
此存儲(chǔ)過程自編譯后在執(zhí)行期間所執(zhí)行的邏輯寫入總次數(shù)。 |
last_logical_writes |
bigint |
上次執(zhí)行存儲(chǔ)過程時(shí)所執(zhí)行的邏輯寫入次數(shù)。 |
min_logical_writes |
bigint |
該存儲(chǔ)過程在單次執(zhí)行期間所執(zhí)行的最少邏輯寫入次數(shù)。 |
max_logical_writes |
bigint |
該存儲(chǔ)過程在單次執(zhí)行期間所執(zhí)行的***邏輯寫入次數(shù)。 |
total_logical_reads |
bigint |
此存儲(chǔ)過程自編譯后在執(zhí)行期間所執(zhí)行的邏輯讀取總次數(shù)。 |
last_logical_reads |
bigint |
上次執(zhí)行存儲(chǔ)過程時(shí)所執(zhí)行的邏輯讀取次數(shù)。 |
total_elapsed_time |
bigint |
完成此存儲(chǔ)過程的執(zhí)行所用的總時(shí)間(微秒)。 |
last_elapsed_time |
bigint |
最近完成此存儲(chǔ)過程的執(zhí)行所用的時(shí)間(微秒)。 |
可以通過下面的語句,得到按照?qǐng)?zhí)行時(shí)間排序的前10 的存儲(chǔ)過程的執(zhí)行信息:
- SELECT TOP 10 a.object_id, a.database_id, OBJECT_NAME(object_id, database_id) 'proc name',
- a.cached_time, a.last_execution_time, a.total_elapsed_time, a.total_elapsed_time/a.execution_count AS [avg_elapsed_time],
- a.execution_count,
- a.total_physical_reads/a.execution_count avg_physical_reads,
- a.total_logical_writes,
- a.total_logical_writes/ a.execution_count avg_logical_reads,
- a.last_elapsed_time,
- a.total_elapsed_time / a.execution_count avg_elapsed_time,
- b.text,c.query_plan
- FROM sys.dm_exec_procedure_stats AS a
- CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) b
- CROSS APPLY sys.dm_exec_query_plan(a.plan_handle) c
- ORDER BY [total_worker_time] DESC;
- GO
以上就是SQL Server 2008通過sys.dm_exec_procedure_stats得到存儲(chǔ)過程的執(zhí)行信息的相關(guān)操作的全部?jī)?nèi)容,本文我們主要就介紹到這里了,希望本次的介紹能夠?qū)δ兴鶐椭?/p>
【編輯推薦】






