slowlog中的commit

在@应元周报提到有个instance的slow.log记录很多commit,sql execute超过1秒,sql就print到slow.log中。在他邮件中分析了binary log及ib_logfile写入时机及策略,如果磁盘很慢(或写入量很大),binary log落地超过1秒。简单回顾update对undo log、ib_logfile、binlog操作过程

1、buffer pool写入undo log信息(undo信息最终会存在共享表空间中)
2、将修改内容及信息写入ib_logfile中(未结束)
3、对事务做的修改写入binlog中,这个过程中调用prepare_commit_mutex,保证写入顺序
4、释放mutex,将事务结束日志写入ib_logfile

太多log要写的情况重现

root@test 02:56:37>set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
 
root@test 03:09:40>insert into t select * from t;
Query OK, 1546880 rows affected (1 min 46.46 sec)
Records: 1546880  Duplicates: 0  Warnings: 0
 
root@test 03:11:29>commit;
Query OK, 0 rows affected (4.12 sec)
 
 
slow.log中信息
# User@Host: root[root] @ localhost []
# Thread_id: 32061900  Schema: test  Last_errno: 0  Killed: 0
# Query_time: 4.125575  Lock_time: 0.000000  Rows_sent: 0  Rows_examined: 0  Rows_affected: 0  Rows_read: 0
# Bytes_sent: 11  Tmp_tables: 0  Tmp_disk_tables: 0  Tmp_table_sizes: 0
# QC_Hit: No  Full_scan: No  Full_join: No  Tmp_table: No  Tmp_table_on_disk: No
# Filesort: No  Filesort_on_disk: No  Merge_passes: 0
# No InnoDB statistics available for this query
use test;
SET timestamp=1354259499;
commit;

One Response to “slowlog中的commit”

  1. hickey.liu@gmail.com说道:

    第一点中的 共享表空间 叫 系统表空间 更准确。

Post a Comment