如何评估mysql 查询和dml事务的大小

2023-05-16

Query and Transaction size in MySQL

  • LEFRED
  • MAY 5, 2023
  • 8.0, MYSQL, MYSQL 8.0, MYSQL SHELL, PERFORMANCE_SCHEMA

Some times it’s important to know the size of a transaction, especially when you plan to migrate to a HA solution where by default transactions have a limited size to guarantee an optimal behavior of the cluster.

Today we will see the different possibilities to have an idea of the size of transactions.

First we need to split the transaction in two types:

  • those generating data (writes, like insert, delete and update, DML)
  • those only ready data (select, DQL)

To implement High Availability, only the first category is important.

Size of DML

To know the size of a DML transaction, the only possibility we have is to parse the binary log (or query the binlog event).

We need to check the binlog event from the binlog file and then calculate its size. To illustrate this, let’s try to find the transaction identified by a specific GTID: 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541914

SQL > \pager grep 'Gtid\|COMMIT' ;
Pager has been set to 'grep 'Gtid\|COMMIT' ;'.
SQL > show BINLOG EVENTS in 'binlog.000064' ;
| binlog.000064 |     213 | Gtid           |         1 |         298 | SET @@SESSION.GTID_NEXT= '17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541914' |
| binlog.000064 | 53904723 | Xid            |         1 |    53904754 | COMMIT /* xid=75 */                                                     |
SQL > \pager
Pager has been disabled.
SQL > select format_bytes(53904754-213);
+----------------------------+
| format_bytes(53904754-213) |
+----------------------------+
| 51.41 MiB                  |
+----------------------------+
1 row in set (0.0005 sec)

We can see that this transaction generated 51MB of binlog event.

This method can be complicated, certainly when you need to parse multiple binlog files to find the desired transaction.

Hopefully, Performance_Schema can again make our life easier. Indeed, we can parse the table binary_log_transaction_compression_stats to have information about the size of a transaction. Even if we don’t use binary log compression:

select format_bytes(UNCOMPRESSED_BYTES_COUNTER/TRANSACTION_COUNTER) size,
       format_bytes(COMPRESSED_BYTES_COUNTER/TRANSACTION_COUNTER) compressed,
       TRANSACTION_COUNTER 
  from performance_schema.binary_log_transaction_compression_stats;
+-----------+------------+---------------------+
| size      | compressed | TRANSACTION_COUNTER |
+-----------+------------+---------------------+
| 51.38 MiB | 51.38 MiB  |                   1 |
+-----------+------------+---------------------+

The TRANSACTION_COUNTER column is very important as if it is bigger than 1, the values are an average.

So if you really need to know the exact size of one transaction, you need first to truncate that table before running your DML.

Let’s have a look at this example:

SQL> select format_bytes(UNCOMPRESSED_BYTES_COUNTER/TRANSACTION_COUNTER) size,
       format_bytes(COMPRESSED_BYTES_COUNTER/TRANSACTION_COUNTER) compressed,
       TRANSACTION_COUNTER 
  from performance_schema.binary_log_transaction_compression_stats;
+-----------+------------+---------------------+
| size      | compressed | TRANSACTION_COUNTER |
+-----------+------------+---------------------+
| 17.13 MiB | 17.13 MiB  |                   6 |
+-----------+------------+---------------------+
1 row in set (0.0004 sec)

SQL > truncate table performance_schema.binary_log_transaction_compression_stats;
Query OK, 0 rows affected (0.0018 sec)

SQL > update sbtest1 set k=k+4;
Query OK, 132188 rows affected (1.3213 sec)

Rows matched: 132188  Changed: 132188  Warnings: 0

SQL > select format_bytes(UNCOMPRESSED_BYTES_COUNTER/TRANSACTION_COUNTER) size,
       format_bytes(COMPRESSED_BYTES_COUNTER/TRANSACTION_COUNTER) compressed,
       TRANSACTION_COUNTER 
  from performance_schema.binary_log_transaction_compression_stats;
+-----------+------------+---------------------+
| size      | compressed | TRANSACTION_COUNTER |
+-----------+------------+---------------------+
| 51.38 MiB | 51.38 MiB  |                   1 |
+-----------+------------+---------------------+
1 row in set (0.0017 sec)

We still have the possibility to use a MySQL Shell Plugin that list all the transaction size from a binary log:

 JS > check.showTrxSizeSort()
Transactions in binary log binlog.000064 orderer by size (limit 10):
51 mb - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541926
51 mb - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541925
51 mb - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541921
51 mb - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541916
51 mb - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541915
51 mb - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541918
51 mb - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541917
51 mb - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541914
257 bytes - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541924
257 bytes - 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541923

But how can I know the GTID of my transaction ?

MySQL has the possibility to return the GTID to the client if it supports that information returned by the server. MySQL Shell supports that feature !

To enable it, we use session_track_gtids:

SQL > set session_track_gtids='OWN_GTID';
Query OK, 0 rows affected (0.0001 sec)

SQL > update sbtest1 set k=k+1;
Query OK, 132183 rows affected (5.6854 sec)

Rows matched: 132183  Changed: 132183  Warnings: 0
GTIDs: 17f6a975-e2b4-11ec-b714-c8cb9e32df8e:7541914

As you can see, MySQL Shell returned the GTID of the transaction (update using auto_commit).

Size of DQL

But do we have the possibility to know the size of a SELECT ?

To determine the size of a SELECT, we can calculate the bytes sent by the server to the client like this:

SQL > select variable_value 
      from performance_schema.status_by_thread 
       join performance_schema.threads using(thread_id) 
      where processlist_id=CONNECTION_ID() 
        and variable_name='Bytes_sent' into @before;

SQL > select * from sbtest1;

SQL > select format_bytes(variable_value - @before) query_size 
        from performance_schema.status_by_thread 
        join performance_schema.threads using(thread_id) 
       where processlist_id=CONNECTION_ID() 
         and variable_name='Bytes_sent' ;
+------------+
| query_size |
+------------+
| 26.08 MiB  |
+------------+
1 row in set (0.0010 sec)

Summary

As you can see, MySQL Server provides a lot information via Performance_Schema and the binary logs. Parsing that information, you can retrieve the size of DML transaction or DQL.

Enjoy MySQL !

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

如何评估mysql 查询和dml事务的大小 的相关文章

  • maven xsd文件

    lt xml version 61 34 1 0 34 gt lt xs schema xmlns xs 61 34 http www w3 org 2001 XMLSchema 34 elementFormDefault 61 34 qu
  • 一个电子发烧友的程序员成长之路

    回想起高考已经是7年前的事情了 xff0c 一直想在毕业之际记忆记录一下7年的历程 xff0c 懒惰始终占据着我的整个身躯 看到这个征文活动 xff0c 让我有点想提笔记录的冲动了 1 邂逅 一直在想该用什么样的语言来将我对电子制作发烧程度
  • AI与医学辅助诊断

    人工智能一词越来越频繁的出现在日常生活中 一种事物的时髦 xff0c 必然有其背后的原因 而对于这样一个大的话题 xff0c 从整体上来叙述总显得有些不接地气 作为跟AI沾过一些边的博主将以自己接触的方面来发表一点看法 首先介绍一下 xff
  • 最优传输理论与计算 ——雷娜 顾险峰 【新书发布】

    缘起 1995年秋季 第二作者刚刚来到哈佛大学开始攻读计算机科学领域的博士学位 并在数学系学习丘成桐先生的微分拓扑课程 同时在麻省理工学院人工智能实验室学习Berthold Horn教授的机器人视觉课程 Horn教授提倡从物理的角度来理解视
  • 1.2.6 Linux distributions

    鸟哥的Linux私房菜 基础学习篇 xff08 第三版 xff09 第1章Linux是什么 xff0c 本章介绍为何Linux可以免除专利软件之争 xff0c 并且了解到Linux为何可以同时在个人计算机与大型主机上面大放光彩 本节为大家介
  • 全球40个免费电子图书馆网址~收藏

    中文 中图在线 xff08 提供 3600 种国外期刊的查阅服务 xff09 http cnplinker cnpeak com 国家哲学社会科学文献中心 xff08 提供 2039 种中文期刊 xff0c 7898 种外文期刊 xff09
  • 【docker】WSL+docker_desktop+GPU配置环境失败

    尝试windows下使用docker desktop安装深度学习的GPU环境 xff0c 结果很失败 xff0c GPU调用不了 我一共尝试两种方式调用GPU 第一种是新版本WSL2直接支持 xff0c 下载一个Nvidia官方的docke
  • public,private,protected 常见区别

    1 作用域public private protected 以及不写时的区别 答 xff1a 不写时默认为default 区别 作用域当前类 同一package子孙类其他packagepublic protected default pri
  • NETCONF协议netopeer软件安装与环境搭建

    NETCONF协议netopeer软件安装与环境搭建 目录 NETCONF协议netopeer软件安装与环境搭建 目录简介相关网站参考准备工作手动编译安装部份依赖包手动编译netopeer启动与验证 简介 最近工作涉及一些NETCONF协议
  • centos7 vnc黑屏解决办法

    手动安装的dbus与系统dbus冲突 xff0c 导致vnc启动黑屏 解决办法如下 xff1a 通过命令 find name 34 dbus daemon 34 查找安装的dbus 其中 usr bin dbus daemon 是系统自带的
  • OVS常用命令与使用总结

    OVS常用命令与使用总结 说明 在平时使用ovs中 xff0c 经常用到的ovs命令 xff0c 参数 xff0c 与举例总结 xff0c 持续更新中 进程启动 1 先准备ovs的工作目录 xff0c 数据库存储路径等 mkdir p et
  • 故障容忍分布式协调框架 Atomix

    Atomix 详细介绍 Atomix 是 JAVA8 的故障容忍分布式协调框架 Fault tolerant distributed coordination framework for Java 8 主要特性 xff1a list 可靠
  • 极几何,本质矩阵,基础矩阵,单应矩阵,相机投影矩阵

    什么是三角化 xff1f 三角化就是下图的红字部分 xff1a K和K 分别为两个相机的内参矩阵 什么是极几何 xff1f 极几何描述了同一场景或者物体在两个视点图像间的对应关系 下图中的O1和O2分别是两个相机的光心 xff0c 即摄像机
  • vncserver Cannot establish any listening sockets - Make sure an X server isn‘t already running(EE)

    说明vnc按顺序想要打开的可视化界面端口已被占用 xff0c 可以使用ps ef grep X命令查看一下进程里已经打开的图形化界面 xff08 有些是其他用户已打开的vnc xff0c 有些是系统默认已启用的图形界面 xff0c 不要随意
  • 如何处理linux Ubuntu网络不通的问题

    ubuntu 网络图标不见的问题解决方案 xff08 即无法联网解决方案 xff09 尝试以下操作 xff1a sudo service network manager stop sudo rm var lib NetworkManager
  • UCOSII学习---五、任务通信之信号量

    一 xff1a 信号量的理解 xff1a 信号量的本质是数据操作锁 xff0c 它本身不具有数据交换的功能 xff0c 而是通过控制其他的通信资源 xff08 文件 xff0c 外部设备 xff09 来实现进程间通信 xff0c 它本身只是
  • Python添加或去掉百分号

    数据 xff1a import pandas testing as tm data 61 tm makeDataFrame data 61 data iloc 5 示例数据 xff1a A B C D 6EBYVo9iQi span cla
  • MxNet(GPU版本)安装及相关配置(CUDA,CuDNN,Graphviz,d2l,虚拟环境配置)及最终建议

    深度学习框架MxNet配置 xff08 GPU版本 xff09 1 对应镜像 xff1a https mirrors aliyun com pypi simple mxnet 找到与自己电脑Python版本对应 xff08 命令行使用pyt
  • Kali Linux使用(含VMVare station player安装教程)

    VMware Workstation Player下载及安装配置 1 官方下载地址 xff1a VMvare Workstation Player 2 安装 xff1a 基本一路点 xff0c 需要注意的地方就是后面弄好了要重启一下 xff
  • 那些提升效率的tips(不定期更新中...)

    电脑插了网线可以上网却显示无internet 打开设备管理器 xff08 找不到在控制面板中搜索 设备管理器 xff09 找到网络适配器 选择网卡驱动程序 xff0c 先禁用设备再开启设备 xff08 重启 xff09 用MarkDownl

随机推荐

  • cmake的一个编译报错

    在一台新搭建的服务器上执行cmake的时候 xff0c 报了如下错误 xff1a cmake The C compiler identification is unknown The CXX compiler identification
  • 名词解释专用链接

    算法相关 xff1a 主元素 设T 1 n 是一个含有n个元素的数组 当 i T i 61 x gt n 2 xff0c 时称元素x是数组T的主元素 例如 xff0c T 61 1 1 1 2 5 5 1 1 1 1 xff0c T中有10
  • 微服务讲堂--【4】风洞系统

    一 系统特性 风洞是以人工的方式产生并且控制气流 xff0c 用来模拟飞行器周围气体的流动情况 xff0c 并可测量气流对飞行器的作用效果以及观察物理现象的实验设备 这个定义来自百度百科 xff0c 微服务和飞行器压根就搭不上边 xff0c
  • 微服务讲堂--【5】系统自举

    这里的 系统自举 借用了操作系统的概念 在操作系统启动之前 xff0c 计算机要先加载自举程序 xff0c 再由自举程序加载操作系统的启动程序 整个详细过程不在这里描述 xff0c 可以在网络查阅相关资料 为什么要在微服务系统中特别提及系统
  • 微服务讲堂--【6】系统稳定性

    稳定性 xff0c 通常是以可靠性来衡量 xff0c 即我们常说的几个9 xff0c 这个主题在之前各个系列文章中已经提到过 xff0c 本来没有打算单独写一篇 前几天一个老同事在群里发出一个灵魂之问 xff0c 如何解决生产环境更新系统后
  • 状态和无状态--2种服务器架构之间的比较

    对服务器程序来说 xff0c 有两个基本假设十分重要 xff0c 究竟服务器是基于状态请求还是无状态请求 状态化的判断是指两个来自相同发起者的请求在服务器端是否具备上下文关系 如果是状态化请求 xff0c 那么服务器端一般都要保存请求的相关
  • 日志系统设计

    一 重要性 日志系统在整个系统架构中的重要性可以称得上基础的基础 xff0c 但是这一点 xff0c 都容易被大多数人所忽视 因为日志在很多人看来只是printf 在系统运行期间 xff0c 是很难step by step的 xff0c 所
  • 提高链表随机访问效率的一种方案

    一 问题的描述 链表由于各个元素之间是通过指针方式连接在一起 xff0c 所以增加删除都非常方便 xff0c 但是在随机访问却远不如数组 数组的下标是可以通过算法直接定位的 xff0c 但链表却不行 二 问题的方案 我们定义一种组织方式 x
  • 如何识别验证码

    http www jianblog com 2009 02 09 574 周俭 Blog 基于OpenCV的PHP图像人脸识别技术 二月 9 2009 at 10 13 上午 由 catch Filed under PHP 编程 今天无意中
  • 银联基于OpenStack的金融私有云建设实践

    银联基于OpenStack的金融私有云建设实践 摘要 xff1a 中国银联基于OpenStack的私有云已经稳定运行1000多天 xff0c 累计11960vCPU 33280G内存和600TB企业级存储计算力 xff0c 初步建成了包括云
  • PING的最大长度

    我们知道MTU基本上是1492长度 我现在上海电信 xff0c 想测试下PING的包 xff0c 最大允许多大 那么从选择一个域名 xff0c 比如www baidu com 使用ping l size www baidu com 如果si
  • 【Linux】Centos安装OpenGL依赖库

    yum install y mesa yum install y freeglut yum install y GLEW
  • UEFI模式安装Win10和Linux双系统

    最近心血来潮 xff0c 想装一个Linux Windows双系统 xff0c 吸取上次安装的经验 xff0c 这次一定都要使用UEFI模式启动 xff0c 需要注意的是必须是支持此种启动模式的系统 xff08 一般解压之后都有efi文件夹
  • ActiveMQ性能调优

    转自 xff1a http setting iteye com blog 1484498 amq自己带了一个性能test xff1a http activemq apache org activemq performance module
  • 关系型数据库及oracle数据库简介

    一 关系型数据库简介 1 关系模型 xff08 1 xff09 1970年美国IBM公司研究员E F Codd首次提出了数据库系统的关系模型 xff0c 开创了数据库的关系方法和关系数据理论的研究 xff0c 为数据库技术奠定了理论基础 由
  • 游玩Linux(02)- zsh安装配置与游玩

    背景 xff1a 说实话 xff0c bash真有点反人类 xff0c 听说zsh是终极答案 xff0c 于是就搞一搞 xff0c 感觉还不错 参考资料 xff1a Oh My Zsh 安装 amp 配置 zsh 安装与配置 xff1a 9
  • 【转】添加层的方法,sphereFace代码添加层笔记

    转自https blog csdn net cuixing001 article details 79207109 在此基础上 xff0c 加入了自己的理解和修改 本教程是在窗户微软版朱古力环境配置好基础上添加sphereFace的新层Ma
  • putty+xming树莓派远程显示图片/图形界面

    之前通过putty用终端登录树莓派的时候想要查看图片只会用winscp先传输图片文件到本地再查看 后来配置了一下发现可以直接在本地终端调用图形界面远程查看 效果 xff1a 下载安装xming并配置putty xff1a 参考 xff1a
  • STM32F407之基于FreeRTOS的串口数据处理

    串口数据处理比较频繁时 xff0c 不用RTOS处理数据容易丢包 串口数据处理可以用FreeRTOS进行管理 xff0c 用于支持串口的CMD指令收发 除了串口任务的创建 xff0c 定时器创建外 xff0c 单纯串口数据处理需要进行下面几
  • 如何评估mysql 查询和dml事务的大小

    Query and Transaction size in MySQL LEFREDMAY 5 20238 0 MYSQL MYSQL 8 0 MYSQL SHELL PERFORMANCE SCHEMA Some times it s i