MySql数据库优化方法
当数据库中存放大量数据或者需要提升数据库性能时我们该怎么做
- 首先我们看看可以从哪些方面优化数据库,然后解决对应的问题
- 架构优化
- 硬件优化
- DB优化
- sql优化
- 越往上优化越明显,接下来我们来看具体该怎么操作
架构优化
架构优化常见的优化手段有:分布式缓存,读写分离,分库分表等
1. 分布式缓存 我们可以在应用与数据库之间引入一个缓存服务,比如redis。当我们接收到查询请求之后,会先访问缓存里是否有数据,如果没有就从数据库加载到缓存中,如果有就直接返回 2. 读写分离 如果应用的读取多,写入少那我们可以采用读写分离 主库处理写操作,多个从库处理读操作。主库与从库的数据要实时同步 3. 分库分表 把一个库水平切分成两个库可以降低数据库单库容量,提升数据库写性能
方法 实施方式 作用 使用场景 分布式缓存 引入redis缓存 减少数据库访问,加快读操作 高并发,数据量大 读写分离 主库处理写,从库处理读 分摊读压力,提高并发能力 提高数据库读性能 分库分表 水平切分,垂直切分 减少单表数据量 数据库数据量大的问题
硬件优化
- 硬件优化 非常直接的解决方案,我们来看一下最直接的存储设备的对比
名称 | 速率 | 价格 |
---|---|---|
机械硬盘 | 100mb/s~200mb/s | 还行 |
固态硬盘 | 800mb/s~1024mb/s | 贵 |
PCIE固态硬盘 | 11800mb/s~12400mb/s | 好贵 |
- 当然以上速率数据只是理论,实际上会更快/慢一点,硬件优化不单单指优化储存设备,服务器整体的升级也很重要
DB优化(数据库配置)
- 日志 平衡性能
- 缓存 减少磁盘I/O
- 连接 提高并发处理能力
mysql根目录的配置文件
[mysqld]
# 内存管理
innodb_buffer_pool_size = 64G # 物理内存70-80%
innodb_log_file_size = 4G # 日志文件大小
innodb_log_buffer_size = 256M # 日志缓冲区
# I/O优化
innodb_io_capacity = 20000 # SSD配置
innodb_flush_method = O_DIRECT # 避免双缓冲
# 连接管理
max_connections = 1000 # 最大连接数
thread_cache_size = 100 # 线程缓存
# 查询优化
innodb_stats_on_metadata = OFF # 避免统计信息更新影响
sql优化
- 给查询字段添加索引或者改写sql提高其执行效率
- 索引优化
- 查询重构
- 分页优化
当然理论与实际之间有所区别,当实际解决数据库优化问题时应当灵活选择解决方案