我们有一个查看多个视图的查询。当用户具有db_owner角色时,此查询在20秒内运行。一旦我们将db_owner角色更改为db_datareader,同一查询大约需要2分30秒。
当我们将查询放在带有重新编译选项的存储过程中时,我们得到相同的结果。在参数嗅探的情况下,我们还尝试将存储过程的参数重新分配给内部变量,结果相同。
执行计划在有和没有db_owner权限的情况下似乎相同。当我们查阅sys.dm_exec_cached_plans时,我们看到在相同的缓存计划中递增的usecounts。
我们能够在三台计算机上重现此问题。
我们的测试场景是:
我们的SQL版本是SQL 2012 SP 2
Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 10586: )
此查询适用于我们网站上的报告。我们希望将安全性保持在最低水平。有人知道为什么没有db_owner角色的同一个用户需要这么长时间吗?
谢谢!