第15問:快速找到 binlog 中是否有大事務

一問一實驗 頭圖.png

本文關鍵字:大事務、binlog、Linux

問題

咱們並不喜歡 MySQL 中出現大事務(更新不少數據的事務),大事務每每帶來不少維護的問題。mysql

咱們在維護 MySQL 時,須要關注因而否出現了較大事務,在 binlog 裏找到其出現的證據。sql

實驗

咱們先建立個數據庫:數據庫

1.png

這裏咱們啓用了 GTID,對於非 GTID 的 binlog,你們也能夠用相似的方法處理。segmentfault

下面須要建立一些大小不一樣的事務,咱們使用在 第11問 裏使用過的手法,spa

2.png

反覆執行,code

3.png

下面咱們開始研究 binlog,先解開一段看一下,blog

4.png

咱們知道在 GTID 模式下,事務開頭必然會有一個 GTID_event,如圖中紅框標註。排序

咱們就過濾這一段信息,事務

5.png

這裏用到了 grep 兩個技巧:get

  1. 過濾 tab 字符,用到了 "$(printf 't')" 來插入 tab 字符,沒法直接使用 "t" 字符。
  2. 使用 -B 參數向前找到了匹配的前一行,輸出 "at xxx",這一行是 GTID_event 在 binlog 中的位置(單位是字節)。

而後咱們將其中的位置信息過濾出來,

6.png

再將每兩行的位置減一下,就得到了每個事務在 binlog 中的大小,

7.png

將這些事務的大小排序一下,取最大值,

8.png

這是這個 binlog 中最大的 10 個事務的大小,能夠看到最大的事務在 binlog 中佔用了 658k 大小,不算太大。

本期沒有關於 MySQL 太多的知識點,只是活用 Linux 的命令,能夠簡單高效獲取 binlog 的信息。

下面附上本期命令的文字版:

~/opt/mysql/5.7.20/bin/mysqlbinlog data/mysql-bin.000001 | grep "GTID$(printf '\t')last_committed" -B 1 \

關於 MySQL 的技術內容,大家還有什麼想知道的嗎?趕忙留言告訴小編吧!
黃炎自媒體.png

相關文章
相關標籤/搜索