私の質問は次 のよう になります。受け入れられた回答で提案されているものに近いロジックをすでに実装していることを除いて、MySQLクエリでロックされた行を無視します。私の質問は、最初にプロセスIDを設定する方法です。すべてのサーバーは次のようなクエリを実行します(コードはRuby on Railsにありますが、結果のmysqlクエリは次のようになります)。
UPDATE (some_table) SET process_id=(some process_id) WHERE (some condition on row_1) AND process_id is null ORDER BY (row_1) LIMIT 100
ここで何が起こるかというと、すべてのプロセスが同じ行を更新しようとし、ロックされ、ロックを待機してタイムアウトします。ロックされている行をサーバーに無視してもらいたい(ロックが解除された後、process_idはnullではなくなるため、ここでロックする意味がないため)。レコードのバッチをランダム化して更新しようとすることもできますが、問題は、上記のクエリのように、row_1に基づいて更新に優先順位を付けたいことです。だから私の質問は、レコードがロックされているかどうかをチェックし、ロックされている場合は無視する方法はありますか?