1. MySQL
1.1 为什么要优化
—— 因为需要根据使用场景,选择最合适自己的组合配置。例如:虽然Myisam存储引擎在5.5之后不再是默认存储引擎,但是如果结合到当前需求,对高并发和事务上不做要求的情况下,Myisam也是更优于Innodb的选择。
1.2 数据库结构优化
—— 合理范式化设计; 选择适合的存储引擎; 规范数据库、表及字段的命名规范; 使用适合的数据类型;
1.3 MySQL数据库cpu飙升到500%处理
—— 进入数据库,使用 show processlist; 确认当前正在运行线程状态,结合场景是否可以杀掉线程进行对应处理。
1.4大表怎么优化?某个表有近千万数据,CRUD比较慢,如何优化?分库分表了是怎么做的?分表分库了有什么问题?有用到中间件么?他们的原理知道么?
—— 服务器升配、数据库结构优化、Sql语句优化、读写分离、分库分表。
—— 把单个库或单个表拆分为多库多表。多表查询、事务问题。中间件:Mycat、cobar、atlas。
1.4.1 垂直分表:基于列进行切分,将部分字段拆分到扩展表。
适用场景:多字段情况下
缺点:事务问题,没有解决单表数据量大的问题。
1.4.2 水平分表:基于行进行切分,将部分数据拆分到扩展表。
适用场景:单表数据量过大
缺点:关联查询问题
1.5 MySQL的复制原理以及流程
——master节点将变更写入binlog并发送给从库;从库I/O线程读取binlog内容写入到relay log。Sql线程读取、执行更新。
1.6 读写分离有哪些解决方案?
——mysql-proxy等
1.7 备份计划,mysqldump以及xtranbackup的实现原理
——mysqldump:逻辑备份,直接生成Sql语句,执行Sql恢复备份。
——xtrabackup:物理备份,复制相关文件。
1.8 数据表损坏的修复方式有哪些?
——mysqlcheck,myisamchk等
2. Redis
2.1 Redis的应用场景
——session共享、热点缓存、计数、消息队列等
2.2 redis的集群方案
- List item
——主从复制、哨兵模式、集群、扩展集群codis、twemproxy