我从旧的专用服务器上的基于联接和视图的策略切换到了谷歌云的多个小查询策略。对我来说,这也更容易维护,在我的开发机器上没有明显的性能差异。但在我的应用程序引擎和云SQL上,它真的很慢。
例如,如果我想查询最后50篇文章,在我的开发机器上需要4-5秒,时间为160ms。每篇文章至少有12个查询,平均有15个查询。这是大约750个查询,如果我监视Cloud SQL,我注意到它的上限总是每秒大约200个查询。CPU只占20%,我只有一个带SSD的db-n1-standard-1。每秒200次查询也意味着,如果我想获得最后100篇文章,需要8-9秒,以此类推
我已经尝试将应用程序引擎实例类设置为F4,看看这是否会改变什么。它没有改变任何东西,数字不变。我没有尝试增加DB实例,因为我看不出它已经达到了极限。
该怎么办?
软件:我使用GO和一个无限的mysql连接池。
编辑:我甚至换成了db-n1-standard-2实例,没有什么区别:(
编辑2:我在周末尝试了一些改变,1500 iops,4核,等等,但没有显示出预期的改善。使用情况图表已经表明没有"硬件"限制。我设法隔离了这个缓慢的查询。。。这是一个超级简单的例子,我通过country-ISO2和language-ISO3查询国家名称,这两个键都有索引,但EACH仍然需要50ms。所以我只是把所有的countires缓存在memcache中,然后就完成了。
Google Cloud SQL使用GCE VM实例,因此适用于GCE的东西也适用于Cloud SQL。
当您创建db-n1-standard-1
实例时,您的CPU会将网络吞吐量设置为250 MB/s,但您的读/写(a(磁盘吞吐量和(b(IOPS速度受存储容量和类型的限制,即:
- 写入:4.8ᵅ|300ᵇ
- 阅读:4.8ᵅ|300ᵇ
如果实例中缺少任何内容,您可以查看详细信息:
https://console.cloud.google.com/sql/instances/[实例名称]
如果您想提高实例的性能,请按照上面链接中的建议增加其vCPU的数量和存储容量/类型。