侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

实例讲解数据库优化

数据库  /  管理员 发布于 6年前   181

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

数据库优化方法论

这部分为理论知识,不感兴趣的同学可以直接跳到后面参数配置部分。

数据库优化目标

推荐 《mysql视频教程》

根据角色的不同,数据库优化分为以下几个目标:

业务角度(关键用户):

减少用户页面响应时间

数据库角度(开发):

减少数据库SQL响应时间

数据库服务器角度(运维):

充分使用数据库服务器物理资源

减少数据库服务器CPU使用率

减少数据库服务器IO使用率

减少数据库服务器内存使用率

指标

1. SQL平均响应时间变短

a. 优化前:数据库平均响应时间500ms

b. 优化目标:数据库平均响应时间200ms

2. 数据库服务器CPU占用率变少

a. 优化前:数据库高峰期CPU使用率70%

b. 优化目标:数据库高峰期CPU使用率50%

3. 数据库服务器IO使用率变低

a. 优化前:数据库IO WAIT为30%

b. 优化目标:数据库IO WAIT低于10%

数据库优化误区

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

1. 优化之前一定要深入了解数据库内部原理

优化是有“套路”的,照着这些“套路”你也可以很好的完成数据库优化

2. 不断调整数据库参数就可以最终实现优化

有时候设计不合理怎么调整参数都不行

3. 不断调整操作系统参数就可以最终实现优化

同上

4. 数据库性能由应用、数据库架构决定,与应用开发关系不大

恰恰相反,应用开发的关系很大

5. 必须要做读写分离,必须要弄分库分表

数据量级只有达到一定的比例才有必要做读写分离,分表分库,否则徒增复杂度。一般来说Oracle的单表量级可以达到1亿,MySQL到1000万~2000万

数据库优化流程

完整的数据库优化流程如下:

file

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

数据库实例优化

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

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

a. 先将事务写到日志文件RedoLog(WAL),将随机写优化成顺序写

b. 加一层缓存结构Buffer,将每次写优化成顺序写

所以日志跟缓存对数据库实例尤其重要。而连接如果不够用,数据库会直接抛出异常,系统无法访问。

数据库参数优化

主流数据库架构都有如下的共同点:

数据缓存

SQL解析区

排序内存

REDO及UNDO

锁、LATCH、MUTEX

监听及连接

文件读写性能

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

ORACLE

参数分类参数名参数值备注
数据缓存SGA_TAGET、MEMORY_TARGET物理内存70-80%越大越好
数据缓存DB_CACHE_SIZE物理内存70-80%越大越好
SQL解析SHARED_POOL_SIZE4-16G不建议设置过大
监听及连接PROCESSES、SESSIONS、OPEN_CURSORS根据业务需求设置一般为业务预估连接数的120%
其他SESSION_CACHED_CURSORS大于200软软解析

MYSQL(INNODB)

参数分类参数名参数值备注
数据缓存INNODB_BUFFER_POOL_SIZE物理内存50-80%一般来说越大性能越好
日志相关Innodb_log_buffer_size16-32M根据运行情况调整
日志相关sync_binlog1、100、01安全性最好
监听及连接max_connections根据业务情况调整可以预留一部分值
文件读写性能innodb_flush_log_at_trx_commit2安全和性能的折中考虑
其他wait_timeout,interactive_timeout28800避免应用连接定时中断

POSTGRES

参数分类参数名参数值备注
数据缓存SHARED_BUFFERS物理内存10-25%
数据缓存CACHE_BUFFER_SIZE物理内存50-60%
日志相关wal_buffer8-64M不建议设置过大过小
监听及连接max_connections根据业务情况调整一般为业务预估连接数的120%
其他maintenance_work_mem512M或更大
其他work_mem8-16M原始配置1M过小
其他checkpoint_segments32或者更大

达梦数据库

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

总结

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

本文来自,mysql教程栏目,欢迎学习!

以上就是实例讲解数据库优化的详细内容,更多请关注其它相关文章!


  • 上一条:
    Oracle如何创建自增长主键
    下一条:
    浅谈mysql清空表数据的两种方式和区别
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客