私は同じ動作をしていましたが、次の問題がありました。
私の更新の 1 つがエラーで終了していました。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