mysql - 如何优化我的 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)
有人有想法,我该如何解决这个问题?
解决方案
我已经对此错误进行了一些调查,并在此链接上找到了一些有关如何诊断此类错误的有用指南我相信作为第一步,我们需要找到此消息的真正原因(这可能是由于各种根据共享的链接的原因),我可能会注意到在其他帖子和我之前共享的同一链接上重复的一些建议是下一个:
- 检查以确保 max_allowed_packet 的值足够高(可以使用 Cloud SQL 中的标志进行修改)。
- 客户端连接成功但未正确终止
- 客户端的睡眠时间超过了定义的 wait_timeout 或 interactive_timeout 秒数
我要做的是继续并尝试按照谷歌页面上的这个公共文档中的描述调整数据库标志,并检查行为如何变化。
如果您在调整实例时发现有用的东西,请告诉我们。
推荐阅读
- github - 在 Heroku 上使用 .gitignore
- android - 创建类 viewModel 的实例时出错
- mongodb - 您可以在 mongodb 中自动创建空间索引吗?
- python - Python - Tkinter 事件生成
- sharepoint-online - Sharepoint Online 中的工作流程
- javascript - jQuery中的Addclass函数不添加类
- java - Ognl 表达式在选择标记的“列表”属性中不起作用,而在“名称”属性中工作正常
- ups - UPS 货件 JSON 文档
- c# - 将 XML 反序列化为 for 循环中的 C# 对象列表太慢
- mysql - 计算来自两个不同表的记录数并将它们分组