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);
}

每个查询的平均响应时间为 450 毫秒。+= 150 表示打开连接,150 表示运行,150 表示关闭。看图。以下。

在此处输入图像描述

我已经阅读了谷歌文档、论坛和多个博客,但仍然看不到我做错了什么(我一定是做错了什么,450 毫秒/查询太远了……)

更新 1:我绝对是 Google Cloud SQL 问题,我安装了自己的本地 MySQL 服务器,并且性能更好(“插入或更新”为 80 毫秒,然后选择最终提交。),希望我能得到一些来自谷歌开发者的提示。团队,我真的很喜欢整个谷歌云平台,但在这种延迟水平下工作简直是不可能的 =(

更新 2:2014/05/06延迟问题与 D0 或 D16 相同。由于延迟,尝试从 Google ComputeEngine VM 插入 10000 行(3 个 varchar 和一个 ~100 字节的 blob)需要 32 秒。10000 次插入和单个批量插入的持续时间相同。如果我使用 64 个线程,那么持续时间将降至 3 秒。我用本机 mysql jdbc 驱动程序进行了测试。

有什么建议么?谢谢!

4

2 回答 2

1

尝试使用 AppEngine 中的 MySQL Connector/J 驱动程序,它可能会提供更好的性能。有关要使用的类名和 URL 格式,请参阅https://developers.google.com/appengine/docs/java/cloud-sql/#Java_Connect_to_your_database

于 2013-12-12T16:26:10.130 回答
0

我遇到了与 php 和套接字一起使用的 GAE + 云 SQL 的问题。

问题是我的查询实际上使用了 3 个查询并读取了数千行,即使是艰难的只有 outputtet 对。

我用 HeidiSQL 找到了它,并将 EXPLAIN 放在选择查询的前面。

必须在 php 端进行连接,以便该查询集的加载时间(在 chrome devtools 中检查,而不是 mysql 运行时间)从 600 ms 下降到 151 ms

于 2015-07-13T15:14:01.847 回答