1. 程式人生 > >MySQL如何計算統計redo log大小

MySQL如何計算統計redo log大小

 

在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 the InnoDB redo log files.

 

我們主要通過一個計劃任務/事件排程定期的去採集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;
 
CREATE TABLE IF NOT EXISTS innodb_log_size_his
(
    log_id          INT AUTO_INCREMENT PRIMARY KEY 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 &&
 
DROP PROCEDURE IF EXISTS `Record_Innodb_Log_Size`&&
 
CREATE PROCEDURE 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 AS DOUBLE )/1024/1024, 1) as log_size
      FROM information_schema.global_status
      WHERE VARIABLE_NAME = 'innodb_os_log_written';
END &&
 
DELIMITER ;
 
 
--MySQL 8.0以上版本使用下面指令碼
DELIMITER &&
 
DROP PROCEDURE IF EXISTS `Record_Innodb_Log_Size`&&
 
CREATE PROCEDURE 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 AS DOUBLE )/1024/1024, 1) as log_size
      FROM performance_schema.global_status
      WHERE VARIABLE_NAME = 'innodb_os_log_written';
    
END &&
 
DELIMITER ;

 

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

 

CREATE EVENT DPA_REDOLOG_SIZE 
ON SCHEDULE EVERY 10 MINUTE STARTS '2020-10-16 08:00:00' 
ON COMPLETION PRESERVE 
DO 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_size
FROM mysql.`innodb_log_size_his` m, (SELECT @lag :='') AS n
WHERE m.log_date >= date_add(now(), interval -1 day)
ORDER BY m.log_id;

 

 

 

 

相關推薦

MySQL如何計算統計redo log大小

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

修改重做日誌文件(redo log)大小

inactive 訪問 結束 過渡 操作 div check 日誌組 soft 重做日誌相關數據字典 1、v$log 記錄數據庫中有多少個重做日誌組,每個組中有多少個成員、日誌大小及狀態 2、v$logfile 記錄著每個日誌組成員的屬性、文件路徑、文件名、狀態

Mysql-事務與Redo Log、Undo Log

一 Undo Log Undo Log是為了實現事務的原子性,在MySQL資料庫InnoDB儲存引擎中,還用Undo Log來實現多版本併發控制(簡稱:MVCC)。 1   事務的原子性(Atomicity) 事務中的所有操作,要麼全部完成,要麼不做任何操作,不能只做部

詳細分析MySQL事務日誌(redo log和undo log)

innodb事務日誌包括redo log和undo log。redo log是重做日誌,提供前滾操作.undo log是回滾日誌,提供回滾操作。undo log和redo log都算是用來恢復的日誌:1.redo log通常是物理日誌,記錄的是資料頁的物理修改,而不是某一行或

深入理解MySQL系列之redo log、undo log和binlog

#### 事務的實現 redo log保證事務的永續性,undo log用來幫助事務回滾及MVCC的功能。 #### InnoDB儲存引擎體系結構 ![](https://img2020.cnblogs.com/blog/2211828/202012/2211828-20201222093735507-1

MySQL · 引擎特性 · InnoDB redo log漫遊(轉)

modified CP 後者 上鎖 let flag tips bsp clas 前言 InnoDB 有兩塊非常重要的日誌,一個是undo log,另外一個是redo log,前者用來保證事務的原子性以及InnoDB的MVCC,後者用來保證事務的持久性。 和大多數關系型數據

MySQL的日誌(二):事務日誌(redo log和undo log)

drive datadir sse 詳細分析 mut 通過 註意 默認 into 本文目錄:1.redo log 1.1 redo log和二進制日誌的區別 1.2 redo log的基本概念 1.3 日誌塊(log block) 1.4 log group和redo lo

MySQL InnoDB redo Log 淺析

pre 數據庫事務 ins row 進行 res logfile def 技術分享 MySQL的InnoDB存儲引引擎的物理文件存儲體系中,除了實際的數據文件(ibd, ibdata)之外,還有兩個非常重要的日誌系統,分別是redo日誌和undo日誌。 跟Oracle類似,

MySQL實時統計指令碼--計算QPS,TPS和執行緒連線數等

MySQL系統本身提很多狀態資訊,很多時候我們只關心其中一部分資料資訊,如TPS、QPS、連線數等 #!/bin/bash mysqladmin -uroot -p'123123' extended-status -i1|awk 'BEGIN{local_switch=0;print "QPS

mysql undo redo log在事務中起的作用

轉載自:https://blog.csdn.net/hzllblzjily/article/details/50806047 本文是介紹MySQL資料庫InnoDB儲存引擎重做日誌漫遊 00 – Undo Log Undo Log 是為了實現事務的原子性,在MySQL資料庫InnoDB儲

Mysql裡的 undo logredo log

轉載自:http://doc.okbase.net/xinysu/archive/259593.html 1 undo 1.1 undo是啥 undo日誌用於存放資料修改被修改前的值,假設修改 tba 表中 id=2的行資料,把Name='B' 修改為Name = 'B2' ,那麼u

MySQL日誌系統:redo log與binlog

日誌系統主要有redo log(重做日誌)和binlog(歸檔日誌)。redo log是InnoDB儲存引擎層的日誌,binlog是MySQL Server層記錄的日誌, 兩者都是記錄了某些操作的日誌(不是所有)自然有些重複(但兩者記錄的格式不同)。 圖來自極客時間的mysql實踐,該圖是描述的是MyS

[Mysql] redo log 與 binlog 的區別

redo log(重做日誌)和 binlog(歸檔日誌) MySQL redo log 與 binlog 的區別 什麼是redo log 什麼是binlog redo log與binlog的區別 1. 什麼是redo log

MySQL中的重做日誌(redo log),回滾日誌(undo log),以及二進位制日誌(binlog)的簡單總結

MySQL中有六種日誌檔案, 分別是:重做日誌(redo log)、回滾日誌(undo log)、二進位制日誌(binlog)、錯誤日誌(errorlog)、慢查詢日誌(slow query log)、一般查詢日誌(general log),中繼日誌(relay log)。 其中重做日誌和回滾日誌與

關於MySQL redo log,挖些坑,慢慢填

1.  為什麼可以設定為多個redo log ? (innodb_log_files_in_group,預設值和推薦值都是2,我們線上設的統一為4); 2.  什麼條件下會觸發刷髒?除了master_thread\強制checkpoint以外,這個頻率是否可以調整; 3.  recovery階段,bp是否

oracle學習筆記----線上修改redo.log檔案的大小

1.檢視當前日誌組成員:SQL> select member from v$logfile;MEMBER------------------------------------------------------C:\ORACLE\PRODUCT\10.2.0\ORA

MySQL 日誌系統之 redo log 和 binlog

之前我們瞭解了一條查詢語句的執行流程,並介紹了執行過程中涉及的處理模組。一條查詢語句的執行過程一般是經過聯結器、分析器、優化器、執行器等功能模組,最後到達儲存引擎。 那麼,一條 SQL 更新語句的執行流程又是怎樣的呢? 首先我們建立一個表 user_info,主鍵為 id,建立語句如下: CREATE TAB

MySQLRedo Log相關的重要引數總結

  引數介紹   下面介紹、總結一下MySQL的Redo Log相關的幾個重要引數:innodb_log_buffer_size、innodb_log_file_size、innodb_log_files_in_group   innodb_log_buffer_size &nb

MySQL重做日誌(redo log

前面介紹了三種日誌:[error log](https://www.cnblogs.com/liang24/p/14072666.html)、[slow log](https://www.cnblogs.com/liang24/p/14079272.html)、[binlog](https://www.cnb

基於Redo Log和Undo LogMySQL崩潰恢復流程

在之前的文章「簡單瞭解InnoDB底層原理」聊了一下MySQL的Buffer Pool。這裡再簡單提一嘴,Buffer Pool是MySQL記憶體結構中十分核心的一個組成,你可以先把它想象成一個黑盒子。 黑盒下的更新資料流程 當我們查詢資料的時候,會先去Buffer Pool中查詢。如果Buffer Pool