Azure-Sql-Database

在 Azure SQL 數據庫的 sys.dm_os_performance_counters 中解碼 instance_name

  • November 9, 2021

使用 SQL Perfmon 計數器做一些工作,然後將我的頭撞到牆上,試圖弄清楚如何將 instance_name 列轉換為數據庫名稱。因此,如果我執行如下查詢

SELECT top 10 left(counter_name, 25), left(instance_name,40), cntr_value
FROM sys.dm_os_performance_counters 
WHERE counter_name = 'Log Bytes Received/sec'

我得到一個結果集

每秒接收的日誌字節數 _Total 0

每秒接收的日誌字節數 100f6a49-cd58-432a-8680-ed0f1069c5ea 0

每秒接收的日誌字節數 dd7b88c8-43c4-48a8-bf97-e174bb5c5eca 0

每秒接收的日誌字節數 7a0dc4f3-b236-4c0f-b42c-357bfd521b16 0

每秒接收的日誌字節數 5d527545-4bcc-4c66-b315-e1f8fc653245 0

如何將 instance_name (100f6a49-cd58-432a-8680-ed0f1069c5ea) 的值轉換為我認為可以在 sys.databases 中查看但沒有運氣的 database_name

該 GUID 實際上physical_database_namesys.databases.

文件

對於 SQL Server,數據庫的物理名稱。對於 Azure SQL 數據庫,伺服器上數據庫的通用 ID。

但是,在我自己的 Azure SQL DB 上查看該列時,這種行為讓我有點驚訝。我在同一台伺服器上創建了兩個 SQL DB。

如果我連接master並執行查詢:

SELECT name, physical_database_name
FROM sys.databases;

結果中的所有三行(master + 兩個數據庫)都具有相同的physical_database_name(6dfa05ee-9c60-4288-a344-11f9f1459dcc):

SSMS 結果1

當我連接到特定使用者數據庫時,該 GUID 會根據我連接到的數據庫而改變。(此外,您看不到未連接到的使用者數據庫。該部分是預期的!)

SSMS 結果 2 SSMS 結果 3

我不確定為什麼該列是基於目前數據庫上下文而不是基於行來填充的。如果你問我,這非常令人困惑。

因此,要將 GUID 從sys.dm_os_performance_counters回關聯到特定數據庫,您需要連接到每個數據庫,查詢physical_database_name來自sys.databases,然後匹配來自單獨數據庫的所有這些單獨的結果集,以將 GUID 映射到名稱。

引用自:https://dba.stackexchange.com/questions/302375