使用 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_name
与sys.databases
.从文档:
但是,在我自己的 Azure SQL DB 上查看该列时,这种行为让我有点惊讶。我在同一台服务器上创建了两个 SQL DB。
如果我连接
master
并运行查询:结果中的所有三行(master + 两个数据库)都具有相同的
physical_database_name
(6dfa05ee-9c60-4288-a344-11f9f1459dcc):当我连接到特定的用户数据库时,该 GUID 会根据我连接到的数据库而改变。(此外,您看不到未连接到的用户数据库。该部分是预期的!)
我不确定为什么该列是基于当前数据库上下文而不是基于行来填充的。如果你问我,这非常令人困惑。
因此,要将 GUID 从
sys.dm_os_performance_counters
回关联到特定数据库,您需要连接到每个数据库,查询physical_database_name
来自sys.databases
,然后匹配来自单独数据库的所有这些单独的结果集,以将 GUID 映射到名称。