在谷歌云上部署后,我的应用程序有非常大的延迟,超过5秒。搜索问题后,发现MySQL数据库上的查询是问题所在,并且执行时间很长。
以下是来自不同服务器上比较的同一数据库中的一些示例。这些命令直接在 sql 服务器上通过 ssh 发出:
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 层,但没有获得更好的结果。我正在使用默认设置(标志等)。您认为可能导致问题的原因是什么?我也尝试了异步文件系统重新,关闭了一些日志记录标志。
鉴于您的本地查询时间如此之短,即使对于非常多的行,我怀疑查询缓存可能在这里发挥作用。
使用以下SQL_NO_CACHE在本地和远程尝试查询:
从 TBL3 内部连接中选择 sql_no_cache * tbl4.tbl3_id = tbl3.id;
如果这平衡了时间,则可能是没有在 Google 服务器上配置查询缓存。 启用它可能会给您一个良好的开端,但是,如果您经常需要几秒钟的查询,您可能需要考虑优化它们。
8.8.1 使用 EXPLAIN 优化查询