MySQLデータベースに、モバイルデバイスの同期パラメーターを決定する関数があります。この関数は、ユーザーがデータベースと同期した最後の日時を判別します。同期操作中に、このサーバー側関数を2回呼び出します。2回目に呼び出すとすぐに、Sync_Recordsテーブル全体がロックされます。他の接続からどこにも書き込むことができません(最初の呼び出しの後、テーブルはロックされていないことに注意してください)。関数をProcedureに変更しましたが、すべて問題ありません。2回目の呼び出し後にロックは発生しません。同期操作全体(関数/プロシージャへの両方の呼び出しを含む)はトランザクション内にあります。これはInnoDbテーブルです。
関数/プロシージャは、単に2つのselectステートメントを実行します。結果をローカル変数に格納してから、日時変数を返します。テーブルがロックされている理由がわかりません。誰かアイデアはありますか?