mysql的innodb_flush_log_at_trx_commit引數實驗

fei890910發表於2016-04-20
innodb_flush_log_at_trx_commit引數實驗
1,首先設定sync_binlog為0,
mysql>  set global  sync_binlog=0;
Query OK, 0 rows affected (0.00 sec)


建立一個儲存過程p1,往t表中進行五千次的插入,每次插入都提交
mysql> DELIMITER //  
mysql> CREATE PROCEDURE p1()
    -> begin
    ->  declare i int;
    ->  set i=0;
    ->  while i<5000 do
    ->     insert into t values(i);
    ->     set i=i+1;
    ->     commit;
    ->  end while;
    -> end;
    -> //
Query OK, 0 rows affected (0.00 sec)

2,現在該引數為2,即日誌快取區寫到檔案,但不會刷到磁碟上
插入5000條資料,時間是3.56秒
mysql> show variables like '%innodb_flush_log_at_trx%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2     |
+--------------------------------+-------+
1 row in set (0.01 sec)




mysql> truncate t;
Query OK, 0 rows affected (0.02 sec)


mysql> call p1;
Query OK, 0 rows affected (3.56 sec)
3,現在該引數設定為1,即每次提交,日誌快取區寫到日誌檔案,並刷到磁碟上
插入5000條資料,時間是6.21秒
mysql> set global innodb_flush_log_at_trx_commit=1;
Query OK, 0 rows affected (0.00 sec)


mysql> truncate t;
Query OK, 0 rows affected (0.02 sec)


mysql> call p1;
Query OK, 0 rows affected (6.21 sec)
4,現在引數設定為0,即日誌快取區每秒一次地寫到日誌檔案,並刷到磁碟
但是事務提交的時候,不做任何操作。插入5000條資料3.18秒
mysql> set global innodb_flush_log_at_trx_commit=0;
Query OK, 0 rows affected (0.00 sec)


mysql> truncate t;
Query OK, 0 rows affected (0.02 sec)


mysql> call p1;
Query OK, 0 rows affected (3.18 sec)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29108064/viewspace-2084465/,如需轉載,請註明出處,否則將追究法律責任。

相關文章