1. 数据库失败原因排查
-
硬件问题:磁盘损坏、内存故障、网络中断。
-
配置错误:参数设置不合理(如
max_connections
过小)。 -
应用层问题:低效 SQL 导致锁冲突或资源耗尽。
2. 查看 InnoDB 表空间大小
-
方法1:
SELECT * FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME LIKE '%.ibd';
-
方法2:直接查看文件系统(如
ls -lh /var/lib/mysql/mydb/*.ibd
)。
3. 纵向扩展 vs 横向扩展
-
纵向扩展:升级单机硬件(如 CPU、内存),适合小规模负载。
-
横向扩展:通过集群分散负载(如分片、主从复制),适合高并发场景。
4. 数据库性能问题排查步骤
-
检查近期配置变更。
-
分析慢查询日志。
-
监控系统资源(CPU、内存、磁盘 I/O)。
-
使用
EXPLAIN
分析 SQL 执行计划。 -
对比历史性能数据。
5. InnoDB 锁机制
-
行级锁:仅锁定被修改的行,其他行可读写。
-
共享锁(S锁):允许读,阻止写。
-
排他锁(X锁):阻止其他事务读写。
6. 查看锁冲突
-
方法1:
SHOW ENGINE INNODB STATUS;
(查看LATEST DETECTED DEADLOCK
)。 -
方法2:查询
sys.innodb_lock_waits
视图。
7. InnoDB 宕机恢复方法
-
自动恢复:InnoDB 通过 Redo Log 自动恢复未提交事务。
-
手动恢复:从备份文件还原数据。
-
强制恢复模式:
mysqld --innodb_force_recovery=3
8. EXPLAIN 语句作用
-
功能:显示 SQL 执行计划,分析索引使用情况。
-
示例:
EXPLAIN SELECT * FROM users WHERE age > 30;
输出中的
key
列显示使用的索引。
9. 索引的优势
-
减少磁盘 I/O:索引通过 B+ 树结构快速定位数据。
-
加速排序:
ORDER BY
和GROUP BY
操作更高效。 -
避免全表扫描:显著降低查询时间。
10. 索引统计信息维护
-
自动更新:当表数据变化超过 10% 时触发。
-
手动更新:
ANALYZE TABLE users;
11. mysqlcheck 功能
-
检查表:
mysqlcheck --check mydb
。 -
优化表:
mysqlcheck --optimize mydb
。 -
修复表:
mysqlcheck --repair mydb
(仅 MyISAM)。
12. 隐形索引(Invisible Indexes)
-
作用:临时禁用索引,测试删除索引对性能的影响。
-
操作:
ALTER TABLE users ALTER INDEX idx_email INVISIBLE;
13. 直方图(Histograms)
-
作用:优化非索引列的查询性能。
-
示例:
ANALYZE TABLE users UPDATE HISTOGRAM ON age;
14. 备份类型对比
类型 | 特点 |
---|---|
热备 | 不中断服务(如 InnoDB 在线备份)。 |
温备 | 允许读,禁止写(如 mysqldump )。 |
冷备 | 关闭服务后备份(数据一致性最高)。 |