【问题标题】:Cloud SQL marginally slower than localhost serverCloud SQL 比本地主机服务器稍慢
【发布时间】:2018-04-03 16:42:51
【问题描述】:

我很难理解为什么 Cloud SQL 比我的本地 MySQL 服务器慢一点。

我可以接受配置之间可能会发生一些变化,但是...

在 localhost 中,只需要 240 毫秒即可完成一个查询,该查询仅返回一个表中的所有记录及其关系(只有 90 条记录),而在 Cloud SQL 中几乎需要 30 秒。它就像 28kb 的数据。

我在 Laravel 5.5 中使用 PHP。根据所有 GCP 文档,我拥有所需的所有配置。

我认为不是配额问题。

使用第二代 Cloud SQL 并从具有自动缩放功能的 App Engine flex 环境连接。

我确实将 Cloud SQL 实例的服务器规格提高到了 1.7 GB RAM。我不认为这是与服务器性能相关的问题...

谢谢。


编辑

这令人困惑。

我正在调试正在执行的原始 SQL 字符串,当我使用 DD 进行调试时,我正在阻止 JSON 响应,它只需要 1 秒。由于某种我无法理解的原因,好多了。

这个结局更快

DB::enableQueryLog();

Contact::with([
    'rooms',
    'bathrooms',
    'parkingLots',
    'generalInterests',
    'locationInterests',
    'strongInterests',
    'phonePrefix',
    'source',
    'contactType'
])->get();

dd(DB::getQueryLog());

return new JsonResponse([
    'query' => 'all',
    'results' => Contact::with([
        'rooms',
        'bathrooms',
        'parkingLots',
        'generalInterests',
        'locationInterests',
        'strongInterests',
        'phonePrefix',
        'source',
        'contactType'
    ])->get()
], 200);

而这只是需要同样长的时间

DB::enableQueryLog();

Contact::with([
    'rooms',
    'bathrooms',
    'parkingLots',
    'generalInterests',
    'locationInterests',
    'strongInterests',
    'phonePrefix',
    'source',
    'contactType'
])->get();

Log::debug(print_r(DB::getQueryLog(), true));

return new JsonResponse([
    'query' => 'all',
    'results' => Contact::with([
        'rooms',
        'bathrooms',
        'parkingLots',
        'generalInterests',
        'locationInterests',
        'strongInterests',
        'phonePrefix',
        'source',
        'contactType'
    ])->get()
], 200);

如您所见,唯一的区别是是否达到了回报。


编辑 2

发现问题

事实证明,当返回 JSON 响应时,Eloquent 模型会处理模型的附加程序,这些附加程序会向另一个 API REST 发出一些请求,并且它会为结果集中的每个模型执行此操作。

在 localhost 中,相同的操作只是在发出请求之前返回 null。所以,这是我的问题。

与 MySQL、GCP、Laravel 或 PHP 无关。只是我自己的愚蠢。

非常感谢您花时间阅读这个荒谬的问题。我最诚挚的歉意。

【问题讨论】:

  • Asier Paz Martínez 我可以请您发布解决方案作为答案吗?
  • 没有涉及上述任何技术的解决方案。问题是在 localhost 中,appender 函数没有执行 API 请求,而在生产中它执行了。所以有区别。

标签: mysql google-cloud-platform laravel-5.5 google-cloud-sql php-7.2


【解决方案1】:

您是否检查过 Internet 连接的吞吐量?这是您的 2 个环境之间的主要区别。确定原因的其他方法包括:直接从 SQL 运行查询、检查您的日志(尤其是 SQL DB 日志)、从另一个位置尝试相同的查询。

根据我的经验,直接从 SQL 运行查询可能会给您最好的帮助。只是一个基本的SELECT * from my_table;,看看需要多长时间。我在 Google 网站上找到了这个 document,它可能会帮助您进行调查和调整提示。它提到了 AppEngine 的限制,但是有了这么多的数据,我认为您不会遇到任何这些限制。

【讨论】:

  • 首先感谢您花时间回答。如果我直接使用 mysql 客户端进行查询,它们会花费预期的时间。我也看过几次那个文件,但一点帮助都没有。
  • 哇。嗯,在那种情况下,我不认为它是数据库本身。我不是 AppEngine 专家,但这些迹象表明您的应用中的某个组件存在问题,以及它与 AppEngine 的关系。
猜你喜欢
  • 1970-01-01
  • 2020-07-24
  • 2011-06-05
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
相关资源
最近更新 更多