数据库大纲
目录
1.1 为什么要优化
- 系统的吞吐量瓶颈往往出现在数据库的访问速度上
- 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢
- 数据是存放在磁盘上的,读写速度无法和内存相比
1.2 数据库结构优化
- 设计数据库时:数据库表、字段的设计,存储引擎
- 利用好MySQL自身提供的功能,如索引等
- 横向扩展:MySQL集群、负载均衡、读写分离
- SQL语句的优化
1.3 MySQL数据库cpu飙升到500%的话他怎么处理呢?
使用mysql命令: show processlist;
看看里面跑的 session 情况,是不是有消耗资源的 sql 在运行。找出消耗高的 sql,看看执行计划是否准确, index 是否缺失,或者实在是数据量太大造成。
一般来说,肯定要 kill 掉这些线程(同时观察 cpu 使用率是否下降),等进行相应的调整(比如说加索引、改 sql、改内存参数)之后,再重新跑这些 SQL。
也有可能是每个 sql 消耗资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等
1.4大表怎么优化?某个表有近千万数据,CRUD比较慢,如何优化?分库分表了是怎么做的?分表分库了有什么问题?有用到中间件么?他们的原理知道么?
大表的优化思路:
- 优化sql和表索引
- 添加缓存 redis,mencache
- 对数据库做主从复制,主从分离(mycat 主库写,从库读)
某个表有近千万数据,CRUD比较慢,如何优化:
1.4.1垂直分表
适用场景
缺点
1.4.2 水平分表:
适用场景
水平切分的缺点
1.5 MySQL的复制原理以及流程
1.6读写分离有哪些解决方案?
1.7 备份计划,mysqldump以及xtranbackup的实现原理
1.8 数据表损坏的修复方式有哪些?
参考博客: https://zhuanlan.zhihu.com/p/106061137
参考博客: https://blog.csdn.net/lxw1844912514/article/details/105298019
二 Redis
1.Redis的应用场景
2.redis的集群方案