从网上去搜数据库优化基本都是从SQL层次进行优化的,不多有说起到数据库自己的实例优化。就算有也都是基于某个特定数据库的实例优化,本文涵盖目前市面上全部主流数据库的实例优化(Oralce、MySQL、POSTGRES、达梦),按照文章的配置可以将你数据库性能用到80%或以上。数据库
这部分为理论知识,不感兴趣的同窗能够直接跳到后面参数配置部分。缓存
根据角色的不一样,数据库优化分为如下几个目标:安全
在进行数据库优化的时候可能会有如下几个误区:服务器
完整的数据库优化流程以下:session
首先须要尽量的了解优化问题,收集问题期间系统信息并作好存档。根据当前系统问题表现制定优化目标并与客户沟通目标达成一致;经过一系列工具分析系统问题,制定优化方案,方案评审完成后由各负责人员进行实施。若达到优化目标则编写优化报告,不然须要从新制定优化方案。架构
数据库实例优化遵循三句口诀:日志不能小、缓存足够大、链接要够用。运维
数据库事务提交后须要将事务对数据页的修改刷( fsync)到磁盘上,才能保证数据的持久性。这个刷盘,是一个随机写,性能较低,若是每次事务提交都要刷盘,会极大影响数据库的性能。数据库在架构设计中都会采用以下两个优化手法:工具
因此日志跟缓存对数据库实例尤为重要。而链接若是不够用,数据库会直接抛出异常,系统没法访问。性能
主流数据库架构都有以下的共同点:大数据
接下来咱们根据不一样的数据库调整参数以使数据库达到最佳性能。
参数分类 | 参数名 | 参数值 | 备注 |
---|---|---|---|
数据缓存 | SGA_TAGET、MEMORY_TARGET | 物理内存70-80% | 越大越好 |
数据缓存 | DB_CACHE_SIZE | 物理内存70-80% | 越大越好 |
SQL解析 | SHARED_POOL_SIZE | 4-16G | 不建议设置过大 |
监听及链接 | PROCESSES、SESSIONS、OPEN_CURSORS | 根据业务需求设置 | 通常为业务预估链接数的120% |
其余 | SESSION_CACHED_CURSORS | 大于200 | 软软解析 |
参数分类 | 参数名 | 参数值 | 备注 |
---|---|---|---|
数据缓存 | INNODB_BUFFER_POOL_SIZE | 物理内存50-80% | 通常来讲越大性能越好 |
日志相关 | Innodb_log_buffer_size | 16-32M | 根据运行状况调整 |
日志相关 | sync_binlog | 一、100、0 | 1安全性最好 |
监听及链接 | max_connections | 根据业务状况调整 | 能够预留一部分值 |
文件读写性能 | innodb_flush_log_at_trx_commit | 2 | 安全和性能的折中考虑 |
其余 | wait_timeout,interactive_timeout | 28800 | 避免应用链接定时中断 |
参数分类 | 参数名 | 参数值 | 备注 |
---|---|---|---|
数据缓存 | SHARED_BUFFERS | 物理内存10-25% | |
数据缓存 | CACHE_BUFFER_SIZE | 物理内存50-60% | |
日志相关 | wal_buffer | 8-64M | 不建议设置过大太小 |
监听及链接 | max_connections | 根据业务状况调整 | 通常为业务预估链接数的120% |
其余 | maintenance_work_mem | 512M或更大 | |
其余 | work_mem | 8-16M | 原始配置1M太小 |
其余 | checkpoint_segments | 32或者更大 |
参数分类 | 参数名 | 参数值 | 备注 |
---|---|---|---|
数据缓存 | MEMROY_TARGET、MEMROY_POOL | 物理内存90% | |
数据缓存 | BUFFER | 物理内存60% | 数据缓存 |
数据缓存 | MAX_BUFFER | 物理内存70% | 最大数据缓存 |
监听及链接 | max_sessions | 根据业务需求设置 | 通常为业务预估链接数的120% |
数据库的优化手法太多太多,有换磁盘阵列升级硬件,有改写SQL脚本添加索引,还有数据库参数调整优化性能,甚至还能够调整数据库架构。本文从数据库自己参数进行调优,你们根据上面几张表中的参数进行调整基本能达到数据库最佳性能的80%。
欢迎关注个人我的公众号:JAVA日知录