Mysql数据库管理-Innodb 内存优化分析

MySql数据库内存分析优化

1 Innodb重做日志

redo log是Innodb保障事务ACID属性的重要机制。工作原理图如下:

2 增加缓冲池数量,减少内部对缓冲池结构争用。

mysql内部线程对innodb缓存池的访问在某个阶段是互斥的,这种内部竞争也会产生性能问题,尤其是在高并发和buffer pool较大的情况下,为了解决这个问题,innodb的缓存系统引入参数。

参数:

innodb_buffer_pool_instances,

对于较大的缓冲池,适当的增加此参数值,可以降低并发导致内部缓存访问冲突,改善性能,innodb_buffer_pool_size指定大小的缓存平分为innodb_buffer_pool_instances个buffer pool

3 控制innodb buffer刷新,延长数据缓存时间,减缓磁盘IO

在innodb找不到干净的可用缓存页或者检查点被触发的情况下,innodb的后台线程开始吧“脏的缓存页回写到磁盘中”这个过程叫做缓存刷新。
我们通常希望buffer pool中的数据在缓存中保留的时间尽可能长,以备重用,从而减少IO的次数。延缓缓存刷新来减少IO压力。

Innodb buffer pool的刷新快慢主要取决于2个参数

innodb_max_dirty_pages_pct

innodb_io_capacity

02:45:  [(none)]> show variables like '%innodb_max_dirty%';
+--------------------------------+-----------+
| Variable_name                  | Value     |
+--------------------------------+-----------+
| innodb_max_dirty_pages_pct     | 90.000000 |
| innodb_max_dirty_pages_pct_lwm | 10.000000 |
+--------------------------------+-----------+
2 rows in set (0.01 sec)

02:45:  [(none)]> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.34    |
+-----------+
1 row in set (0.00 sec)

02:46:  [(none)]>

如果状态变量innodb_buffer_pool_wait_free的值增长较快,则说明Innodb经常在等待空闲缓冲页,如果无法增大缓冲池,那么应该将 innodb_max_dirty_pages_pct  调整小或者增加innodb_io_capacity值。

02:47:  [(none)]> show status like '%innodb_buffer_pool_wait_free%';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| Innodb_buffer_pool_wait_free | 0     |
+------------------------------+-------+
1 row in set (0.00 sec)

02:49:  [(none)]> 

4 调整用户服务线程排序缓存区

       如果通过 show global status 看到 sort_merge_passes 的值很大,可以考虑通过调整参数sort_buffer_size的值来增大排序缓存区,以改善带有 order by子句或group子句SQL的性能。


       对于无法通过索引进行连接操作的查询,可以尝试通过增大,join_buffer_size的值来改善性能。不过需要注意的是,sort buffer和 join buffer都是面向客户服务线程分配的,如果设置过大可能造成内存浪费,甚至导致内存交换。尤其是 join buffer,如果是多表关联的复杂查询,还可能会分配多个 join buffer,因此最好的策略是设置较小的全局 join_buffer_size,而对需要做复杂连接操作的session单独设置较大的join_buffer_size。

set global join_buffer_size=1000

set session join_buffer_size=100000

2 优化mysql并发

1 max_connections

\s

如果状态变量connection_errors_max_connections不为0,并且一直在增长就说明不断有连接请求因为数据库连接数达到上限而失败,每个连接都有自己独立的sort_buffer_size和join_buffer_size值。

show status like '%max_connection%';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/137310.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu从源码编译gdal

删除旧版本 sudo apt remove libgdal* sudo apt remove gdal* sudo apt autoremove下载geos、proj和gdal https://github.com/libgeos/geos/releases 这里使用的是3.12.1版本: https://github.com/OSGeo/PROJ/releases 这里使用的是9.3.0版本: ht…

网络渗透测试(TCP/IP)理论篇

TCP/IP体系 垂直服务:底层为高层服务 TCP/IP体系结构是一个分层的协议体系,由多个层次组成,每个层次都负责不同的功能。以下是TCP/IP体系结构的主要层次: 物理层(Physical Layer):该层负责传输…

Ubuntu20.04 安装微信 【wine方式安装】推荐

安装步骤: 第一步:安装 WineHQ 安装包 先安装wine,根据官网指导安装即可。下载 - WineHQ Wikihttps://wiki.winehq.org/Download_zhcn 如果您之前安装过来自其他仓库的 Wine 安装包,请在尝试安装 WineHQ 安装包之前删除它及依赖它的所有安装包(如:wine-mono、wine-gec…

JAVA小游戏 “拼图”

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下: package heima;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav…

开源集群管理系统对比分析:Kubernetes 与 Apache Mesos

集群管理系统是关键的软件解决方案,可以在互连机器网络中有效分配和利用计算资源。毫无疑问,它们通过确保可扩展性、高可用性和有效的资源管理在现代计算中发挥着至关重要的作用,这使得它们对于运行复杂的应用程序、管理数据中心以及进一步增…

Run Legends将健身运动游戏化,使用户保持健康并了解Web3游戏

最近,我们有机会采访Talofa Games的首席执行官兼创始人Jenny Xu,一起讨论游戏开发,Talofa Games是Run Legends这款健身游戏的开发工作室。她已经创作了超过一百款游戏,对于推动游戏的可能性并将她的创造力和叙事技巧带入她最喜爱的…

【Java系列】SpringBoot 集成MongoDB 详细介绍

目录 写在前面 一、步骤介绍 步骤 1: 添加 MongoDB 依赖 步骤 2: 配置 MongoDB 连接信息 步骤 3: 创建实体类 步骤 4: 创建 Repository 接口 步骤 5: 使用 Repository 进行操作 二、特殊处理 写在前面 在Spring Boot中集成MongoDB的过程相对简单,以下是一个…

参与活动如何进行地区的限制

对活动地区限制分为两步:一是管理端配置,而是移动端限制 移动端限制 使用高德获取经纬度(需要引入高德库:https://webapi.amap.com/maps),如果是app也可以调用jsapi获取经纬度 export const checkAppPermis…

php字符串处理函数的使用

php字符串处理函数的使用 trim() trim()函数的功能用于去除字符串首尾的空白字符(包括空格、制表符、换行符等&#xff09;。它可以用于清理用户输入的数据或去除字符串中的多余空格。 <?php $char" holle world! ";echo trim($char) ?>str_repl…

CMake 判断操作系统类型

上回的CMakeLists.txt里面有一句,if (WIN32)......endif(WIN32); 根据资料,这是判断操作系统是否是Windows; 下面单独看一下; 一个CMakeLists.txt文件如下; if(WIN32)# 如果是 Windowsmessage("当前操作系统为 Windows") elseif(UNIX AND NOT APPLE)# 如果…

git基本操作(配图超详细讲解)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 创建git本地仓库 配置仓库 认识工作区&#xff0c;暂存区&#xff0c;版本库 修改文件 版本回退 撤销修改 删除文件 创建git本地仓库 要提前说的是&#xff0c;仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂…

重磅解读 | 阿里云 云网络领域关键技术创新

云布道师 10 月 31 日&#xff0c;杭州云栖大会&#xff0c;阿里云技术主论坛带来了一场关于阿里云主力产品与技术创新的深度解读&#xff0c;阿里云网络产品线负责人祝顺民带来《云智创新&#xff0c;网络随行》的主题发言&#xff0c;针对阿里云飞天洛神云网络&#xff08;下…

入行IC | 从小白助理级,到总监专家级,到底要经历怎样的成长阶段呢?

《中国集成电路产业人才发展报告》是业内和IC设计、IC人才都息息相关的一份报告。 &#xff08;文末可领全部报告资料&#xff09; * 从报告数据来看&#xff0c;无论在半导体产业的哪个环节&#xff0c;个人发展路径和年薪待遇都是逐级攀升的趋势。 那么从小白助理级&a…

卷积神经网络(VGG-19)灵笼人物识别

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集5. 归一化 三、构建VGG-19网络1. 官方模型&#xff08;已打包好&#xff…

docker通过挂载conf文件启动redis

初衷&#xff1a;之前直接在启动脚本中没有挂载配置文件&#xff0c;并且直接设置了密码等&#xff0c;后续要使用集群&#xff0c;苦于无法修改配置&#xff0c;进入redis容器也找不到redis.conf&#xff0c;所以写这个文章用来使用redis的配置&#xff0c;来达到后续都可动态…

掌握深度学习利器——TensorFlow 2.x实战应用与进阶

掌握深度学习利器——TensorFlow 2.x实战应用与进阶 摘要&#xff1a;随着人工智能技术的飞速发展&#xff0c;深度学习已成为当下最热门的领域之一。作为深度学习领域的重要工具&#xff0c;TensorFlow 2.x 备受关注。本文将通过介绍TensorFlow 2.x的基本概念和特性&#xff…

Java语言的特点||运算符

Java语言的特点||运算符 1&#xff1a;2&#xff1a;JDK, JRE&#xff0c;JVM知识&#xff1a;3&#xff1a;注释4&#xff1a;标识符5&#xff1a; Java编译过程&#xff1a;6&#xff1a;赋值7&#xff1a;switch8:布尔表达式9&#xff1a;判定素数10&#xff1a;打印 1 - 10…

stack和queue简单实现(容器适配器)

容器适配器 stack介绍stack模拟实现queue 介绍queue模拟实现deque stack介绍 stack模拟实现 以前我们实现stack&#xff0c;需要像list,vector一样手动创建成员函数&#xff0c;成员变量。但是stack作为容器适配器&#xff0c;我们有更简单的方法来实现它。 可以利用模板的强大…

代码随想录二刷 | 链表 | 翻转链表

代码随想录二刷 &#xff5c; 链表 &#xff5c; 翻转链表 题目描述解题思路 & 代码实现双指针法递归法 206.翻转链表 题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4…

kolla 安装多节点openstack kolla部署openstack

Kolla 概述&#xff1a; Kolla是OpenStack下用于自动化部署的一个项目&#xff0c;它基于docker和ansible来实现&#xff0c;其中docker主要负责镜像制作和容器管理&#xff0c;ansible主要负责环境的部署和管理。Kolla实际上分为两部分&#xff1a;Kolla部分提供了生产环境级…
最新文章