Haoyuan's blog Haoyuan's blog
首页
导航站
  • Java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • Spring Cloud
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
留言区
GitHub (opens new window)

Somnus Haoyuan

Word is cheap, show me the code.
首页
导航站
  • Java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • Spring Cloud
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
留言区
GitHub (opens new window)
  • 关系数据库 - MySQL

    • MySQL - 安装
    • MySQL - 索引介绍
    • MySQL - 逻辑架构简介
    • MySQL - 检测优化SQL
    • MySQL - 索引的使用
    • MySQL - SQL语句优化
    • MySQL - 缓存查询优化
    • MySQL - 内存管理优化
      • 内存优化原则
      • MyISAM 内存优化
      • InnoDB内存优化
    • MySQL - 并发参数优化
    • MySQL - 锁问题
    • MySQL - 常用SQL技巧
    • MySQL - 常用工具
    • MySQL - 日志
    • MySQL - 主从复制
  • 关系数据库 - Oracle

  • 缓存数据库 - Redis

  • 搜索数据库 - ElasticSearch

  • 分布式数据库 - MongoDB

  • 数据库
  • 关系数据库 - MySQL
Haoyuan
2021-10-24
目录

MySQL - 内存管理优化

  • 内存优化原则
  • MyISAM 内存优化
  • InnoDB内存优化

# 内存优化原则

1)将尽量多的内存分配给 MySQL 做缓存,但要给操作系统和其他程序预留足够内存

2)MyISAM 存储引擎的数据文件读取依赖于操作系统自身的 IO 缓存,因此,如果有 MyISAM 表,就要预留更多的内存给操作系统做 IO 缓存

3)排序区、连接区等缓存是分配给每个数据库会话(session)专用的,其默认值的设置要根据最大连接数合理分配,如果设置太大,不但浪费资源,而且在并发连接较高时会导致物理内存耗尽

# MyISAM 内存优化

了解即可,我们平时用的都是 InnoDB。

MyISAM 存储引擎使用 key_buffer 缓存索引块,加速 MyISAM 索引的读写速度。对于 MyISAM 表的数据块,MySQL 没有特别的缓存机制,完全依赖于操作系统的 IO 缓存。

  • key_buffer_size

key_buffer_size 决定 MyISAM 索引块缓存区的大小,直接影响到 MyISAM 表的存取效率。可以在 MySQL 参数文件中设置 key_buffer_size 的值,对于一般 MyISAM 数据库,建议至少将 1/4 可用内存分配给 key_buffer_size。

在 /usr/my.cnf 中做如下配置:

key_buffer_size=512M
1
SHOW VARIABLES LIKE 'key_buffer_size' -- 查看大小
1
  • read_buffer_size:如果需要经常顺序扫描 MyISAM 表,可以通过增大 read_buffer_size 的值来改善性能。但需要注意的是 read_buffer_size 是每个 session 独占的,如果默认值设置太大,就会造成内存浪费

  • read_rnd_buffer_size:对于需要做排序的 MyISAM 表的查询,如带有 order by 子句的 SQL,适当增加 read_rnd_buffer_size 的值,可以改善此类的 SQL 性能。但需要注意的是 read_rnd_buffer_size 是每个 session 独占的,如果默认值设置太大,就会造成内存浪费

# InnoDB内存优化

InnoDB 用一块内存区做 IO 缓存池,该缓存池不仅用来缓存 InnoDB 的索引块,而且也用来缓存 InnoDB 的数据块。

  • innodb_buffer_pool_size:该变量决定了 InnoDB 存储引擎表数据和索引数据的最大缓存区大小。在保证操作系统及其他程序有足够内存可用的情况下,innodb_buffer_pool_size 的值越大,缓存命中率越高,访问 InnoDB 表需要的磁盘 I/O 就越少,性能也就越高
innodb_buffer_pool_size=512M
1
  • innodb_log_buffer_size:决定了 Innodb 重做日志缓存的大小,对于可能产生大量更新记录的大事务,增加 innodb_log_buffer_size 的大小,可以避免 InnoDB 在事务提交前就执行不必要的日志写入磁盘操作
innodb_log_buffer_size=10M
1
编辑此页 (opens new window)
#关系数据库
更新时间: 2025/04/06, 01:04:59
MySQL - 缓存查询优化
MySQL - 并发参数优化

← MySQL - 缓存查询优化 MySQL - 并发参数优化→

最近更新
01
技术随笔 - Element Plus 修改包名 原创
11-02
02
Reactor - 扩展性
11-02
03
Reactor - 最佳实践
11-02
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Somnus Haoyuan | MIT License
京公网安备 11010802034042号 京ICP备2025120692号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式