摘要:会每秒进行一次的系统调用。这一操作在大多数数据库系统中被称之为就是组合多次写操作的数据,一次性将日志写入到磁盘。
通过strace 监控 Redis AOF文件的系统调用 Redis中主要的AOF设置
「appendonly yes」 开启每次更新操作后进行日志记录
「appendfilename appendonly.aof」 AOF的文件名
「 appendfsync everysec」 指定日志更新的条件,有3个值可选
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(默认值)
通过 strace 来监控系统调用strace -p $(pidof redis-server) -T -e trace=fdatasync
命令行解释:
-p 进程id
pidof 根据进程名得到进程id
-T 相对时间
-e 过滤系统调用
strace -p $(pidof redis-server) -T -tt -e "fdatasync" 2>&1 | head -10
输出
Process 59868 attached 02:50:50.671717 fdatasync(13) = 0 <0.000985> 02:50:50.680681 fdatasync(13) = 0 <0.000894> 02:50:50.688486 fdatasync(13) = 0 <0.000490> ... 02:50:50.705096 fdatasync(13) = 0 <0.000466> 02:50:50.709080 fdatasync(13) = 0 <0.000475> 02:50:50.713067 fdatasync(13) = 0 <0.000470>
结论: 设置 appendfsync 为always 时,每次写操作都会调用一次fdatasync。这种情况数据最安全,但
由于每会执行fdatasync, 因此性能最差。
当设置为appendfsync everysec 时,我在测试机上也执行同样的命令
strace -p $(pidof redis-server) -T -tt -e "fdatasync" 2>&1 。 结果strace 死活
都无法输出「fdatasync」 。后来想到这个命令只是展示redis主线程里所有的fdatasync。不包括fork
出来的子进程的「fdatasync」。 所以当设置 「appendfsync everysec」时。strace 命令务必
加 「 -f 」选项
strace -p $(pidof redis-server) -f -T -tt -e fdatasync
输出结果
[pid 54973] 07:47:10.082237 fdatasync(6) = 0 <0.002964> [pid 54973] 07:47:11.091494 fdatasync(6) = 0 <0.002958> [pid 54973] 07:47:12.098606 fdatasync(6) = 0 <0.003093> [pid 54973] 07:47:13.004418 fdatasync(6) = 0 <0.005337> [pid 54973] 07:47:14.008431 fdatasync(6) = 0 <0.003520> [pid 54973] 07:47:15.012835 fdatasync(6) = 0 <0.005906> [pid 54973] 07:47:16.016416 fdatasync(6) = 0 <0.003066> [pid 54973] 07:47:17.023678 fdatasync(6) = 0 <0.003277> [pid 54973] 07:47:18.027549 fdatasync(6) = 0 <0.003180>
当 「appendfsync 为 everysec。redis会每秒进行一次fdatasync的系统调用。将缓冲区的数据写到磁盘。这一操作在大多数数据库系统中被称之为 「group commit」,就是组合多次写操作的数据,一次性将日志写入到磁盘。
Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/9148.html
摘要:会每秒进行一次的系统调用。这一操作在大多数数据库系统中被称之为就是组合多次写操作的数据,一次性将日志写入到磁盘。 通过strace 监控 Redis AOF文件的系统调用 Redis中主要的AOF设置 「appendonly yes」 开启每次更新操作后进行日志记录 「appendfilename appendonly.aof」 AOF的文件名 「 appendfsync ever...
摘要:会每秒进行一次的系统调用。这一操作在大多数数据库系统中被称之为就是组合多次写操作的数据,一次性将日志写入到磁盘。 通过strace 监控 Redis AOF文件的系统调用 Redis中主要的AOF设置 「appendonly yes」 开启每次更新操作后进行日志记录 「appendfilename appendonly.aof」 AOF的文件名 「 appendfsync ever...
摘要:文件状态监控其中跟文件状态监控相关的参数表明上次保存以后改变的次数表示当前是否在进行操作。允许分配超出物理内存加上交换内存的请求内核总是返回的数据回写机制分为两种同步回写即命令。最好的办法是扩大物理内存。 redis 主从复制 Redis主从复制的原理 当建立主从关系时,slave配置slaveof 。slave服务器会向主服务器发送一个sync命令。master接受并fork一个...
摘要:是一个非常火的非关系型数据库,火到什么程度呢只要是一个互联网公司都会使用到。相关的问题可以说是面试必问的下面我从个人当面试官的经验,总结几个必须要掌握的知识点。取指定的值的长度。 showImg(https://user-gold-cdn.xitu.io/2018/9/13/165d0e6e66786d76?w=640&h=360&f=png&s=54383);Redis是一个非常火的...
阅读 2382·2021-10-09 09:43
阅读 3590·2021-09-27 13:35
阅读 801·2021-09-24 09:48
阅读 2647·2021-09-22 15:42
阅读 2137·2021-09-22 15:28
阅读 3032·2019-08-30 15:43
阅读 2486·2019-08-30 13:52
阅读 2866·2019-08-29 12:48