谷歌云SQL性能不佳

6

我在使用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驱动程序进行测试。
有任何建议吗?谢谢!

你确定你的模式已经正确地建立索引了吗? - jon
这是一个测试表,大约有15列和一个次要索引。所以我想应该没问题。另外,请注意连接和关闭操作需要超过100毫秒,这不正常... - Rodrigo Manyari
你是否已经授权多个应用引擎应用程序访问你的Cloud SQL实例? - Stuart Langley
抱歉,虽然我使用的是D0版,但我现在遇到与D2版相同的问题。顺便说一下,我已经确认我的实例位于美国,鉴于我不是高级用户,我的gae应用程序也托管在美国。我还尝试创建一个新实例,以防万一出现任何损坏,但我仍然遇到了相同的问题! - Rodrigo Manyari
这很奇怪;我经常从Cloud SQL获得<10ms的延迟。但是本地查询80ms太大了。你确定你定义了正确的索引吗? - Luca
显示剩余2条评论
2个回答

1

MySQL连接器有同样的问题。 - David Gageot

0

我在使用PHP和套接字时遇到了GAE + Cloud SQL的问题。

问题出在我的查询上,实际上使用了3个查询并读取了成千上万行数据,尽管只输出了几行。

我通过HeidiSQL并在select查询前加上EXPLAIN找到了问题所在。

必须在php端进行连接,以便该查询集的加载时间(在Chrome开发工具中检查,而不是mysql运行时间)从600毫秒降至151毫秒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接