innodb简单优化

2023-11-01

innodb_flush_log_at_trx_commit, sync_binlog

双1标准
innodb_flush_log_at_trx_commit=1;sync_binlog=1
innodb_flush_log_at_trx_commit
值为0 : 提交事务的时候,不立即把 redo log buffer 里的数据刷入磁盘文件的,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。此时可能你提交事务了,结果 mysql 宕机了,然后此时内存里的数据全部丢失。
值为1 : 提交事务的时候,就必须把 redo log 从内存刷入到磁盘文件里去,只要事务提交成功,那么 redo log 就必然在磁盘里了。注意,因为操作系统的“延迟写”特性,此时的刷入只是写到了操作系统的缓冲区中,因此执行同步操作才能保证一定持久化到了硬盘中。
值为2 : 提交事务的时候,把 redo 日志写入磁盘文件对应的 os cache 缓存里去,而不是直接进入磁盘文件,可能 1 秒后才会把 os cache 里的数据写入到磁盘文件里去。
可以看到,只有1才能真正地保证事务的持久性,但是由于刷新操作 fsync() 是阻塞的,直到完成后才返回,我们知道写磁盘的速度是很慢的,因此 MySQL 的性能会明显地下降。如果不在乎事务丢失,0和2能获得更高的性能。
Mysql官方建议,在允许少量数据丢失的情况下,把该值设置成0或者2

select @@innodb_flush_log_at_trx_commit;
在这里插入图片描述
在这里插入图片描述

sync_binlog

该参数控制着二进制日志写入磁盘的过程。
该参数的有效值为0 、1、N:
0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。
1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。
N:每写N次操作系统缓冲就执行一次刷新操作。
将这个参数设为1以上的数值会提高数据库的性能,但同时会伴随数据丢失的风险。
二进制日志文件涉及到数据的恢复,以及想在主从之间获得最大的一致性,那么应该将该参数设置为1,但同时也会造成一定的性能损耗。

innodb_thread_concurrency

innodb_thread_concurrency是动态参数可以随时修改

  • 64个活跃连接以内直接配0
  • 高压场景需要从高到低测试,找到最优值
  • 高压场景下较低的值可以明显提高写入QPS的占比(高频率的读被限制了)

innodb_thread_sleep_delay(微秒)

  • 定义在开始排队前,等多久加入队列

innodb_adaptive_max_sleep_delay(微秒)

  • 配置innodb_thread_sleep_delay允许的最大值,配了之后innodb会自动调整innodb_thread_sleep_delay的值到一个合适的范围内(自适应算法)

innodb_concurrency_tickets(默认5000)

  • 使用小的值时小事务可以和大事务竞争,缺点是大事务要多次才能跑完
  • 使用大的值时大事务有优势,缺点是可能让小事务一直得不到运行
  • 调整这个值可以参考队列长度,长度从SHOW ENGINE INNODB STATUS来看( ROW OPERATIONS section of SHOW ENGINE INNODB STATUS output),也可以从INFORMATION_SCHEMA.INNODB_TRX的TRX_CONCURRENCY_TICKETS来看。

InnoDB使用操作系统线程来处理用户的事务请求。(在事务提交或回滚之前可能给InnoDB引擎带来很多的请求)。在现代化操作系统和多核处理器的服务器上,上下文切换是非常高效的,大多数工作负载运行没有任何并发线程数量的限制。在MySQL 5.5及以上版本中,MySQL做了可伸缩性的改进,它减少了这种在InnoDB内部限制并发执行线程数量的需要。

它有助于在最小化的情况下进行线程之间的上下文切换,InnoDB可以使用各种技术来限制操作系统并发执行线程的数量(因此大批量的请求可以在任何一个时间得到处理)。当InnoDB从用户会话收到一个新的请求,如果线程并发执行的数量达到预定义的限制,那么新的请求会先睡眠一段时间后再次尝试。在睡眠后不能按计划执行的请求会被放入先入/先出队列,并最终处理。但那些等待获取锁的线程则不会被计入到并发执行线程的数量中。 我们可以通过设置配置参数innodb_thread_concurrency来限制并发线程的数量,一旦执行线程的数量达到这个限制,额外的线程在被放置到对队列中之前,会睡眠数微秒,可以通过设定参数innodb_thread_sleep_delay来配置睡眠时间。

mysql> show status like ‘threads_%’;
基于安全:
Sync_binlog=1/innodb_flush_log_at_trx_commit=1/set sql_log_bin=0/show status like ‘com_%’;
安全参数:innodb_flush_method=o_direct,fsync

  1. fsync:在数据页需要持久化时,首先将数据写入到os buffer中,然后再由os决定什么时候写入磁盘,但是如果innodb_flush_log_at_commit=1的话,日志还是每次commit直接写入磁盘
  2. 最安全模式:innodb_flush_log_at_trx_commit=1/innodb_flush_method=0_DIRECT
  3. 最高性能:innodb_flush_log_at_trx_commit=0/innodb_flusb_method=0_direct

监控锁状态

1)查看有没有锁等待:mysql> show status like ‘innodb_row_lock%’;
2)查看哪个事务在等待(被阻塞了):mysql> select * from information_schema.innodb_trx where trx_state=‘LOCK WAIT’;
Trx_id:事务号、
trx_stat:当前事务状态
trx_mysql_thread_id:连接线程id
trx_query:被阻塞的操作
3)查看锁源,谁锁的我:mysql> select * from sys.innodb_lock_waits;
Locked_table:哪张表出现等待

优化顺序
1) 通过top排查,查找mysql进程占比
2) 如果大量cpu用于sys和wait,us处于正常,则排查mysql锁、sql语句
3) 查看slowlog及锁等待情况
4) Pt-query-diagest查看慢日志

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

innodb简单优化 的相关文章

  • Eclipse 在源代码管理中保存操作

    我们希望找到一种在签入之前执行代码标准的 轻量级 方法 我们真的很喜欢使用 Eclipse 内置的想法保存操作 go to Preferences gt gt Java gt gt Editor gt gt Save Actions 其中有
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • java中如何连接字符串

    这是我的字符串连接代码 StringSecret java public class StringSecret public static void main String args String s new String abc s co
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我

随机推荐

  • 线性代数(17)——坐标转换

    坐标转换 空间的基与坐标系 任意坐标系与标准坐标系之间的转换 任意坐标系之间的转换 标准单位矩阵作为桥梁 结论验证 不使用单位坐标系为桥梁的情况 空间的基与坐标系 坐标系是理解空间的基的一个视角 如果只到了一个坐标系也相当于知道了空间中的一
  • 【axmol】基于Cocos2d-x 4.0的持续维护的游戏引擎介绍

    Axmol引擎 A Multi platform Engine for Desktop XBOX UWP and Mobile games A radical fork of Cocos2d x 4 0 Axmol是基于Cocos2d x
  • 【小程序】手动实现switch开关中带文字效果(开关左右文字相同/不同都可以)

    最终效果 左右文字宽度相同 左右文字宽度不同 左右长度相同 效果 配合wx show切换 注意 左右长度相同的话可以设置合适的相同的宽度 html
  • 五. go 常见数据结构实现原理之 string, iota

    目录 一 string 其它问题 二 iota 几个小问题 原理 一 string golang中对string的解释 8比特字节的集合 可以为空 长度为0 但不会是nil string对象不可以修改 查看string 数据结构 strin
  • C语言中的正则表达式:匹配和替换

    当你在C语言中需要进行字符串匹配和替换操作时 正则表达式是一个强大的工具 在C语言中 可以使用正则表达式库来处理正则表达式的匹配和替换操作 下面是一个使用C语言中的正则表达式的示例教程 首先 你需要包含适当的头文件 c include
  • Python之异步处理

    同步处理 也被称为是阻塞式处理 是指程序执行到某个位置 会一直等待该命令执行完毕 然后继续执行后续逻辑 异步处理 是指一段程序由多个线程或进程同时执行 从而提高软件性能 一 多线程 线程是计算机调度的基本单位 一个进程至少有一个线程 线程是
  • 计算机网络分为哪些子网,计算机网络-划分子网

    IP地址 IP地址是给因特网上的每一个主机 或路由器 的每一个接口分配一个在全世界范围是唯一的32位标识符 层次化IP地址将32位的IP地址分为网络ID和主机ID IP地址分类 分为ABCDE类地址 二进制与十进制的关系 从上图看出128以
  • 这三个普通程序员,几个月就成功转型AI,他们的经验是...

    动辄50万的毕业生年薪 动辄100万起步价的海归AI高级人才 普通员到底应不应该转型AI工程师 普通程序员到底应该如何转型AI工程师 以下 AI科技大本营精选了三个特别典型的普通程序员成功转型AI的案例 也是知乎上点赞量相当高的案例 第一案
  • 学生没有教育邮箱如何享受Jetbrains全家桶优惠(白嫖)

    学生没有教育邮箱如何享受Jetbrains全家桶优惠 白嫖 Lan 2020 04 26 10 05 351 人阅读 0 条评论 首先来一波成功图 提交申请一个星期之后终于发来了这封邮件 每次申请可以使用一年 一年之后还是学生可以继续申请
  • Vue 使用 mockjs (返回数据、get、post 请求)

    1 安装 mockjs axios 一般默认自带 没有就安装下 附 mockjs 官网 mockjs github npm install mockjs axios 一般默认自带 npm install axios 2 启动项目 根据项目环
  • C/C++

    文章目录 2 2 C语言常用关键字及运算符操作 关键字 参考 麦子学院 嵌入式C语言高级 2 2 C语言常用关键字及运算符操作 重点 掌握C语言的常用关键宇及其应用场景 使用技巧 关键字 编译器 预先定义了一定意义的字符串 32个 size
  • qt安装到指定目录

    qt everywhere src 5 12 3安装到指定目录 默认情况下 QT会自动安装到 usr local Qt目录 这对于项目工具的归类来说 总是感觉很别扭 本文仅记录自己安装的过程 同时原理可借鉴给其他的工具归类 下载qt eve
  • 传感器课程作业 车载激光雷达

    高分辨率车载3D激光雷达介绍 1 车载3D激光雷达的背景 化石能源的日渐枯竭以及气候环境的恶化使得绿色节能可持续发展理念普世流行 其中交通减排是节能减排的主要途径 加之碳中和目标的提出 新能源汽车替代传统燃油车已然成为不可逆转的趋势 各国大
  • 特别篇 :从 0 开始创作云原生应用 (殷达)

    本节内容的分享主要围绕以下两方面 介绍云原生应用是什么 介绍 Helm 和如何创作一个 Helm 应用 一 云原生应用是什么 首先我们来思考一个问题 云原生应用是什么 在生活中我们会和各种各样的应用打交道 有时候会在移动端上使用淘宝购物 使
  • 关于windows下gcc+cmake指定elf文件到特定section中

    1 map 文件中 glue 7 glue 7t是什么 Those stub sections are generated by the linker not by gcc itself so any documentation would
  • Spring Boot +JWT +MybatisPlus,使用Token登录详细教程,附源码!

    一 新建Spring Boot项目 1 File New Module 2 点击下一步 3 写完这些 点击下一步 4 选择插件 5 选择项目地址 选择完成后点击Finish 二 1 创建完成后 修改pom xml文件 添加以下依赖
  • Linux服务——nginx重写功能与反向代理

    目录 一 nginx重写功能 if指令 return指令 set指令 break指令 rewrite指令 防盗链 二 反向代理 反向代理参数 反向代理 缓存功能 反向代理 ip穿透 反向代理 动静分离 反向代理 负载均衡 一 nginx重写
  • STM32都学什么

    一 什么是STM32 对于STM32 从字面意思上来理解 ST是意法半导体 M是Microelectronics的缩写 其中32表示的是32位 那么整合起来理解就是 STM32就是指的ST公司开发的32位微控制器 在如今的32位控制器中 S
  • ChatGLM-6B微调,P-Tuning,LoRA,Full parameter

    官方教程 ChatGLM 6B 微调 P Tuning LoRA Full parameter 哔哩哔哩 bilibili我们详细介绍了GLM的技术背景 以及ChatGLM 6B的微调方案 包括P tuning LoRA Full Para
  • innodb简单优化

    innodb flush log at trx commit sync binlog 双1标准 innodb flush log at trx commit 1 sync binlog 1 innodb flush log at trx c