没有db_owner角色的慢查询

时间:2016-04-13 13:07:24

标签: sql-server-2012

我们有一个查看多个视图的查询。当用户具有db_owner角色时,此查询在20秒内运行。一旦我们将db_owner角色更改为db_datareader,同一查询大约需要2分30秒。

当我们将查询放在带有重新编译选项的存储过程中时,我们得到相同的结果。在参数嗅探的情况下,我们还尝试将存储过程的参数重新分配给内部变量,结果相同。

执行计划在有和没有db_owner权限的情况下似乎相同。当我们查阅sys.dm_exec_cached_plans时,我们看到在相同的缓存计划中递增的usecounts。

我们能够在三台计算机上重现此问题。

我们的测试场景是:

  1. 我们以管理员用户
  2. 打开SSMS
  3. 我们用测试用户打开另一个SSMS
  4. 我们从管理员会话
  5. 为测试用户分配db_owner角色
  6. 我们对测试用户执行查询,需要20秒
  7. 我们从管理员会话中删除了对测试用户的db_owner角色
  8. 我们对测试用户执行查询而不关闭当前会话,需要2分30秒
  9. 我们的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角色的同一个用户需要这么长时间吗?

    谢谢!

0 个答案:

没有答案