私はjavascriptで1ページのウェブサイトを持っています。 2つの同時接続/要求ロック
は、httpリクエストの3種類ごとに30秒/action/status/
要求がサーバーに送信され、サーバ
/action/status/
/action/csv_process/
/action/status_pid/
に送信されたすべてのものを簡単にするために。要求にはあまり起こりません。以下では、リクエストで実行されたmysqlクエリの書き込みをすべて見ることができます。
2017-01-12 18:37:03 2 --- REQUEST START: action status
2017-01-12 18:37:03 2 UPDATE `log_login` SET time_active=1387 WHERE id=78360
2017-01-12 18:37:03 2 BEGIN
2017-01-12 18:37:03 2 COMMIT
2017-01-12 18:37:03 2 --- REQUEST END 0.076473951339722
ユーザはCSVファイルをアップロードできます。ファイルがアップロードされると、ユーザーはファイルの処理方法を選択できます。次の/action/csv_process/
リクエストは完了するまでに時間がかかることが多いので、/action/status_pid/
要求が3秒ごとにサーバーに送信され、パーセント(0-100)で進行します。
すべて正常です。 /action/status_pid/
要求は3秒間隔で実行し、/action/csv_process/
が処理している間、応答を返しますが、できるだけ早く/action/status/
が/action/csv_process/
まで、サーバーのすべてのロックに送られて、なぜ/action/status/
がすべてをロックしている
を完了していますか?
すべての要求は、MySQLのトランザクションで実行され、すべてのテーブルがあるInnoDB
でも、現在の要求が完了するまで、私は待つべきすべての同時実行要求でsession_write_close()
を使用していませんでした..しかし/action/status/
がするまで保留された場合にかかわらず、データ処理要求が行われ、保留中の他のすべての要求がロックされます
テーブルエンジンMyISAMまたはInnoDBはありますか?そして私は 'BEGIN'と' COMMIT'に続く 'UPDATE'を理解しませんでした。開始とコミットの間ではいけませんか? –
すべてのテーブルはInnoDBです。はい、あなたはbegin/commitのクエリについて正しいです。 – clarkk