谷歌云: MySQL查询非常缓慢

3

在将我的应用部署到Google Cloud后,出现了非常大的延迟,超过5秒。搜索问题后,发现MySQL数据库上的查询是问题所在,并且执行时间非常长。

以下是来自同一数据库在不同服务器上的示例。命令直接通过ssh 在sql服务器上发出:

select * from tbl1;
local - 54343 rows in set (0.14 sec)
shared hosting - 54343 rows in set (0.89 sec)
google - 54343 rows in set (26.73 sec)

select * from tbl2;
local - 132 rows in set (0.00 sec)
shared hosting - 132 rows in set (0.01 sec)
google - 132 rows in set (0.20 sec)

select * from tbl3 inner join tbl4 ON tbl4.tbl3_id = tbl3.id;
local - 746 rows in set (0.00 sec)
shared hosting - 746 rows in set (0.12 sec)
google - 746 rows in set (0.95 sec)

我正在使用D1,但也尝试了D32层级,但没有得到更好的结果。我正在使用默认设置(标志等)。你认为会引起问题的原因是什么?此外,我已经尝试过异步文件系统复制,关闭一些日志标志。


向Google投诉。这是糟糕的表现。 - Rick James
快速问题:tbl1是InnoDB格式吗? - Razvan Musaloiu-E.
是的,所有的表都是使用InnoDB存储引擎,也尝试过MyISAM,但结果类似。 - Filip Zelic
1个回答

1

考虑到您的本地查询时间非常短,即使对于非常大的数据行数,我怀疑查询缓存可能在起作用。

请尝试使用 SQL_NO_CACHE 在本地和远程都运行您的查询,就像这样:

select sql_no_cache * from tbl3 inner join tbl4 ON tbl4.tbl3_id = tbl3.id;

如果这样做可以使查询时间均匀,那么很可能 Google 服务器上没有配置查询缓存。启用它可能是一个好的开始,但是,如果您的查询经常需要多秒钟才能完成,那么您需要考虑优化它们。

8.8.1 使用 EXPLAIN 优化查询


1
我尝试了选择具有约50,000行的tbl1的sql_no_cache 。我得到的结果(本地/当前服务器/谷歌)为0.20 / 0.40 / 24,或类似的查询(0.04 / 0.10 / 1.9)。我不认为这些查询是问题,我应该获得类似的结果,在简单的选择查询中,50000行不超过20秒的差异。此外,我认为Google云SQL服务器不支持查询缓存,至少我找不到打开它的方法。 - Filip Zelic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接