SQL server 2008裡面透過sys.dm_exec_procedure_stats得到儲存過程的執行資訊
很多DBA都希望能夠得到某個儲存過程的執行資訊,比如:
1) 執行了多少次
2) 執行的執行計劃如何
3) 執行的平均讀寫如何
4) 執行平均需要多少時間
等等. 幸運的是SQL server 2008 提供了一個這樣的DMV,使得我們比較容易就得到上面的資訊。這個DMV是sys.dm_exec_procedure_stats,它輸出了下面的資訊(部分截圖,具體的請參考聯機叢書):
[@more@]列名 | 資料型別 | 說明 |
database_id | int | 儲存過程所在的資料庫 ID。 |
object_id | int | 儲存過程的物件標識號。 |
cached_time | datetime | 儲存過程新增到快取的時間。 |
cached_time | datetime | 儲存過程新增到快取的時間。 |
last_execution_time | datetime | 上次執行儲存過程的時間。 |
execution_count | bigint | 儲存過程自上次編譯以來所執行的次數。 |
total_worker_time | bigint | 此儲存過程自編譯以來執行所用的 CPU 時間總量(微秒)。 |
last_worker_time | bigint | 上次執行儲存過程所用的 CPU 時間(微秒)。 |
total_physical_reads | bigint | 此儲存過程自編譯後在執行期間所執行的物理讀取總次數。 |
last_physical_reads | bigint | 上次執行儲存過程時所執行的物理讀取次數。 |
min_physical_reads | bigint | 該儲存過程在單次執行期間所執行的最少物理讀取次數。 |
max_physical_reads | bigint | 該儲存過程在單次執行期間所執行的最大物理讀取次數。 |
total_logical_writes | bigint | 此儲存過程自編譯後在執行期間所執行的邏輯寫入總次數。 |
last_logical_writes | bigint | 上次執行儲存過程時所執行的邏輯寫入次數。 |
min_logical_writes | bigint | 該儲存過程在單次執行期間所執行的最少邏輯寫入次數。 |
max_logical_writes | bigint | 該儲存過程在單次執行期間所執行的最大邏輯寫入次數。 |
total_logical_reads | bigint | 此儲存過程自編譯後在執行期間所執行的邏輯讀取總次數。 |
last_logical_reads | bigint | 上次執行儲存過程時所執行的邏輯讀取次數。 |
total_elapsed_time | bigint | 完成此儲存過程的執行所用的總時間(微秒)。 |
last_elapsed_time | bigint | 最近完成此儲存過程的執行所用的時間(微秒)。 |
可以透過下面的語句,得到按照執行時間排序的前10 的儲存過程的執行資訊:
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-1057106/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL server儲存過程函式SQLServer儲存過程函式
- 關於SQL server2008除錯儲存過程的完整步驟SQLServer除錯儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- SQL Server儲存過程的優缺點SQLServer儲存過程
- SQL Server 資料訪問策略:儲存過程QCSQLServer儲存過程
- SQL SERVER儲存過程AS和GO的含義SQLServer儲存過程Go
- 【SQL Server】常見系統儲存過程SQLServer儲存過程
- 透過空間佔用和執行計劃瞭解SQL Server的行儲存索引SQLServer索引
- SQL Server 2005的複製儲存過程選項BYSQLServer儲存過程
- Ms Sql Server查詢儲存過程中的內容SQLServer儲存過程
- MySQL儲存過程裡動態SQL的使用UXMySql儲存過程UX
- 使用SQL SERVER儲存過程實現歷史資料遷移SQLServer儲存過程
- SQL 分頁儲存過程SQL儲存過程
- SQL Server實戰六:T-SQL、遊標、儲存過程的操作SQLServer儲存過程
- SQL Server實戰五:儲存過程與觸發器SQLServer儲存過程觸發器
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 配置SQL Server Service Broker來傳送儲存過程資料(下)SASQLServer儲存過程
- 配置SQL Server Service Broker來傳送儲存過程資料(上)CYSQLServer儲存過程
- Q&A:在SQL Server 2005中編寫儲存過程RVSQLServer儲存過程
- 理解SQL Server 2008索引的儲存結構YDSQLServer索引
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- 儲存過程不好在哪裡?儲存過程
- 一條Sql的執行過程SQL
- .Net執行SQL/儲存過程之易用輕量工具SQL儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- SQL Server儲存過程模擬HTTP請求POST和GET協議SQLServer儲存過程HTTP協議
- 資料庫儲存過程資料庫儲存過程
- oracle的儲存過程Oracle儲存過程
- 關於SQL Server中儲存過程在C#中呼叫的簡單示例SQLServer儲存過程C#
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- 如何查詢一個儲存過程是否在執行儲存過程
- 應用儲存過程執行報錯解決方案儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程