我刚刚在 VPS 上安装了 AMP 堆栈。我登录到 mysql 控制台,发现查询速度非常慢。一个更新查询,针对约 200 行的表中的 1 行,需要 0.5 秒才能完成(在我的 Windows 笔记本电脑上,同样的查询需要 0.001 秒才能完成)。
我认为这与 VPS 没有足够的资源有关,但在做了一些基准测试之后,即 I/O:
1073741824 bytes (1.1 GB) copied, 14.207 s, 75.6 MB/s
avg-cpu: %user %nice %system %iowait %steal %idle
0.01 0.00 0.00 0.03 0.00 99.96
以及 PHP 基准测试脚本,似乎资源没有问题。PHP 基准测试脚本在 5 秒内完成,而我的配备 SSD 的 i7 笔记本电脑花了 17 秒才完成。
知道可能哪里出了问题吗?
答案1
一些测试和问题太长而无法评论:
您使用什么引擎来制作这张表(SHOW CREATE TABLE tablename\G
请在底部寻找 ENGINE)?
缓存预热后性能是否会提高(也就是说,如果使用略有不同的更新数据运行两次查询,第二次运行是否会更快)?
你能列出你的 my.cnf 的内容吗?
strace -cp $(pidof mysqld)
在运行 的同时运行 ,您会得到什么UPDATE
?为此,请运行 strace ,然后运行查询,然后在 strace 上按 CTRL-C 。它会吐出一些非常方便的值。
如果只能让我猜一次,我会猜你没有 skip-name-resolve,并且你连接的地址既不响应反向 DNS 也不响应正向 DNS(或者你的resolv.conf
配置有误)。但是,如果没有上述要求的信息,这纯粹是瞎猜。简单测试:连接第一的(即mysql
使用适当的主机和端口参数运行 CLI),然后从该交互式会话中运行您的程序UPDATE
,并查看整体速度是否比以批处理模式运行查询更快-e
。
答案2
问题没有解决。我更换了托管服务提供商并获得了预期的结果。我找不到最初导致问题的原因。