我最近观看了 sp_Blitzindex 视频并测试了该工具,发现我们的大多数表都有缺失索引的组合以及具有数百次写入但没有读取的索引。我认为这意味着我们应该删除那些没有阅读的人。
无论如何,我们删除了第一个,然后再次运行 sp_Blitzindex 并且没有显示丢失的索引。
这是否意味着删除不需要的索引会重置缓存?我们应该以其他方式来做吗?先添加缺失的,再删除多余的索引?
附上截图来说明发生了什么。
我正在看
激进索引:总锁定等待时间 > 5 分钟(行 + 页),平均等待时间较短
在我们的一张桌子上通过BlitzIndex发出警告,我不太明白会发生什么。有问题的索引与我们表上的主键有关:
ALTER TABLE [Authentication].[Tokens]
ADD CONSTRAINT [PK_Authentication.Tokens]
PRIMARY KEY CLUSTERED ( [TokenID] )
为了完整起见,这里是表结构的要点:
CREATE TABLE [Authentication].[Tokens](
[TokenID] [int] IDENTITY(1,1) NOT NULL,
... other columns here)
BlitzIndex 报告以下统计数据:Reads: 10,066,849 (2,259,000 seek 934,476 scan 6,873,373 lookup) Writes:1,399,277, 314 rows; 1.1MB
我有些困惑。我们不会查询/过滤掉这一列(如SELECT ... WHERE TokenID = 1
)。我唯一的猜测是该表可能被经常读取,并且使用默认的 SQL 锁定策略大量查询相互碰撞?
我愿意接受任何建议或反馈,对于一个看似简单和良性的表格。
我正在清理我们的一个数据库,在删除一个未使用的索引并向ARPayments
表中添加一个主键之后,sp_BlitzIndex
现在正在报告一个索引dbo.ARPayment.Unknown (0)
。我已经刷新了我的索引,但绝对没有任何此类索引的迹象。
这是它在运行输出中显示的消息sp_BlitzIndex 'db_name', @Mode=4
:
这张表应该是堆吗?dbo.ARPayment.未知 (0)
您好,我从我的一台测试服务器上的最新版本的 sp_BlitzIndex 收到此错误消息:
数据库处理失败。无法将值 NULL 插入列 'index_sanity_id',表 'tempdb.dbo.#IndexSanitySize__________________________________________________________________________________________________________00000002626F';列不允许空值。插入失败。
是否可以过滤 sp_BlitzIndex 的结果以仅显示未使用和重复的索引?如果是这样,如何?
我还没有尝试过任何东西。只是想在表中插入 sp 输出,然后在那里过滤它。但我相信一定有更好的方法。
我知道这应该交给布伦特和团队。但是将其张贴在这里以获得一些更有趣的答案。