binlog 和慢日志谁的时间更准确--爱可生问题:

原标题:binlog和慢日志谁的时间更准确--爱可生

binlog 和慢日志谁的时间更准确--爱可生问题:
文章图片
问题:在小伙伴们学习的过程中 , 执行了一个insert , 然后发现了以下现象:
首先在binlog中 , 发现这条SQL运行了2秒 。 (上一问中,我们知道BEGIN的exec_time等于事务第一个SQL的exec_time , 本例中就是insert的exec_time)

binlog 和慢日志谁的时间更准确--爱可生问题:
文章图片
但在慢日志中,发现这条SQL的query_time为10秒:

binlog 和慢日志谁的时间更准确--爱可生问题:
文章图片
那么binlog和慢日志谁的时间更准确一些?
实验首先我们按照第02问的步骤 , 准备一个慢IO的设备 , 使读操作和写操作都延迟2000ms(在02问中是100ms , 需要调整dmsetup那一步的参数) , 此处省略步骤 。
这是我们的慢IO设备和挂载点:

binlog 和慢日志谁的时间更准确--爱可生问题:
文章图片
宽油建立一个数据库:

binlog 和慢日志谁的时间更准确--爱可生问题:
文章图片
下个SQL看看:

binlog 和慢日志谁的时间更准确--爱可生问题:
文章图片
观察binlog , binlog认为SQL执行了2秒:

binlog 和慢日志谁的时间更准确--爱可生问题:
文章图片
观察慢日志 , 慢日志认为SQL执行了10秒:

binlog 和慢日志谁的时间更准确--爱可生问题:
文章图片
与我们问题中的情况相同 。
从实验结果猜测:慢日志更准确一些 , 而binlog中的执行时间不包括由于binlog带来的延迟 。
原理MySQL实际上的执行步骤跟我们猜测的类似 , 一个SQL涉及以下几个时间点:
1.SQL开始
【binlog 和慢日志谁的时间更准确--爱可生问题:】2.记录generallog
3.SQL解析
4.SQL执行过程中 , 生成binlogevent
5.binlog刷盘
6.记录慢日志
binlog中的SQL执行时间 , 是从1到4的时间 , 而慢日志中的SQL执行时间 , 是从1到6的时间 。
本实验中 , 我们通过慢IO拖慢了步骤5 , 使得两个时间的差异比较明显 。
正常运维过程中 , 大家也可以通过两个时间戳的差异 , 来猜测binlog刷盘效率是否出了问题 。
关键字:爱可生、MySQL数据库、数据库运维管理、开源数据库解决方案