导读
可观测性已经成为分布式系统成功运行的关键组成部分。如何借助多样、全面的数据,让架构师更简单、高效地定位问题、分析问题、解决问题,已经成为业内的一个技术焦点。本系列文章将深入解读 TiDB 的关键参数,帮助大家更好地观测系统的状态,实现性能的优化提升。
系列文章将包含以下几个章节:
-
索引观测:快速识别无用索引与低效索引
-
SQL 执行观测:解读 TiDB 算子的执行信息
-
数据热点观测:分析发现造成热点的原因
-
内存观测:分析理解 TiDB 实例的内存占用
更多内容,敬请期待。
本文为系列文章的第一篇,将探讨如何观测和管理 TiDB 中的索引,避免不必要的损失和消耗。
引言
索引的设计对数据库性能优化起着至关重要的作用。索引减少了实际扫描的数据量,能够显著提升数据库系统的查询性能。然而,随着业务的复杂性不断提升,系统中的索引设计可能存在一些问题,影响数据库的整体效率:
- 未使用的索引:随着业务逻辑的调整、数据量变化或者新索引的创建,部分索引不再被查询优化器选中,变成了“无用索引”。
- 低效索引:虽然索引被查询优化器选中,但它们扫描了大量数据,导致 I/O 消耗较高,优化效果并不明显。
这些未使用或低效的索引如果没有得到及时清理,它们可能会显著影响数据库的性能和资源利用率。
索引优化的意义
清理未使用或低效的索引对数据库性能优化工作有着重要的意义:
- 避免磁盘空间浪费:每个索引都会消耗磁盘空间,随着数据量的增长,索引占用的空间也会随之扩大。清理未被使用的索引有助于节省存储成本。
- 降低 DML 操作的额外开销:插入(INSERT)、更新(UPDATE)和删除(DELETE)操作需要维护所有相关的索引。未使用或低效的索引会导致这些操作的性能下降,特别是在高并发场景下,其影响尤为明显。移除这些索引可以提升 DML 操作的效率。
- 提升查询性能:低效的索引可能导致查询时扫描的数据量过大,从而增加磁盘 I/O 和查询延迟。优化这些低效索引,能让查询操作更加高效。
- 简化数据库维护:随着索引的增多,数据库管理的复杂性也随之提高,特别是在备份、恢复和迁移等操作中。清理不必要的索引,可以简化数据库结构,提高维护效率。
因此,定期检查并优化索引,应该成为数据库管理中的常规任务。
TiDB 对索引优化的支持
虽然优化索引对数据库性能至关重要,但错误地删除索引也可能带来风险,导致 SQL 性能下降,甚至导致数据库性能崩溃。因此,删除索引的决策必须基于数据支持,通过有效手段来验证,并且在出现问题能够快速回退。
TiDB 通过系统表 TIDB_INDEX_USAGE、schema_unused_index的引入和不可见索引 ( https://docs.pingcap.com/zh/tidb/stable/sql-statement-create-index#不可见索引 )能力,帮助用户快速观测现有索引的状态,并实现删除索引前的验证。
系统表 TIDB_INDEX_USAGE
为了解决索引观测问题,TiDB 从 v8.0.0 版本开始引入了系统表 INFORMATION_SCHEMA.TIDB_INDEX_USAGE。该系统表记录了索引的关键运行指标,协助 DBA 制定优化

最低0.47元/天 解锁文章
871

被折叠的 条评论
为什么被折叠?



