gpt4 book ai didi

php - 连接到 MySQL 数据库慢,需要 n 秒

转载 作者:可可西里 更新时间:2023-11-01 08:39:22 25 4
gpt4 key购买 nike

为什么连接到我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com