ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL数据库写入异常,主库内存溢出,扩容+清理buff/cach!很开门 [打印本页]

作者: 种地    时间: 2024-12-6 15:07
标题: MySQL数据库写入异常,主库内存溢出,扩容+清理buff/cach!很开门
MySQL数据库写入异常,主库内存溢出,扩容+清理buff/cach!很开门
最近数据出现了两次写入异常报错如下:org.springframework,jdbc.UncategorizedsQlException: PreparedstatementCallback; uncategzed 50LExcention [sql语句] The MysOl server is running with the --read-only option so it cannot execute this......
第一次不知道是什么原因,DM咔咔一段操作后就好了。第二次反馈是主数据库内存溢出,导致的写入异常。项目生产上的业务所有写入都无法操作,大概连续10多分钟,DM帮忙处理,但是扩容需要找领导申请,DM先帮忙清理了buff/cache的东西,释放了18G。其实从字面上看buff/cache就是读、写的缓存。故障是其他同事在处理的,写此文章只是学习相识下buff/cache
  1. 登录到数据库部署的机器上
  2. ```Java
  3. free    以KB为单位显示
  4. free -h 以GB为单位显示
复制代码
第一列
Mem 内存的使用信息
Swap 互换空间的使用信息
第一行
total 体系总的可用物理内存巨细
used 已被使用的物理内存巨细
free 还有多少物理内存可用
shared 被共享使用的物理内存巨细
buff/cache 被 buffer 和 cache 使用的物理内存巨细
available 还可以被 *应用程序* 使用的物理内存巨细
free是真正尚未被使用的物理内存巨细,available是体系使命应用程序可用的物理内存巨细
buff/caahe

buff:针对磁盘写操作的优化,当数据到达时,不会立刻写入磁盘,而是先写入buff缓冲区,当到达写入磁盘的条件时再同一写入磁盘。
cache:针磁盘读操作的优化,当读取数据时,不会立刻从磁盘上读,而是先从cache找,在cache中,直接返回数据,cache中没有再从磁盘读数据,淘汰与磁盘的交互,提高性能。
mysql内部的缓冲池机制

InnoDB 存储引擎管理自己的缓存机制,称为 缓冲池。用于缓存表数据、索引页、插入缓冲等内容。缓冲池巨细通过参数 innodb_buffer_pool_size配置,过小会依赖操作体系的 buff/cache。当 MySQL 和操作体系都需要内存时,内存大概会成为瓶颈。如果 MySQL 配置了较大的缓冲池(innodb_buffer_pool_size),操作体系的 buff/cache 大概淘汰;反之亦然。
下面这段话摘自mysql8.4-缓冲池-官方文档
  1. 缓冲池是主内存中的一个区域,用于 InnoDB缓存访问的表和索引数据。缓冲池允许直接从内存访问常用数据,从而加快处理速度。在专用服务器上,通常最多有 80% 的物理内存分配给缓冲池。
  2. 为了提高大容量读取操作的效率,缓冲池被划分为可容纳多行的页面。为了提高缓存管理的效率,缓冲池被实现为页面的链接列表;使用最近最少使用 (LRU) 算法的变体将很少使用的数据从缓存中淘汰。
  3. 知道如何利用缓冲池将经常访问的数据保存在内存中是 MySQL 调优的一个重要方面。
复制代码

附上mysql8.4版本的开辟文档网址:https://dev.mysql.com/doc/
Buffer Pool 直接对应 MySQL 内部的 buff,这是 InnoDB 引擎用来缓存数据页和索引页的内存地区。
Operating System Cache 对应操作体系层面的 cache,这是操作体系为文件 I/O 提供的缓存机制,但在 InnoDB 中通过O_DIRECT 绕过操作体系缓存以优化性能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4