数据库优化 - 实例优化

  • 优化之前一定要深入了解数据库内部原理 优化是有“套路”的,照着这些“套路”你也可以很好的完成数据库优化

  • 不断调整数据库参数就可以最终实现优化 有时候设计不合理怎么调整参数都不行

  • 不断调整操作系统参数就可以最终实现优化 同上

  • 数据库性能由应用、数据库架构决定,与应用开发关系不大 恰恰相反,应用开发的关系很大

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

数据库优化流程

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

640?wx_fmt=png

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

数据库实例优化


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

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

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

  • 加一层缓存结构Buffer,将每次写优化成批量写

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

数据库参数优化

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

  • 数据缓存

  • SQL解析区

  • 排序内存

  • REDO及UNDO

  • 锁、LATCH、MUTEX

  • 监听及连接

  • 文件读写性能

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

ORACLE

| 参数分类 | 参数名 | 参数值 | 备注 |

| — | — | — | — |

| 数据缓存 | 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 | 软软解析 |

MYSQL(INNODB)

| 参数分类 | 参数名 | 参数值 | 备注 |

| — | — | — | — |

| 数据缓存 | INNODB_BUFFER_POOL_SIZE | 物理内存50-80% | 一般来说越大性能越好 |

| 日志相关 | Innodb_log_buffer_size | 16-32M | 根据运行情况调整 |

| 日志相关 | sync_binlog | 1、100、0 | 1安全性最好 |

| 监听及连接 | max_connections | 根据业务情况调整 | 可以预留一部分值 |

| 文件读写性能 | innodb_flush_log_at_trx_commit | 2 | 安全和性能的折中考虑 |

| 其他 | wait_timeout,interactive_timeout | 28800 | 避免应用连接定时中断 |

POSTGRES

| 参数分类 | 参数名 | 参数值 | 备注 |

| — | — | — | — |

| 数据缓存 | 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% |

总结
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

读者福利

分享一份自己整理好的Java面试手册,还有一些面试题pdf

不要停下自己学习的脚步

字节跳动的面试分享,为了拿下这个offer鬼知道我经历了什么

字节跳动的面试分享,为了拿下这个offer鬼知道我经历了什么

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
停下自己学习的脚步**

[外链图片转存中…(img-Y04JyoNg-1713710550259)]

[外链图片转存中…(img-sgzDnqMi-1713710550260)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值