Cloud SQL比localhost服务器慢

时间:2018-04-03 16:42:51

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

我无法理解为什么Cloud SQL比我的localhost 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模型处理模型的appender,它们向另一个API REST发出一些请求,并为结果集中的每个模型执行此操作。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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