Part01-基础概念与理论知识
1.1 索引基础概念
索引是数据库中用于加速查询的数据结构,通过创建索引可以:
- 提高查询性能
- 加速数据检索
- 减少全表扫描
- 优化排序操作
更多视频教程www.fgedu.net.cn
1.2 在线索引创建原理
在线索引创建的核心原理是:
- 在创建索引过程中不阻塞读写操作
- 使用后台任务来构建索引
- 通过多版本并发控制(MVCC)实现并发访问
- 使用临时表或中间状态来管理索引构建过程
1.3 TiDB索引特性
TiDB的索引特性包括:
- 在线创建:创建索引时不阻塞读写
- 并行构建:支持多个索引并行创建
- 可中断:索引创建过程可以被中断和恢复
- 进度监控:可以监控索引创建的执行进度
- 自动优化:自动优化索引结构
学习交流加群风哥微信: itpux-com
Part02-生产环境规划与建议
2.1 索引设计策略
索引设计的策略包括:
- 根据查询模式设计索引
- 选择合适的索引类型
- 合理设置索引列顺序
- 避免过度索引
- 定期维护索引
2.2 性能影响评估
在线索引创建对性能的影响评估:
- CPU影响:索引构建会增加CPU使用
- IO影响:索引构建会增加磁盘IO
- 内存影响:索引构建会占用一定的内存
- 网络影响:分布式索引构建会增加网络流量
- 查询影响:虽然不阻塞查询,但可能影响查询性能
2.3 最佳实践建议
在线索引创建的最佳实践建议:
- 在业务低峰期执行索引创建
- 分批创建多个索引
- 监控索引创建进度
- 合理设置索引创建参数
- 测试环境验证后再应用到生产环境
风哥提示:在线索引创建虽然不会阻塞读写操作,但仍然会对系统性能产生影响,需要合理规划和监控。学习交流加群风哥QQ113257174
Part03-生产环境项目实施方案
3.1 在线索引创建配置
配置TiDB的在线索引创建参数:
SHOW VARIABLES LIKE ‘tidb_ddl%’;
# 设置DDL并发度
SET GLOBAL tidb_ddl_concurrency = 4;
# 设置DDL批处理大小
SET GLOBAL tidb_ddl_batch_size = 1000;
# 设置DDL重试次数
SET GLOBAL tidb_ddl_retry_duration = ’30m’;
# 执行在线索引创建
# 创建普通索引
ALTER TABLE fgedudb.fgedu_users ADD INDEX idx_name (name);
# 创建唯一索引
ALTER TABLE fgedudb.fgedu_users ADD UNIQUE INDEX idx_email (email);
# 创建组合索引
ALTER TABLE fgedudb.fgedu_orders ADD INDEX idx_user_status (user_id, status);
# 创建前缀索引
ALTER TABLE fgedudb.fgedu_users ADD INDEX idx_address (address(100));
3.2 监控与调优
监控在线索引创建:
SHOW DDL JOBS;
# 查看索引创建详情
SHOW DDL JOB QUERIES 1;
# 监控索引创建进度
SELECT * FROM information_schema.tidb_ddl_jobs;
# 调优索引创建性能
# 1. 调整DDL并发度
SET GLOBAL tidb_ddl_concurrency = 2;
# 2. 调整批处理大小
SET GLOBAL tidb_ddl_batch_size = 500;
# 3. 监控系统资源使用
# 在Grafana中查看TiDB -> DDL面板
3.3 故障处理
在线索引创建故障处理:
# index_creation_troubleshooting.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 索引创建故障排查脚本
log_file=”/tidb/logs/index_creation_troubleshooting.log”
log() {
echo “[$(date +’%Y-%m-%d %H:%M:%S’)] $1” >> $log_file
echo “[$(date +’%Y-%m-%d %H:%M:%S’)] $1”
}
# 检查索引创建状态
check_index_creation_status() {
log “检查索引创建状态”
mysql -h 192.168.1.100 -P 4000 -u root -p”password” -e “SHOW DDL JOBS;” >> $log_file
}
# 检查索引创建详情
check_index_creation_detail() {
log “检查索引创建详情”
job_id=$(mysql -h 192.168.1.100 -P 4000 -u root -p”password” -e “SHOW DDL JOBS;” | tail -n 1 | awk ‘{print $1}’)
if [ -n “$job_id” ]; then风哥提示:
mysql -h 192.168.1.100 -P 4000 -u root -p”password” -e “SHOW DDL JOB QUERIES $job_id;” >> $log_file
fi
}
# 取消索引创建
cancel_index_creation() {
log “取消索引创建”
job_id=$(mysql -h 192.168.1.100 -P 4000 -u root -p”password” -e “SHOW DDL JOBS;” | tail -n 1 | awk ‘{print $1}’)
if [ -n “$job_id” ]; then
mysql -h 192.168.1.100 -P 4000 -u root -p”password” -e “CANCEL DDL JOB $job_id;”
log “已取消索引创建 $job_id”
fi
}
# 主函数
main() {
log “索引创建故障排查开始”
check_index_creation_status
check_index_creation_detail
# 如果需要取消索引创建
# cancel_index_creation
log “索引创建故障排查完成”
}
main
Part04-生产案例与实战讲解
4.1 大型表索引创建案例
案例:为大型表创建索引
# 2. 解决方案:
# 调整索引创建参数
SET GLOBAL tidb_ddl_concurrency = 2;
SET GLOBAL tidb_ddl_batch_size = 500;
# 执行在线索引创建
ALTER TABLE fgedudb.fgedu_orders ADD INDEX idx_order_date (order_date);
# 3. 监控索引创建进度
SHOW DDL JOBS;
# 4. 验证索引创建
SHOW INDEX FROM fgedudb.fgedu_orders;
# 5. 效果:索引创建完成,期间不阻塞读写操作
4.2 多索引并行创建案例
案例:并行创建多个索引
# 2. 解决方案:
# 调整DDL并发度
SET GLOBAL tidb_ddl_concurrency = 4;
# 并行执行索引创建
ALTER TABLE fgedudb.fgedu_users ADD INDEX idx_name (name), ADD INDEX idx_email (email), ADD INDEX idx_phone (phone);
# 3. 监控索引创建进度
SELECT * FROM information_schema.tidb_ddl_jobs;
# 4. 验证索引创建
SHOW INDEX FROM fgedudb.fgedu_users;
# 5. 效果:多个索引并行创建,提高效率
4.3 索引优化案例
案例:优化索引结构
# 2. 分析原因:索引设计不合理
# 3. 解决方案:
# 1. 删除无用索引
ALTER TABLE fgedudb.fgedu_users DROP INDEX idx_old;
# 2. 创建合适的索引
ALTER TABLE fgedudb.fgedu_users ADD INDEX idx_name_age (name, age);
# 3. 优化索引列顺序
# 调整索引列顺序,将选择性高的列放在前面
ALTER TABLE fgedudb.fgedu_orders ADD INDEX idx_status_user (status, user_id);
# 4. 效果:查询性能显著提升
更多学习教程公众号风哥教程itpux_com
Part05-风哥经验总结与分享
5.1 在线索引创建最佳实践
学习交流加群风哥QQ113257174
- 在业务低峰期执行索引创建:减少对业务的影响
- 分批创建多个索引:避免一次性创建过多索引
- 监控索引创建进度:及时发现和解决问题
- 合理设置索引创建参数:根据系统资源和数据量调整参数
- 测试环境验证:在测试环境验证索引创建的影响
- 定期维护索引:删除无用索引,优化索引结构
5.2 常见问题与解决方案
- 索引创建速度慢:调整DDL并发度和批处理大小,选择合适的时间窗口
- 索引创建失败:检查错误信息,修复问题后重新执行
- 系统性能下降:在业务低峰期执行索引创建,调整索引创建参数
- 索引创建卡住:检查系统资源使用情况,必要时取消并重新执行
- 索引无效:检查索引设计是否合理,优化索引结构
5.3 未来发展趋势
- 更高效的索引创建算法:减少资源使用,提高执行速度
- 智能索引推荐:根据查询模式自动推荐索引
- 并行索引创建:支持更多类型的索引并行创建
- 索引创建的可视化管理:提供更直观的索引创建管理界面
- 索引自动优化:自动识别和优化索引结构
from tidb视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
