0

0

Redis如何权衡AOF的IO性能_在everysec策略下利用异步线程执行fsync

P粉602998670

P粉602998670

发布时间:2026-03-19 12:14:00

|

628人浏览过

|

来源于php中文网

原创

Redis AOF everysec 模式下 fsync 并非严格每秒一次,而是主线程立即提交 fsync 请求至后台线程,实际执行依赖内核 writeback 线程、I/O 负载及脏页参数,可能延迟甚至失败。

redis如何权衡aof的io性能_在everysec策略下利用异步线程执行fsync

Redis AOF everysec 模式下 fsync 真的是“每秒一次”吗?

不是。everysec 只保证 fsync 调用被提交到内核队列的频率上限,不保证实际落盘时间——它依赖内核线程 pdflush(旧内核)或 writeback(4.0+)异步执行,且受 I/O 压力、脏页比例、vm.dirty_ratio 等系统参数影响。

常见错误现象:INFO persistenceaof_delayed_fsync 持续增长;磁盘 I/O 尖峰时 AOF 写入延迟飙升;重启后发现最后几秒命令丢失(说明 fsync 实际未完成)。

  • everysec 是 Redis 主线程把数据写入 AOF 缓冲区后,**立即**把 fsync 请求交给后台线程,主线程不阻塞
  • 后台线程调用 fsync(),但该系统调用本身可能被内核排队,尤其当磁盘忙或脏页过多时
  • 如果后台线程连续两次尝试 fsync 都失败(超时或 EAGAIN),Redis 会退化为 no 模式,直到下个周期重试成功

如何确认当前 fsync 是否真在异步执行?

redis-cli info persistence 的三个关键字段:

  • aof_last_fsync:上一次成功 fsync 的 Unix 时间戳(注意是秒级,不是毫秒)
  • aof_delayed_fsync:因 fsync 正在进行中而被跳过的写操作次数(> 0 表示有排队,但不等于失败)
  • aof_pending_bio_fsync:等待后台 BIO 线程执行的 fsync 请求数(> 0 才说明异步队列里真有积压)

如果 aof_pending_bio_fsync 长期 > 0,同时 aof_delayed_fsync 也在涨,说明后台线程跟不上,I/O 已成瓶颈。

everysec 下哪些配置会影响 fsync 实际表现?

Redis 自身配置作用有限,真正起决定性作用的是 Linux 内核 I/O 调度与脏页管理策略:

  • vm.dirty_ratiovm.dirty_background_ratio:值设得过高(如默认 20/10),会导致内核延迟刷脏页,间接拖慢 fsync 响应
  • 使用 deadlinenone(SSD)IO 调度器,避免 cfq 在高并发下引入额外延迟
  • fsync 本身无法绕过存储栈——NVMe 盘比 SATA SSD 平均快 3–5 倍,机械盘基本不适合 everysec
  • 不要在 AOF 文件所在磁盘挂载 noatime,nobarrier 以外的激进选项(如 data=writeback),否则可能丢数据

什么时候该放弃 everysec 改用 no 或 always?

别迷信“折中”。权衡点很实际:

  • no:只用于缓存场景,能接受进程崩溃即丢全部 AOF 缓冲区(通常几秒到几十秒),且磁盘 I/O 已严重争抢
  • always:仅限极小吞吐(QPS fsync() 上,TPS 断崖下跌
  • everysec 失效的典型信号:aof_pending_bio_fsync > 10 且持续 30 秒以上,或 aof_delayed_fsync 单秒突增超 1000 —— 这时候不如切 no,再加监控告警

真正难处理的不是 fsync 频率,而是 AOF 重写期间的双写放大:重写子进程写新 AOF,主线程继续追加老 AOF,两者共用同一块磁盘时,I/O 压力会翻倍。这个点容易被忽略,但比 everysec 的调度细节影响更大。

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

451

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

806

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

806

2023.08.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1011

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

675

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

501

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

416

2024.04.07

bootstrap安装教程
bootstrap安装教程

本专题整合了bootstrap安装相关教程,阅读专题下面的文章了解更多详细操作教程。

22

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号