0

一个或多个客户将 MySQl 后端作为其解决方案的一部分。

他们已将其配置为每个客户端有一个通用的主数据库和一个特定的从数据库(他们有 10 多个从属数据库)。他们为此使用 MySQL 代理。

他们面临一些性能问题,包括数据库插入/更新被排队以及需要相当长的时间来写入从属数据库。

你能建议如何改进吗?是否有可用于帮助确定问题所在的工具?这对您来说似乎是一种标准方法(通过 MySQL 代理控制客户端特定从属的普通主服务器)?

任何意见,将不胜感激。

谢谢,

安迪

4

1 回答 1

0

我有同样的行为,但我的麻烦是下一个:
我的一个更新以错误结束,mysql 代理(和 rw-splitter.lua 特定)将这种情况视为连接可能被另一个客户端重用,并将连接返回到池. 这意味着,当客户端收到错误并试图回滚事务时,它被传递到另一个连接或池中的新连接,它没有任何效果。同时,事务中出现错误的失败 UPDATE 进程被锁定,直到事务不会因超时而回滚(但在我的情况下,mysql-proxy 默认为 28800 秒)所以很长。

问题已解决。

修补:

在 rw-splitter.lua 中找到下一个块:

    is_in_transaction = flags.in_trans
    local have_last_insert_id = (res.insert_id and (res.insert_id > 0))

    if not is_in_transaction and
       not is_in_select_calc_found_rows and
       not have_last_insert_id then

并将其更改为

    if res.query_status == proxy.MYSQLD_PACKET_ERR and is_in_transaction then
         if is_debug then
            print ("(read_query_result) ERROR happened while transaction staying on the same backend")
        end
        return
    end

    is_in_transaction = flags.in_trans
    local have_last_insert_id = (res.insert_id and (res.insert_id > 0))

    if not is_in_transaction and
       not is_in_select_calc_found_rows and
       not have_last_insert_id then
于 2013-04-28T14:39:49.163 回答