本文關鍵字:大事務、binlog、Linux
咱們並不喜歡 MySQL 中出現大事務(更新不少數據的事務),大事務每每帶來不少維護的問題。mysql
咱們在維護 MySQL 時,須要關注因而否出現了較大事務,在 binlog 裏找到其出現的證據。sql
咱們先建立個數據庫:數據庫
這裏咱們啓用了 GTID,對於非 GTID 的 binlog,你們也能夠用相似的方法處理。segmentfault
下面須要建立一些大小不一樣的事務,咱們使用在 第11問 裏使用過的手法,spa
反覆執行,code
下面咱們開始研究 binlog,先解開一段看一下,blog
咱們知道在 GTID 模式下,事務開頭必然會有一個 GTID_event,如圖中紅框標註。排序
咱們就過濾這一段信息,事務
這裏用到了 grep 兩個技巧:get
- 過濾 tab 字符,用到了 "$(printf 't')" 來插入 tab 字符,沒法直接使用 "t" 字符。
- 使用 -B 參數向前找到了匹配的前一行,輸出 "at xxx",這一行是 GTID_event 在 binlog 中的位置(單位是字節)。
而後咱們將其中的位置信息過濾出來,
再將每兩行的位置減一下,就得到了每個事務在 binlog 中的大小,
將這些事務的大小排序一下,取最大值,
這是這個 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 的技術內容,大家還有什麼想知道的嗎?趕忙留言告訴小編吧!