为什么连接到我的 InnoDB 数据库经常延迟整数秒?
一些背景
我有一个非常小的 MySQL 数据库,由一个表“users”(150 条记录)和一个表“connections”(增长到 150*150 条记录)组成。表和索引加起来不到 5 MB。
当用户处于事件状态时,“连接”中的 5-50 条记录将被更改(权重已更改)或添加(如果它们尚不存在)。整个应用运行流畅,加载时间低于 ~100 毫秒。
除非他们不是。
详情
即使在非常小的负载下,页面加载时间也会从 60 毫秒激增至 1,000 毫秒到 10,000 毫秒之间。
使用 Symfony 中的分析器,我可以在“getRepository”语句上确定 95% 以上的延迟,而查询每次查询仅花费 1 毫秒。这让我相信连接到数据库是一个缓慢的 Action 。我写了一个定期连接到数据库的帮助脚本来测试这个理论。
<?php // call this script commandline using watch
$a = microtime(true);
$pdo = new PDO('mysql:host=127.0.0.1;dbname=mydb','myuser','mypass');
file_put_contents( 'performance.txt', (microtime(true)-$a).PHP_EOL, FILE_APPEND );
谜团
连接到数据库持续花费 1-3 毫秒,或 1,001-1,003 毫秒,或 2,001-2,003 毫秒,或 3,001-3,003 毫秒,等等。整数秒加上正常时间。介于两者之间,例如 400 毫秒或 800 毫秒。由于没有写入,连接几乎是立即建立的。一旦通过应用程序执行了一些写入,就会达到更高的数字。
是什么导致了这种行为? InnoDB page_cleaner 似乎每 1,000 毫秒执行一次它的工作,也许这是部分解释?
更重要的是,我该如何解决这个问题?我正在考虑切换到 MEMORY 表,但我认为应该提供更优雅的选项。
编辑
应要求,the variables and global status .
附加信息:我直接连接到 127.0.0.1(参见上面的代码片段)并且我测试了 skip-name-resolve 标志,但没有效果。顺便说一下,它是一个 Debian 服务器。
编辑 2
我发现延迟是 1、3、7 或 15 秒。注意模式:1 秒,+2s,+4s,+8s。这看起来确实是一些超时问题......
最佳答案
反向dns 查找需要很长时间是很常见的。随着 host_cache 的大小,它可能会导致不稳定的行为。
通过将其添加到 my.cnf 来关闭它
[mysqld]
skip-name-resolve
请注意,如果您更改此设置,则所有授权都必须按 ip,而不是按名称。
在 manual 中还有更多内容需要阅读
关于php - 连接到 MySQL 数据库慢,需要 n 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42277370/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD