首页 > 解决方案 > 如何优化我的 Google Cloud SQL (MySQL) 数据库以与 API 一起使用

问题描述

我在 Google Cloud Platform 中创建了一个 MySQL 数据库。

Machine type is db-n1-standard-2 with 2 vCPUs and 7.5 GB Memory. 
Network throughput (MB/s) is 500 of 2000
Storage type: SSD

Disk throughput (MB/s)
Read: 4.8
Write 4.8
IOPS
Read: 300
Write: 300

Availability: High availability

Database Flags:
max_connections: 500

我使用 Laravel Lumen 创建了一个 API,并让它在 Google Cloud Platform 上运行到 App Engine 中

runtime: php72
instance_class: F2
automatic_scaling:
    min_instances: 1
    max_instances: 20
    target_cpu_utilization: 0.7
    max_concurrent_requests: 80
    target_throughput_utilization: 0.8

如果我使用邮递员向我的 API 发送请求,则第一个响应需要 1123 毫秒。响应大小为 8.59 KB。

如果我在 1 分钟内使用 loader.io 向 250 个客户端发送相同的请求,则测试中止,因为它达到了错误阈值。79.5% 平均错误率 = 9141 毫秒

最小/最大响应时间为:2081/10376 响应计数成功:104 响应计数超时:403

当我查看 MySQL 错误日志时,我确实有很多这样的错误:

    2020-01-07 16:29:18.670 CET
2020-01-07T15:29:18.670275Z 1507 [Note] Aborted connection 1507 to db: 'mydatabasename' user: 'mydatabaseuser' host: 'cloudsqlproxy~172.217.35.158' (Got an error reading communication packets)

有人有想法,我该如何解决这个问题?

标签: mysqlgoogle-app-enginegoogle-cloud-sql

解决方案


我已经对此错误进行了一些调查,并在此链接上找到了一些有关如何诊断此类错误的有用指南我相信作为第一步,我们需要找到此消息的真正原因(这可能是由于各种根据共享的链接的原因),我可能会注意到在其他帖子和我之前共享的同一链接上重复的一些建议是下一个:

  • 检查以确保 max_allowed_pa​​cket 的值足够高(可以使用 Cloud SQL 中的标志进行修改)。
  • 客户端连接成功但未正确终止
  • 客户端的睡眠时间超过了定义的 wait_timeout 或 interactive_timeout 秒数

我要做的是继续并尝试按照谷歌页面上的这个公共文档中的描述调整数据库标志,并检查行为如何变化。

如果您在调整实例时发现有用的东西,请告诉我们。


推荐阅读