SQL Server服務器級別的動態管理視圖

  動態管理視圖是SQL Server的一個功能,用於提供詳細的數據庫和系統信息。第一類的DMVs,正如我在第一篇文章“深入瞭解SQL Server動態管理視圖”中所指出的是針對數據庫級別的。另一類DMV是針對服務器級別的,返回SQL Server實例及其所在系統的信息。

  例如,動態管理視圖sys.dm_exec_cached_plans返回詳細的關於緩存的或當前執行的查詢計劃。運行下面的SELECT語句,可以獲得系統中字節數超過400,000字節的查詢計劃的詳細資料:

  SELECT
  bucketid AS BucketID,
  usecounts AS UseCounts,
  size_in_bytes AS Size
  FROM
  sys.dm_exec_cached_plans
  WHERE
  size_in_bytes > 400000;

  請注意,該語句返回每個計劃的桶ID、使用次數和大小,如下表所示:

BucketID UseCounts Size
4577 12 1122304
5914 2 450560
9824 1 598016
2523 5 434176

  在這裏,我的系統中只有四個大小超過400,000字節的緩存的或正在執行的查詢計劃。(同樣,我的SQL Server只運行了很短的時間。)

  我們看的下一個服務器級別的DMV是sys.dm_exec_connections,該視圖返回有關SQL Server實例連接建立的信息。運行下面的SELECT語句,返回每個連接的會話ID和連接時間:

  SELECT
  session_id AS SessionID,
  connect_time AS StartTime,
  DATEDIFF(minute, connect_time, GETDATE()) AS MinConnected
  FROM
  sys.dm_exec_connections;

  在這個語句中,我還計算了自從連接建立後已經流逝的時間(單位:分鐘)。下表是動態管理視圖sys.dm_exec_connections返回的結果:

SessionID StartTime MinConnected
51 2011-01-23 08:44:52.890 136
52 2011-01-23 10:45:22.560 15
53 2011-01-23 10:55:21.577 5
56 2011-01-23 08:50:37.140 130

  現在讓我們來看看動態管理視圖sys.dm_exec_procedure_stats,該視圖返回緩存的存儲過程的性能統計數據。下面的例子將返回ReportServer$SQLSRV2008數據庫中存儲過程的信息(如果你已經在系統中配置了SQL Server報表服務,那麼該數據庫就已經被安裝):

  USE ReportServer$SQLSRV2008;
  GO
  SELECT
  OBJECT_NAME(object_id) AS ObjectName,
  execution_count AS ExecCount,
  total_physical_reads AS PhysReads
  FROM
  sys.dm_exec_procedure_stats
  WHERE
  database_id = DB_ID('ReportServer$SQLSRV2008')
  AND execution_count > 10
  ORDER BY
  ObjectName;

  在本例下,我只檢索那些執行次數大於10的數據。正如下表所示,該語句返回存儲過程的名字、執行次數和總物理讀取數:

ObjectName ExecCount PhysReads
GetDBVersion 722 0
GetMyRunningJobs 48 0

  在接下來的例子中,我使用sys.dm_os_threads動態管理視圖返回操作系統中SQL Server進程所擁有的線程信息:

  SELECT
  thread_address AS ThreadAddress,
  creation_time AS CreatedTime,
  stack_bytes_committed BytesCommitted,
  stack_bytes_used AS BytesUsed
  FROM
  sys.dm_os_threads
  WHERE
  stack_bytes_used > 10000;

  該語句返回線程的地址、創建時間、提交的字節數和使用的字節數。語句還限制了只返回使用字節數超過10,000的這些行。如下表所示,只有兩個線程的使用字節數超過規定的大小:

ThreadAddress CreatedTime BytesCommitted BytesUsed
0x7FFDEE28 2011-01-23 08:44:22.000 516096 11280
0x7FFA2E28 2011-01-23 08:44:25.127 516096 24320

  最後我們來看服務器相關的動態管理視圖是sys.dm_os_sys_info。該視圖返回運行SQL Server的計算機上的各種信息。這些信息可用於確定哪些是對SQL Server可用的資源,如下例所示:

  SELECT
  physical_memory_in_bytes AS PhysMemory,
  virtual_memory_in_bytes AS VirtMemory,
  stack_size_in_bytes AS StackSize,
  max_workers_count AS WorkersCount
  FROM
  sys.dm_os_sys_info;

  下表顯示這個語句返回的信息:

PhysMemory VirtMemory StackSize WorkersCount
536330240 2147352576 520192 256

  正如你所看到的,我使用動態管理視圖sys.dm_os_sys_info查詢系統配置的物理內存和虛擬內存數量,以及堆棧大小和最大工作數。

  使用SQL Server動態管理視圖

  當然,還有更多的比我在這兩篇文章中所列舉的DMVs。你可以使用這個SQL Server功能來查詢變更數據捕獲的信息,相關的I/O活動,通用語言運行時,數據庫鏡像和許多其他類別的信息。詳細信息請參閱SQL Server聯機叢書“動態管理視圖和函數(Transact - SQL)”。該主題將按特定類別劃分DMVs。

  對於每個類別,你都可以鏈接到該類型的DMVs清單,以及該類別的每個DMV,你可以鏈接到該DMV的特定主題。每當你在語句中引用一個DMV,首先要閱讀其主題以瞭解該視圖返回的信息和對視圖列類型的描述。你很快就會意識到我文章所描述的內容僅僅是冰山的一角。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章