【发布时间】:2018-08-14 23:33:33
【问题描述】:
我一直在使用 Postgresql 测试 Google Cloud SQL,但随机查询需要大约 3 秒而不是几毫秒。
我做的故障排除:
- 查询本身没有问题,重新运行相同的查询即可。
- 索引设置正确。数据库也非常非常小,即使没有任何索引也不应该这样做。
- Kubernetes 容器通过 SQL Proxy 连接到数据库(我关注了这个https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine)。这不是问题,因为我尝试直接连接到数据库,但同样的问题。
- 我将
net.ipv4.tcp_keepalive_time配置为 60 以确保连接不会断开。 - 我还有一个永远不会断开连接的连接池,以确保它不是来自那里。
- 当我直接通过本地 Postgresql 客户端运行查询时,我从来没有遇到过问题。
- 我在本地开发并连接到本地数据库时也没有这个问题。
我的意思是:我觉得我的 Google Compute 实例和我的 Google SQL 实例之间存在一些奇怪的连接/链接问题,我似乎无法弄清楚。 有什么想法吗?
编辑:
我还每隔 30 秒在我的 SQL Cloud 实例中注意到这些日志:
ERROR: recovery is not in progress
HINT: Recovery control functions can only be executed during recovery.
STATEMENT: SELECT pg_is_xlog_replay_paused(), current_timestamp
【问题讨论】:
-
您是否多次运行相同的查询?您的查询是否包含“GROUP_BY”?这类语句需要记忆。您可能想要使用一些分析工具,例如EXPLAIN 或slow query log。如果您有使用临时文件的查询,您可能希望增加实例中 temp_file_limit flag 的值。
-
验证您的 GKE 磁盘在查询缓慢时是否遇到一些磁盘瓶颈?
-
这方面有什么更新吗?我有同样的问题。
-
这里有同样的问题。有更新吗?
-
这里有同样的问题。使用 mysql、kubernetes 和 node.js 应用程序。通常的查询时间约为 10-25 毫秒,我们每隔一段时间就会随机获得 500-1500 毫秒。
标签: postgresql google-cloud-sql