同事问了个线上现象:主备机器配置一样,主库上有更新查询,备库设置为主库的从库,没有其他更新和查询压力。但备库的io util比主库的重。本来看主库的压力比较大,想把一部分查询切到备库,一看io这样,不太敢切。
1、原因
这个原因两年前在之前公司碰到过一次,只是现象不同。那个现象描述起来比较复杂,这回刚好借这个现象说明一下。
原因还是从srv_master_thread说起。这个InnoDB后台的主进程一直在循环作各种事情。其中有一个for (i = 0; i < 10; i++) ,循环体每执行一次sleep 1秒,作一些flush和merge的事情,网上这类文章很多,不细数了。我们要关注的是循环中的这句话
if (srv_activity_count == old_activity_count) {
/* There is no user activity at the moment, go to
the background loop */
goto background_loop;
}
|
注释也说的明白,如果此时没有用户活动,则认为是系统空闲,执行background_loop。这个background_loop流程作的事情包括insert buffer merge和 flush buffer pool pages。 都是些耗系统资源的活儿。做完之后又回到for前面的逻辑。
而对于从库来说,一直没有用户请求,所以一进入for就符合进入background_loop的条件,所以整个线程实际上就是不停的在作background_loop里面的事情。
所以结论就是由于没有用户请求,InnoDB认为系统空闲,因此玩儿命地刷盘,看上去io就很重。
2、 验证
既然如此,就想办法告诉InnoDB:其实现在很忙。 可以简单的写个脚本不停的执行一个简单的语句,让if (srv_activity_count == old_activity_count)这条件不满足就行。比如 select sql_no_cache * from t where key = xxx limit 1;
会看到加了这脚本后,备库的io util也下去了。
3、 结论
切点查询流量去备库没有问题,反而会让备库看上去“正常” ;
InnoDB的这个判断机制有点囧,实际上有很多条件都可以比较合理的判断,不过也不是什么大问题,好歹还有些方法可以绕过的嘛,就是土了点。。。
分享到:
相关推荐
对应Maven信息:groupId:io.opentracing,artifactId:opentracing-util,version:0.33.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...
在学习过程中,可以通过编写小型项目来实践,例如创建一个文件浏览器,使用Swing展示目录结构,用户选择文件后,使用IO读取文件内容,并利用Util进行简单的数据分析。这样既能巩固理论知识,也能提升实际编程技能。
赠送jar包:common-io-3.1.1.jar; 赠送原API文档:common-io-3.1.1-javadoc.jar; 赠送源代码:common-io-3.1.1-sources.jar; 赠送Maven依赖信息文件:common-io-3.1.1.pom; 包含翻译后的API文档:common-io-...
Maven坐标:io.opentracing:opentracing-util:0.33.0; 标签:opentracing、util、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...
理解java.util.stream.Stream与java.io.Stream的区别对于Java开发者来说非常重要。这两种Stream在Java生态系统中都扮演着重要的角色,但它们服务于不同的目的。正确选择和使用这两种Stream,可以帮助你编写更高效、...
Maven坐标:org.mortbay.jetty:jetty-util:6.1.26; 标签:util、mortbay、jetty、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...
context:property-placeholder 和util:properties 博客:https://blog.csdn.net/u010476739/article/details/76735527
acl_mysql_util是一个针对MySQL数据库和ACL(Access Control List,访问控制列表)的实用工具库,它为开发者提供了方便的接口,以便在应用中更高效、更安全地进行数据操作。这个库是基于MySQL的原生接口进行封装,...
在实际项目中,`mysql-util`模块适用于各种场景,如Web应用程序的数据后台、数据分析工具或自动化脚本。它可以帮助开发者更安全、高效地处理数据库操作,减少出错的可能性,并提高代码的可维护性。 总之,`mysql-...
kotlin-util-io.jar
本文将深入探讨Java API中的IO、Lang、Util包涉及的一些关键类和方法,帮助开发者更好地理解和利用这些工具。 一、异常处理 在Java中,异常是程序运行时遇到的错误。通过try-catch语句块,我们可以捕获并处理这些...
常用的dao层工具类,包括数据库连接池,连接路径。mysql,sqlserver,orecal三大数据库连接池
Maven坐标:org.eclipse.jetty:jetty-util:9.4.43.v20210629; 标签:eclipse、jetty、util、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
Maven坐标:org.apache.kerby:kerby-util:1.0.1; 标签:apache、kerby、util、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...
mysql-查询-实用程序 用于 mysql 和 nodejs 的简单轻量级实用程序模块。 这个插件帮助构建具有更相关语法的 mysql 查询,就像大多数非 sql 数据库管理系统一样。 它是一个可通过 npm 注册表获得的模块,因此请务必...
Maven坐标:org.mortbay.jetty:jetty-util:6.1.26; 标签:util、mortbay、jetty、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
Maven坐标:org.apache.kerby:kerby-util:1.0.1; 标签:apache、kerby、util、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...
Maven坐标:org.apache.kerby:kerb-util:1.0.1; 标签:apache、kerby、kerb、util、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...
本文将深入探讨“topolr-util”这一前端开源库,它专为前端开发者提供了一系列实用的工具函数,旨在提升开发效率,简化代码逻辑。通过对“topolr-util”的了解和应用,我们可以更好地理解和掌握现代前端开发中的实用...
Util.js 是一个非常实用的JavaScript库,它封装了一系列常见的功能函数,旨在简化开发过程,提高代码的可复用性和效率。这个库涵盖了多种类别,包括处理数组、浏览器特性、日期操作、函数辅助、数学计算、媒体操作、...