我通过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