数据库优化 - 实例优化

从网上去搜数据库优化基本都是从SQL层次进行优化的,不多有说起到数据库自己的实例优化。就算有也都是基于某个特定数据库的实例优化,本文涵盖目前市面上全部主流数据库的实例优化(Oralce、MySQL、POSTGRES、达梦),按照文章的配置可以将你数据库性能用到80%或以上。数据库

数据库优化方法论

这部分为理论知识,不感兴趣的同窗能够直接跳到后面参数配置部分。缓存

数据库优化目标

目标

根据角色的不一样,数据库优化分为如下几个目标:安全

  • 业务角度(关键用户):
    减小用户页面响应时间
  • 数据库角度(开发):
    减小数据库SQL响应时间
  • 数据库服务器角度(运维):
    充分使用数据库服务器物理资源
    减小数据库服务器CPU使用率
    减小数据库服务器IO使用率
    减小数据库服务器内存使用率

指标

  • SQL平均响应时间变短
    • 优化前:数据库平均响应时间500ms
    • 优化目标:数据库平均响应时间200ms
  • 数据库服务器CPU占用率变少
    • 优化前:数据库高峰期CPU使用率70%
    • 优化目标:数据库高峰期CPU使用率50%
  • 数据库服务器IO使用率变低
    • 优化前:数据库IO WAIT为30%
    • 优化目标:数据库IO WAIT低于10%

数据库优化误区

在进行数据库优化的时候可能会有如下几个误区:服务器

  • 优化以前必定要深刻了解数据库内部原理
    优化是有“套路”的,照着这些“套路”你也能够很好的完成数据库优化
  • 不断调整数据库参数就能够最终实现优化
    有时候设计不合理怎么调整参数都不行
  • 不断调整操做系统参数就能够最终实现优化
    同上
  • 数据库性能由应用、数据库架构决定,与应用开发关系不大
    偏偏相反,应用开发的关系很大
  • 必需要作读写分离,必需要弄分库分表
    数据量级只有达到必定的比例才有必要作读写分离,分表分库,不然徒增复杂度。通常来讲Oracle的单表量级能够达到1亿,MySQL到1000万~2000万

数据库优化流程

完整的数据库优化流程以下:微信

file

首先须要尽量的了解优化问题,收集问题期间系统信息并作好存档。根据当前系统问题表现制定优化目标并与客户沟通目标达成一致;经过一系列工具分析系统问题,制定优化方案,方案评审完成后由各负责人员进行实施。若达到优化目标则编写优化报告,不然须要从新制定优化方案。session


数据库实例优化

数据库实例优化遵循三句口诀:日志不能小、缓存足够大、链接要够用。架构

数据库事务提交后须要将事务对数据页的修改刷( fsync)到磁盘上,才能保证数据的持久性。这个刷盘,是一个随机写,性能较低,若是每次事务提交都要刷盘,会极大影响数据库的性能。数据库在架构设计中都会采用以下两个优化手法:运维

  • 先将事务写到日志文件RedoLog(WAL),将随机写优化成顺序写
  • 加一层缓存结构Buffer,将每次写优化成顺序写

因此日志跟缓存对数据库实例尤为重要。而链接若是不够用,数据库会直接抛出异常,系统没法访问。工具

数据库参数优化

主流数据库架构都有以下的共同点:性能

  • 数据缓存
  • SQL解析区
  • 排序内存
  • REDO及UNDO
  • 锁、LATCH、MUTEX
  • 监听及链接
  • 文件读写性能

接下来咱们根据不一样的数据库调整参数以使数据库达到最佳性能。

ORACLE

参数分类 参数名 参数值 备注
数据缓存 SGATAGET、MEMORYTARGET 物理内存70-80% 越大越好
数据缓存 DBCACHESIZE 物理内存70-80%
越大越好
SQL解析 SHAREDPOOLSIZE
4-16G
不建议设置过大
监听及链接 PROCESSES、SESSIONS、OPEN_CURSORS 根据业务需求设置
通常为业务预估链接数的120%
其余 SESSIONCACHEDCURSORS 大于200
软软解析

MYSQL(INNODB)

参数分类 参数名 参数值 备注
数据缓存 INNODBBUFFERPOOL_SIZE 物理内存50-80% 通常来讲越大性能越好
日志相关 Innodblogbuffer_size 16-32M
根据运行状况调整
日志相关 sync_binlog 一、100、0
1安全性最好
监听及链接 max_connections
根据业务状况调整 能够预留一部分值
文件读写性能 innodbflushlogattrx_commit 2
安全和性能的折中考虑
其余 waittimeout,interactivetimeout 28800
避免应用链接定时中断

POSTGRES

参数分类 参数名 参数值 备注
数据缓存 SHARED_BUFFERS 物理内存10-25%
数据缓存 CACHEBUFFERSIZE 物理内存50-60%
日志相关 wal_buffer 8-64M
不建议设置过大太小
监听及链接 max_connections
根据业务状况调整 通常为业务预估链接数的120%
其余 maintenanceworkmem 512M或更大
其余 work_mem 8-16M
原始配置1M太小
其余 checkpoint_segments 32或者更大

达梦数据库

参数分类 参数名 参数值 备注
数据缓存 MEMROYTARGET、MEMROYPOOL 物理内存90%
数据缓存 BUFFER 物理内存60%
数据缓存
数据缓存 MAX_BUFFER 物理内存70%
最大数据缓存
监听及链接 max_sessions
根据业务需求设置 通常为业务预估链接数的120%

总结

数据库的优化手法太多太多,有换磁盘阵列升级硬件,有改写SQL脚本添加索引,还有数据库参数调整优化性能,甚至还能够调整数据库架构。本文从数据库自己参数进行调优,你们根据上面几张表中的参数进行调整基本能达到数据库最佳性能的80%。

获取更多内容请关注公众号:JAVA日知录

微信公众号

相关文章
相关标签/搜索