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咔咔一段操作后就好了。第2次反应是主数据库内存溢出,导致的写入反常。项目生产上的事务一切写入都无法操作,大约继续10多分钟,DM帮助处理,可是扩容需求找领导请求,DM先帮助整理了buff/cache的东西,释放了18G。其实从字面上看buff/cache便是读、写的缓存。毛病是其他搭档在处理的,写此文章仅仅学习了解下buff/cache
登录到数据库布置的机器上
```Java
free 以KB为单位显现
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-缓冲池-官方文档
缓冲池是主内存中的一个区域,用于 InnoDB缓存拜访的表和索引数据。缓冲池答应直接从内存拜访常用数据,然后加速处理速度。在专用服务器上,一般最多有 80% 的物理内存分配给缓冲池。
为了进步大容量读取操作的功率,缓冲池被划分为可包容多行的页面。为了进步缓存办理的功率,缓冲池被实现为页面的链接列表;运用最近最少运用 (LRU) 算法的变体将很少运用的数据从缓存中筛选。
知道怎么使用缓冲池将常常拜访的数据保存在内存中是 MySQL 调优的一个重要方面。
附上mysql8.4版别的开发文档网址:https://dev.mysql.com/doc/
Buffer Pool 直接对应 MySQL 内部的 buff,这是 InnoDB 引擎用来缓存数据页和索引页的内存区域。
Operating System Cache 对应操作体系层面的 cache,这是操作体系为文件 I/O 供给的缓存机制,但在 InnoDB 中经过O_DIRECT 绕过操作体系缓存以优化功能。