【问题标题】:SQL 2008 Encryption ScanSQL 2008 加密扫描
【发布时间】:2009-07-22 20:30:30
【问题描述】:

我们最近将数据库服务器从 SQL 2005 升级到 SQL 2008 64 位。现在,所有四个处理器上的 CPU 利用率通常都以 100% 运行(这在 SQL 2005 服务器上从未发生过)。当我运行 sp_lock 时,我看到许多进程正在等待名为 [ENCRYPTION_SCAN] 的资源。我没有使用任何 SQL 2008 加密功能。有谁知道为什么我会有任务等待这个资源?似乎每当我有四个进程在等待此资源时,所有四个处理器上的 CPU 都会达到 100%。

【问题讨论】:

  • 您也可以尝试在 www.ServerFault.com 上询问此问题

标签: sql sql-server sql-server-2008 encryption


【解决方案1】:

我一直在几个不同的地方看到同样的问题。它尚未得到明确证明,但看起来长时间运行的 BULK INSERT 或 SORT 操作可能会悲观地持有 ENCRYPTION_SCAN 锁,以防止在操作中间开始加密扫描。在不久的将来寻找来自 CSS 的关于此的博客,当/如果它出现时,我会在这里链接回它。

【解决方案2】:

透明数据加密 (TDE) 对数据和日志文件执行实时 I/O 加密和解密。

http://msdn.microsoft.com/en-us/library/bb934049.aspx

你启用了吗?

更新:

你能说出哪些操作被阻止了吗?例如,插入、删除、更新、索引扫描等。

TDE 是我见过的唯一提到“加密扫描”的场景。快速搜索只会验证这一点:

...服务器启动一个后台线程(称为加密扫描或扫描)...。在 DDL 执行时,会在数据库上获取更新锁。与 DDL 异步运行的加密扫描采用共享锁。所有与这些锁不冲突的正常操作都可以继续进行。排除的操作包括修改文件结构和分离数据库。

msdn

这听起来像是您看到的正在进行的“加密扫描”意味着加密正在数据库上反复启用和禁用,或者密钥正在更改,因为这些延迟只有在加密状态更改时才会出现。要么,要么你有一个非常大的数据库,当它最终完成时,问题就会消失。

尝试以下查询:

SELECT DB_NAME(e.database_id) AS DatabaseName,
            e.database_id,
            e.encryption_state,
    CASE e.encryption_state
                WHEN 0 THEN 'No key present - encryption unavailable'
                WHEN 1 THEN 'Unencrypted'
                WHEN 2 THEN 'Encryption in progress'
                WHEN 3 THEN 'Encrypted'
                WHEN 4 THEN 'Key change in progress'
                WHEN 5 THEN 'Decryption in progress'
    END AS encryption_state_desc,
            c.name,
            e.percent_complete
    FROM sys.dm_database_encryption_keys AS e 
    LEFT JOIN master.sys.certificates AS c 
    ON e.encryptor_thumbprint = c.thumbprint 

【讨论】:

  • 运行该查询时没有返回任何行。我现在相信,当我认为等待 ENCRYPTION_SCAN 的任务与高 CPU 利用率之间存在相关性时,我错了。看来,无论我碰巧在查询分析器中指向哪个数据库,对于运行 sp_lock 命令的进程,我总是会看到此 ENCRYPTION_SCAN。也许这只是 sp_lock 使用的东西?感谢您对此的帮助。
猜你喜欢
  • 2017-09-07
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2012-10-18
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多