我在使用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);
}
每个查询的响应时间平均为450ms,其中包括150ms的openConnection、150ms的operation和150ms的close。请参见下面的图片。
我已经阅读了Google文档、论坛和多个博客,但仍然看不出我做错了什么(我一定做错了什么,450ms/查询太多了...)
更新1:这绝对是一个Google Cloud SQL的问题,我安装了自己的本地MySQL服务器,性能要好得多(80ms用于“插入或更新”,然后选择最终提交)。希望我可以从Google dev.团队获得一些提示,我真的很喜欢整个Google云平台,但是以那种延迟水平工作简直是不可能的=(
更新2:2014/05/06 延迟问题在D0或D16上都是一样的。尝试插入10000行(3个varchar和一个~100个字节的blob)需要从Google ComputeEngine VM花费32秒,因为有延迟。如果插入10000个记录和单个批量插入,则持续时间相同。如果使用64个线程,则持续时间会缩短到3秒。我使用了本地mysql jdbc驱动程序进行测试。
有任何建议吗?谢谢!