您好,我从我的一台测试服务器上的最新版本的 sp_BlitzIndex 收到此错误消息:
数据库处理失败。无法将值 NULL 插入列 'index_sanity_id',表 'tempdb.dbo.#IndexSanitySize__________________________________________________________________________________________________________00000002626F';列不允许空值。插入失败。
您好,我从我的一台测试服务器上的最新版本的 sp_BlitzIndex 收到此错误消息:
数据库处理失败。无法将值 NULL 插入列 'index_sanity_id',表 'tempdb.dbo.#IndexSanitySize__________________________________________________________________________________________________________00000002626F';列不允许空值。插入失败。
当在运行 sp_BlitzIndex 的同时添加或删除索引时,通常会发生这种情况。例如,如果您有在用户数据库中动态添加/删除表的代码,则会触发此操作。此处跟踪了 Github 问题。
要检验该理论,请尝试在终端用户活动较低的情况下再次运行 sp_BlitzIndex,或者将同一数据库还原到另一台没有活动的服务器。(当然,这不会让您获得索引利用率数据,但它会证明理论。)
如果即使服务器上没有任何活动(再次恢复到不同的服务器,以便您可以确定),您仍然收到错误,那么我们将需要单步执行代码以了解数据库中的哪些类型的索引触发了错误. 你可以通过修改T-SQL的这部分来看到它:
将其更改为:
然后在过程结束时:
这样你就可以看到哪些索引触发了错误,我们可以弄清楚如何将它们排除在检查之外。
我在 Github 中创建了一个问题来跟踪这个问题并在下一个构建中修复它:
sp_BlitzIndex - 填充#IndexSanitySize 时出现空错误