【发布时间】:2013-01-03 04:55:44
【问题描述】:
我很难使用 Google Cloud SQL 获得良好的性能,我正在执行一些非常基本的 CRUD 操作,例如:
public BaseUser getUser(String token) throws SQLException{
Connection conn = DriverManager.getConnection(JDBC_CON_STRING);
PreparedStatement ps = conn.prepareStatement(GET_USER_BY_TOKEN_QUERY);
ps.setString(1, token);
ResultSet rs = ps.executeQuery();
List<BaseUser> users = inflateUser(rs);
if(users.size() == 0){
return null;
}
if(users.size() > 1){
logger.info("DATABASE MAY BE CORRUPTED, THERE'S MORE THAN 1 USER WITH THE SAME TOKEN");
}
ps.close();
rs.close();
conn.close();
return users.get(0);
}
每个查询的平均响应时间为 450 毫秒。 += 150 表示打开连接,150 表示运行,150 表示关闭。看图。下面。
我已经阅读了谷歌文档、论坛和多个博客,但仍然看不出我做错了什么(我一定是做错了什么,450 毫秒/查询太远了......)
更新 1: 我绝对是 Google Cloud SQL 问题,我安装了自己的本地 MySQL 服务器,并且性能更好(“插入或更新”为 80 毫秒,然后选择最后提交。),希望我能从谷歌开发者那里得到一些提示。团队,我真的很喜欢整个谷歌云平台,但在这种延迟水平下工作简直是不可能的 =(
更新 2:2014/05/06 延迟问题与 D0 或 D16 相同。由于延迟,尝试从 Google ComputeEngine VM 插入 10000 行(3 个 varchar 和一个 ~100bytes blob)需要 32 秒。 10000 次插入和单个批量插入的持续时间相同。如果我使用 64 个线程,那么持续时间将降至 3 秒。我用原生的mysql jdbc驱动测试过。
有什么建议吗? 谢谢!
【问题讨论】:
-
您确定您的架构索引正确吗?
-
这是一个包含 +- 15 列和一个二级索引的测试表。我想它一定很好。另外,请注意连接和关闭操作需要超过 100 毫秒,这是不正常的......
-
您是否已将 Cloud SQL 实例的访问权限授予多个应用引擎应用程序?
-
不,它是 D1,只被一个 gae 应用程序使用。
-
抱歉,它是 D0,但我仍然遇到与 D2 相同的问题。顺便说一句,我仔细检查了我的实例是否在美国,并且鉴于我不是高级用户,因此我的 gae 应用程序也托管在美国。我也尝试过创建一个新实例,以防万一有任何损坏,但我仍然遇到同样的问题!
标签: java google-app-engine jdbc google-cloud-sql