我通过ioprofile检查了MYSQL的IO活动,发现binlog使用了大部分写系统调用,但是事务日志使用了大多数写类型pwrite系统调用,我的问题是为什么binlog使用了大部分写系统调用,但是pwrite用于交易记录?

 total      pread       read     pwrite      write      fsync       open      lseek filename
  3027          0        549          0       2478          0          0          0 /data/mysql/XXX-bin.048425
  1848          0          0       1820          0         28          0          0 /data/mysql/ib_logfile1

最佳答案

除了pwrite接受第四个arg作为位置,而write隐式地将数据写入句柄的当前偏移指针,这两个操作基本上等效。

二进制日志几乎总是通过将数据附加到末尾来编写的。

重做日志更像是环形缓冲区,通常大小固定,其中写操作从末尾回到起始处。


  pwrite()功能应等同于write(),不同之处在于它在不更改文件指针的情况下写入给定位置。
  
  pwrite()的前三个参数与write()相同,并为文件中的所需位置添加了第四个参数偏移量。
  
  https://linux.die.net/man/3/pwrite

10-06 13:54