使用 SSMS 版本(2012/2014 和 2016)访问 SQL Server 时,从对象资源管理器打开数据库列表非常慢。如果我在同一实例上使用 SSMS 2008 R2 进行尝试,结果是 => 即时显示。
注意:帐户是 sysadmin,所有数据库都禁用了自动关闭,并且我没有连接到远程服务器。它在我的本地机器上!
我注意到在打开数据库列表时比较从 SSMS 2008 和 2012/2014/2016 生成的查询存在细微差别。
除了 SSMS 2008 之外,它们都在使用has_dbaccess函数。
例如:
SELECT
dtb.name AS [Name],
dtb.database_id AS [ID],
CAST(has_dbaccess(dtb.name) AS bit) AS [IsAccessible]
FROM
master.sys.databases AS dtb
ORDER BY
[Name] ASC
如果我删除该功能,则会有巨大的性能差异。我想他们应该在查询的请求中添加一个条件,以防万一它是一个系统管理员帐户,只是不要检查每个数据库中的权限。这有什么意义吗?
这个问题最终在新的 SSMS 17.9 中得到修复。
你可以在这里得到它。
我通过将 Windows 身份验证更改为 SQL Server 身份验证解决了这个问题,如此处提出的。(我意识到不是每个人都能做到这一点。)
该问题在 SSMS 18.9 和 SQL Server 2019 中仍然存在。
has_dbaccess 函数似乎肯定是问题所在。