谷歌云SQL非常缓慢

11

我考虑将我的网站迁移到Google Cloud SQL,并注册了一个免费账户(D32)。

在测试一个有23k条记录的表时,性能非常差,因此我阅读到如果从免费账户升级到全付费账户,就可以访问更快的CPU和HDD......于是我这样做了。

性能仍然非常差。

我已经运行自己的MySQL服务器多年了,根据需要升级以处理越来越多的连接并获得原始速度(由于遗留应用程序需要)。我高度优化表、配置和大量使用查询缓存等。

我们遗留系统的一些页面每页有超过1.5k的查询,目前我能够将mysql查询时间(执行和提取数据)下降到3.6秒,这意味着MySQL需要约0.0024秒来执行查询并返回值..对于这些页面来说不是最棒的,但还算可以接受。

我上传包含这些很多查询的表格到了Google Cloud SQL。我注意到插入操作需要几秒钟而不是毫秒级别...但是我认为这可能是“同步”与“异步”设置的问题。我将其更改为“异步”,但插入的执行时间似乎没有变化。暂时没有大问题,我现在只是在测试查询。

我运行一个简单的select * FROM <table>,发现它需要超过6秒钟...我想也许是查询缓存需要构建...然后我再次尝试,这次只需要4秒钟(不包括网络流量)。我在重新启动后并且没有任何连接的情况下,在我的备份服务器上运行同样的查询,只需要不到1秒钟的时间...再次运行,只需0.06秒。

也许问题在于缓存太大了......那就试试更小的子集

select * from <table> limit 5;

  • 对于我的服务器:0.00秒
  • GCS:0.04秒

所以我决定在一个空表上试一下愚蠢的选择,完全没有记录,只有一个字段

  • 对于我的服务器:0.00秒
  • GCS:0.03秒

分析似乎没有提供任何见解,除了在Google Cloud SQL上没有运行查询缓存,并且查询执行似乎更快但实际上并非如此......

我的服务器:

mysql> show profile;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000225 |
| Waiting for query cache lock   | 0.000116 |
| init                           | 0.000115 |
| checking query cache for query | 0.000131 |
| checking permissions           | 0.000117 |
| Opening tables                 | 0.000124 |
| init                           | 0.000129 |
| System lock                    | 0.000124 |
| Waiting for query cache lock   | 0.000114 |
| System lock                    | 0.000126 |
| optimizing                     | 0.000117 |
| statistics                     | 0.000127 |
| executing                      | 0.000129 |
| end                            | 0.000117 |
| query end                      | 0.000116 |
| closing tables                 | 0.000120 |
| freeing items                  | 0.000120 |
| Waiting for query cache lock   | 0.000140 |
| freeing items                  | 0.000228 |
| Waiting for query cache lock   | 0.000120 |
| freeing items                  | 0.000121 |
| storing result in query cache  | 0.000116 |
| cleaning up                    | 0.000124 |
+--------------------------------+----------+
23 rows in set, 1 warning (0.00 sec)

谷歌云 SQL:

mysql> show profile;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000061 |
| checking permissions | 0.000012 |
| Opening tables       | 0.000115 |
| System lock          | 0.000019 |
| init                 | 0.000023 |
| optimizing           | 0.000008 |
| statistics           | 0.000012 |
| preparing            | 0.000005 |
| executing            | 0.000021 |
| end                  | 0.000024 |
| query end            | 0.000007 |
| closing tables       | 0.000030 |
| freeing items        | 0.000018 |
| logging slow query   | 0.000006 |
| cleaning up          | 0.000005 |
+----------------------+----------+
15 rows in set (0.03 sec)

请记住,我从位于弗吉尼亚州的服务器远程连接到两个服务器,并且我的服务器位于德克萨斯州(即使这可能并不重要)。

我做错了什么?为什么简单的查询要花这么长时间?我是否遗漏或不理解某些内容?

目前我将无法使用Google Cloud SQL,因为具有1500个查询的页面将需要太长时间(大约45秒)。


我已经发送了邮件到同样的邮箱地址,但是在我发布这条留言之后,我还没有收到回复。 - Fabrizio
这个有更新了吗?查询缓存似乎是一个很明显需要启用的功能。想知道它是否被支持/何时支持等。 - Sean
@Fabrizio,请问这个问题解决了吗?我做了搜索并看到了这篇帖子,想知道是否已经解决,因为我的公司愿意将我们的应用程序迁移到云端,我推荐使用谷歌云和谷歌云SQL。 - I.Tyger
1
@I.Tyger,我们测试了亚马逊并获得了更好的结果,延迟仍然很低,但比谷歌好多了。 - Fabrizio
2
有经验的确切结果。在迁移到 GCS 后,需要 15 秒才能加载需要 1 秒才能加载的页面。发现有漏洞的代码会重复查询数百次,但这仅将负载时间降至 4 秒。只需将其移动到 GCS,就可以从 1 秒到 4 秒。没有 CPU 峰值,没有 IO 峰值,Web 应用机器上没有 CPU 使用率。 - chugadie
显示剩余7条评论
2个回答

2

我知道这个问题很老了,但是...

CloudSQL 对 MyISAM 表的支持很差,建议使用 InnoDB。

我们在迁移遗留应用程序时遇到了性能问题,在阅读文档和联系付费支持后,我们不得不将表迁移到 InnoDB;没有查询缓存也是一个致命因素。

您可能还会发现后来需要通过 Google 控制台中的“标志”调整 mysql 配置。例如,“wait_timeout”默认设置过高(依我之见)。

希望这对某些人有所帮助 :)


-3

查询缓存目前还不是Cloud SQL的一个功能。这可能解释了结果。然而,我建议关闭这个问题,因为它非常广泛,不符合整洁的问答格式。在Q&A中没有提到太多变量,也不清楚当有这么多变量参与优化时,一个决定性的“答案”会是什么样子。


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