我正在SQL Server Analysis Service 上执行一些DMV 查询SELECT * FROM $system.DISCOVER_SESSIONS
,例如. 此查询将返回服务器上所有数据库的数据,因此它并不是真正特定于数据库的。当我通过AdomdConnection连接到服务器时,我没有在连接字符串中指定数据库/目录,并且查询仍然有效。但是我注意到数据库始终与此连接相关联,并且它通常是服务器上可用数据库列表中的第一个数据库。
我的问题是
- 这些类型的查询实际上会给相关数据库带来负担吗,即,如果出于某种原因,我们会有许多 DMV 查询来检查服务器会话,它们是否都会查询列表中自动选择的第一个数据库,从而影响(性能-明智的)任何可能实际上对此数据库进行“真实”查询的用户?
- 或者这种 DMV 查询仅影响服务器本身,而不以任何方式影响数据库,因此无论选择哪个数据库,性能影响都是相同的?
可能更简短的表述方式是: DMV 查询的性能影响与服务器相关还是与数据库相关?
当您未在连接字符串中指定数据库时,数据库引擎会将您的数据库上下文设置为映射到通过服务器进行身份验证的登录名的默认值。如果没有为该登录设置默认值,那么我相信引擎默认为数据库
master
。大多数 DMV 都可以从任何数据库访问。在大多数情况下,这并不是什么真正的事情。除了特定类型的查询(例如专门更改数据库和/或导致数据库脱机的查询)之外,从特定数据库上下文运行查询不会对该特定数据库造成任何类型的具体负担。
服务器由硬件资源组成。因此,任何类型的查询或进程都肯定会消耗一定数量的资源才能执行。即使查询仅针对特定数据库的特定对象,硬件资源仍然是服务器级配置的。(抛开使用资源调控器限制数据库对这些资源的访问的讨论不谈。)当然,可用的服务器资源较少会影响该服务器上的所有数据库。
所以,是的,从性能角度来看,从哪个数据库执行大多数 DMV 几乎并不重要。无论如何,影响将是一致的。
服务器相关。