MySQL如何計算統計redo log大小

2021-01-08 紙鶴視界

在MySQL中如何計算、統計重做日誌(redo log)的生成情況呢? 例如10分鐘內,生成了多少M的redo log呢?30分鐘內又生成了多少M的redo log.....。MySQL沒有像Oracle中那樣的系統視圖統計這些數據,但是我們可以通過一些方法曲線的統計二進位日誌的生成量。

雖然我在這篇博客「MySQL中Redo Log相關的重要參數總結」中介紹了,MySQL 8.0引入了innodb_dedicated_server自適應參數,可基於伺服器的內存來動態設置innodb_buffer_pool_size,innodb_log_file_size和innodb_flush_method。默認情況下,此參數是關閉的。但是在MySQL 8.0之前,通過計算重做日誌(redo log)的生成量來判斷判斷innodb_log_buffer_size和innodb_log_file_size的大小是否合適是非常必要的,個人認為即使MySQL 8.0版本下,這個也是非常有參考和研究意義的。我們通過統計、分析計算重做日誌(redo log)的生成量,從而判斷InnoDB的事務日誌文件大概能支撐多長時間就會切換。有具體數據支撐,你才好分析判斷,否則巧婦也難為無米之炊。

在MySQL的information_schema.global_status或performance_schema.global_status中有個伺服器狀態變量(Server Status Variables)Innodb_os_log_written,它記錄了Innodb的重做日誌(redo log)的生成量,它記錄寫入InnoDB重做日誌文件的字節數,它是一個累積值。官方文檔關於此伺服器狀態變量的描述如下

Innodb_os_log_written

The number of bytes written to theInnoDBredo logfiles.

我們主要通過一個計劃任務/事件調度定期的去採集Innodb_os_log_written伺服器狀態變量獲取重做日誌的大小,將其存儲在innodb_log_size_his表中,方便分析統計。具體腳本如下:

注意:performance_schema.global_status是MySQL 5.7引入的,而MySQL 8.0開始,information_schema.global_status直接被丟棄了。所以注意MySQL版本,選擇合適腳本。

USE mysqls;CREATETABLEIFNOTEXISTS innodb_log_size_his( log_id INT AUTO_INCREMENT PRIMARYKEY COMMENT '日誌編號', log_date DATETIME COMMENT '記錄當前數據的時間', log_size DOUBLE COMMENT 'redo log的大小,單位為mb') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT 'redo日誌大小信息表';--MySQL 5.*版本用下面腳本DELIMITER &&DROPPROCEDUREIFEXISTS `Record_Innodb_Log_Size`&&CREATEPROCEDURE Record_Innodb_Log_Size()BEGIN INSERT INTO mysql.`innodb_log_size_his` ( log_date, log_size )SELECT now() AS log_date, ROUND(CAST(VARIABLE_VALUE ASDOUBLE )/1024/1024, 1) as log_sizeFROM information_schema.global_statusWHERE VARIABLE_NAME = 'innodb_os_log_written';END &&DELIMITER ;--MySQL 8.0以上版本使用下面腳本DELIMITER &&DROPPROCEDUREIFEXISTS `Record_Innodb_Log_Size`&&CREATEPROCEDURE Record_Innodb_Log_Size()BEGIN INSERT INTO mysql.`innodb_log_size_his` ( log_date, log_size )SELECT now() AS log_date, ROUND(CAST(VARIABLE_VALUE ASDOUBLE )/1024/1024, 1) as log_sizeFROM performance_schema.global_statusWHERE VARIABLE_NAME = 'innodb_os_log_written';END &&DELIMITER ;

然後創建MySQL的計劃任務/事件調度,這個可以根據需求彈性設定。

CREATE EVENT DPA_BINGLOG_SIZE ON SCHEDULE EVERY 10 MINUTE STARTS '2020-10-16 08:00:00'ONCOMPLETIONPRESERVEDO CALL mysql.Record_Innodb_Log_Size;

然後你就可以基於這個表做一些簡單的分析和統計了,例如,統計10分鐘內生成重做日誌生成了多少。如下所示:

SELECT m.* ,@lag AS last_redo_size ,ROUND(m.log_size - @lag,2) AS gen_redo_size ,@lag:=log_sizeFROM mysql.`innodb_log_size_his` m, (SELECT @lag :='') AS nWHERE m.log_date >= date_add(now(), interval -1 day)ORDERBY m.log_id;

相關焦點

  • MySQL 5.7 vs 8.0,哪個性能更牛?
    測試前先重啟mysql服務,並清空os的cache(避免多次測試時命中緩存) 每次進行測試都是新生成測試數據後再進行mysql5.7和mysql8.0的測試 每次測試時保證mysql5.7和mysql8.0的配置參數一致 環境 機器
  • mysql 版本號解釋_mysql workbench查詢mysql版本號 - CSDN
    在mysql中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計信息以及比較運算更加複雜。20表示最大顯示寬度為20,但仍佔4位元組存儲,存儲範圍不變;不影響內部存儲,只是影響帶 zerofill 定義的 int 時,前面補多少個 0,易於報表展示mysql為什麼這麼設計對大多數應用沒有意義,只是規定一些工具用來顯示字符的個數;int(1)和int(20)存儲和計算均一樣;mysql中int(10)和char(10)以及varchar
  • Mysql(Mariadb)資料庫主從複製
    In order to log into MariaDB to secure it, we'll need the currentpassword for the root user.Setting the root password ensures that nobody can log into the MariaDBroot user without the proper authorisation.Set root password?
  • SELinux 與 MySQL-愛可生
    00:01:00 mysqld也可以使用 ls -Z 查看 MySQL 數據目錄的 SELinux 的上下文:[root@redhat7 ~]# ls -dZ /var/lib/mysqldrwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql參數說明:system_u
  • DTCC:MySQl核心代碼開發經驗揭示
    /mysql-test-run.pl –gdb sample  MySQL 測試框架參考資源  • The MySQL Test Framwork, Version 2.0  Ø http://dev.mysql.com/doc/mysqltest/2.0/en/index.html  • mysqltest Language Reference
  • MySQL8.0窗口函數做數據排名統計詳細教程
    MySQL8.0新增了窗口函數,大大的方便了做數據排名統計的人,很多朋友還不清楚怎麼用MySQL8.0做數據統計排名,下面就來為大家分享一篇心得文章。
  • 高性能Mysql主從架構的複製原理及配置詳解
    複製解決的問題MySQL複製技術有以下一些特點:數據分布 (Data distribution )負載平衡(load balancing)備份(Backups)高可用性和容錯行 High availability and failover複製如何工作整體上來說,複製有3個步驟:master將改變記錄到二進位日誌(binary log)中(這些記錄叫做二進位日誌事件
  • MySQL如何實時同步數據到ES?試試這款阿里開源的神器
    使用startup.sh腳本啟動canal-server服務;sh bin/startup.sh啟動成功後可使用如下命令查看服務日誌信息;tail -f logs/canal/canal.log2020-10-26 16
  • mysql查詢——統計每日新用戶數量
    下圖是一張網站用戶活動表(User_Activities),表中包含欄位UserId(用戶編號)、Activity(用戶活動,可取值login、orders、logout)、Date(活動日期),現需要編寫一個查詢語句,統計網站每日的新用戶數量,即統計每日登錄用戶中首次登錄網站的用戶數
  • mysql,mariadb 啟動出現 Can't Create Test File錯誤
    樹莓派系統安裝mariadb通過sudo apt install 安裝後,服務正常啟動,但默認的數據目錄是 /var/lib/mysql,所以修改數據目錄和日誌目錄,方便維護。新的數據目錄:/home/mysql/data,新日誌目錄 /home/mysql/log啟動服務時出現警告提示:[Warning] Can't create test file /home/mysql/data/club-wilspark-rb.lower-test一番搜索,在Mariadb官方網站發現了解決方案:解釋一下:
  • MySQL 數據校驗工具-愛可生|mysql|perl|伺服器|node01_網易訂閱
    其原理是在主庫執行基於 statement 的 SQL 語句來生成主庫數據塊的checksum,把相同的 SQL 語句傳遞到從庫執行,並在從庫上計算相同數據塊的 checksum,最後,比較主從庫上相同數據塊的 checksum 值,由此判斷主從數據是否一致。它能在非常大的表上工作的一個原因是,它把每個表分成行塊,並檢查每個塊與單個替換。選擇查詢。它改變塊的大小,使校驗和查詢在所需的時間內運行。
  • mysql統計日活、周活、月活
    mysql分組函數、組函數、聚合函數、統計函數直接po代碼,代碼中有注釋#二、分組函數/*功能:用作統計使用,又稱為聚合函數或統計函數或組函數分類:sum 求和、avg 平均值
  • 如何把Access的數據導入到Mysql中
    首頁 > 語言 > 關鍵詞 > 最新資訊 > 正文 如何把Access的數據導入到Mysql中
  • eclipse如何使用JDBC連接mysql資料庫
    eclipse如何使用JDBC連接mysql資料庫1.在新建的Project中右鍵新建Floder2.創建名為lib的包3.創建完畢之後的工程目錄4.接下來解壓你下載的mysql的jar包,拷貝其中的.jar文件5.在工程lib
  • JavaScript用Math.log()計算一個數的自然對數
    基本概念Math.log()方法用於求一個數的自然對數,自然對數就是以自然常數e為底的對數,在數學上常簡單表示為ln(x)。它的語法形式如下所示:Math.log(x);參數x就是要計算它的自然對數的那個數,即Math.log(x) = ln(x)。
  • MySQL存儲引擎的物理結構與表空間
    InnoDB物理結構在5.6版本中,ibdata1包含存儲系統元信息,undo表空間數據和臨時表空間在5.7版本中,文件結構與作用如下表空間在5.7版本中下面兩個參數長的很像,名字叫起來也相似,但完全不一樣,需要重點牢記ibdata1:整個庫的統計信息和undo信息ibd:數據行和索引信息
  • 如何向mysql導入數據
    一、導入.sql文件1.mysql命令導入數據基本語法:mysql -h伺服器地址 -u用戶名 -p 資料庫名< 要導入的資料庫文件路徑例:導入G:2.mysqlimport導入數據基本語法:mysqlimport -h伺服器地址 -u 用戶名 -p [--local] 資料庫名 文件路徑 [options]options常用選項:
  • 如何在ubuntu20.04安裝MySQL並修改資料庫密碼
    sudo apt install mysql-client-core-83、再次輸入mysql命令,提示不能連接上mysql server,由提示可知mysql服務端沒有安裝;輸入命令sudo apt-get
  • 基於MySQL資料庫應用開發實現嵌入式數控系統的設計
    本文就嵌入式數控系統中資料庫應用開發的具體實現過程,以及如何將資料庫應用程式向嵌入式數控系統硬體平臺的移植方法和對資料庫進行最小化裁剪的技巧上做了詳細介紹。 由於本課題開發的人機界面是利用GTK+圖形庫,因此系統中採用的基於MySQL資料庫應用開發,需要解決MySQL和GTK+相互融合的問題。