innodb_flush_method的几个典型取值
fsync: InnoDB uses the fsync() system call to flush both the data and log files. fsync is the default setting. O_DSYNC: InnoDB uses O_SYNC to open and flush the log files, and fsync() to flush the data files. InnoDB does not use O_DSYNC directly because there have been problems with it on many varieties of Unix. O_DIRECT: InnoDB uses O_DIRECT (or directio() on Solaris) to open the data files, and uses fsync() to flush both the data and log files. This option is available on some GNU/Linux versions,FreeBSD, and Solaris.
如何取值,mysql官方文档是这么建议的
How each settings affects performance depends on hardware configuration and workload. Benchmark your particular configuration to decide which setting to use, or whether to keep the default setting. Examine the Innodb_data_fsyncs status variable to see the overall number of fsync() calls for each setting. The mix of read and write operations in your workload can affect how a setting performs. For example, on a system with a hardware RAID controller and battery-backed write cache, O_DIRECT can help to avoid double buffering between the InnoDB buffer pool and the operating system's file system cache. On some systems where InnoDB data and log files are located on a SAN, the default value or O_DSYNC might be faster for a read-heavy workload with mostly SELECT statements. Always test this parameter with hardware and workload that reflect your production environment
也就是说,具体的取值跟硬件配置和工作负载相关,最好做一次压测来决定。不过通常来说,linux环境下具有raid控制器和write-back写策略,o_direct是比较好的选择;如果存储介质是SAN,那么使用默认fsync或者osync或许更好一些。
通常来说,貌似绝大部分人都取值o_direct,底层有raid卡,读写策略设置为write-back。在使用sysbench压测oltp类型时,我发现o_direct确实比fsync性能优秀一些,看来适用于大部分场景,但是最近碰到一个这样的sql,客户反馈很慢,而在相同内存的情况下,它自己搭建的云主机执行相对快很多,后来我发现主要就是innodb_flush_method的设置值不同带来的巨大性能差异。
测试场景1
innodb_flush_method为默认值,即fsync,缓存池512M,表数据量1.2G,排除缓存池影响,稳定后的结果
mysql> show variables like '%innodb_flush_me%'; +---------------------+-------+ | Variable_name | Value | +---------------------+-------+ | innodb_flush_method | | +---------------------+-------+ 1 row in set (0.00 sec) mysql> SELECT sql_no_cache SUM(outcome)-SUM(income) FROM journal where account_id = '1c6ab4e7-main'; +--------------------------+ | SUM(outcome)-SUM(income) | +--------------------------+ | -191010.51 | +--------------------------+ 1 row in set (1.22 sec) mysql> SELECT sql_no_cache SUM(outcome)-SUM(income) FROM journal where account_id = '1c6ab4e7-main'; +--------------------------+ | SUM(outcome)-SUM(income) | +--------------------------+ | -191010.51 | +--------------------------+ 1 row in set (1.22 sec) mysql> explain SELECT sql_no_cache SUM(outcome)-SUM(income) FROM journal where account_id = '1c6ab4e7-main'; +----+-------------+---------+------+---------------+------------+---------+-------+--------+-----------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+---------------+------------+---------+-------+--------+-----------------------+ | 1 | SIMPLE | journal | ref | account_id | account_id | 62 | const | 161638 | Using index condition | +----+-------------+---------+------+---------------+------------+---------+-------+--------+-----------------------+ 1 row in set (0.03 sec)
测试场景2
innodb_flush_method改为o_direct,排除缓存池影响,稳定后的结果
mysql> show variables like '%innodb_flush_me%'; +---------------------+----------+ | Variable_name | Value | +---------------------+----------+ | innodb_flush_method | O_DIRECT | +---------------------+----------+ 1 row in set (0.00 sec) mysql> SELECT sql_no_cache SUM(outcome)-SUM(income) FROM journal where account_id = '1c6ab4e7-main'; +--------------------------+ | SUM(outcome)-SUM(income) | +--------------------------+ | -191010.51 | +--------------------------+ 1 row in set (3.22 sec) mysql> SELECT sql_no_cache SUM(outcome)-SUM(income) FROM journal where account_id = '1c6ab4e7-main'; +--------------------------+ | SUM(outcome)-SUM(income) | +--------------------------+ | -191010.51 | +--------------------------+ 1 row in set (3.02 sec) mysql> explain SELECT sql_no_cache SUM(outcome)-SUM(income) FROM journal where account_id = '1c6ab4e7-main'; +----+-------------+---------+------+---------------+------------+---------+-------+--------+-----------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+---------------+------------+---------+-------+--------+-----------------------+ | 1 | SIMPLE | journal | ref | account_id | account_id | 62 | const | 161638 | Using index condition | +----+-------------+---------+------+---------------+------------+---------+-------+--------+-----------------------+ 1 row in set (0.00 sec)
结果比较:
两者执行计划一摸一样,性能却差距很大。在数据库第一次启动时的查询结果也差距很大,o_direct也差很多(测试结果略)。不是很懂为啥这种情况下多了一层操作系统缓存,读取效率就高了很多,生产环境设置一定要以压测结果为准,实际效果为准,不能盲目信任经验值。
改进措施:
不改变innodb_flush_method的情况下,其实这条sql还可以进一步优化,通过添加组合索引(account_id,outcome,income),使得走覆盖索引扫描,可大大地减少响应时间
以上这篇innodb_flush_method取值方法(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# innodb
# flush
# method
# 给大家
# 情况下
# 几个
# 我发现
# 还可以
# 而在
# 适用于
# 不是很
# 这条
# 希望能
# 比较好
# 经验值
# 这篇
# 设置为
# 高了
# 查询结果
# 很慢
# 小编
# 启动时
# 大家多多
相关文章:
想学网站制作怎么学,建立一个网站要花费多少?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何零成本快速生成个人自助网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站之星IIS配置教程:代码生成技巧与站点搭建指南
制作网站怎么制作,*游戏网站怎么搭建?
香港服务器选型指南:免备案配置与高效建站方案解析
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
济南专业网站制作公司,济南信息工程学校怎么样?
青岛网站建设如何选择本地服务器?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
,sp开头的版面叫什么?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
详解jQuery中基本的动画方法
高端建站三要素:定制模板、企业官网与响应式设计优化
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站主机功能解析:服务器选择与快速搭建指南
已有域名和空间,如何快速搭建网站?
如何在香港服务器上快速搭建免备案网站?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
h5在线制作网站电脑版下载,h5网页制作软件?
如何快速搭建个人网站并优化SEO?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
c# 在高并发下使用反射发射(Reflection.Emit)的性能
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Thinkphp 中 distinct 的用法解析
C++中引用和指针有什么区别?(代码说明)
网站图片在线制作软件,怎么在图片上做链接?
如何在阿里云域名上完成建站全流程?
建站VPS配置与SEO优化指南:关键词排名提升策略
如何快速登录WAP自助建站平台?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
济南企业网站制作公司,济南社保单位网上缴费步骤?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
孙琪峥织梦建站教程如何优化数据库安全?
郑州企业网站制作公司,郑州招聘网站有哪些?
长沙做网站要多少钱,长沙国安网络怎么样?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何在建站宝盒中设置产品搜索功能?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何通过远程VPS快速搭建个人网站?
网站制作公司排行榜,四大门户网站排名?
香港服务器如何优化才能显著提升网站加载速度?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
网站插件制作软件免费下载,网页视频怎么下到本地插件?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何通过NAT技术实现内网高效建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。