問題
ストアド プロシージャを呼び出す CakePHP アプリケーションがあります。
$this->FileUpload->query('exec sproc_runjob_ProcessTests', false);
この手順では、アップロードされたファイルを取得して処理します。複数のファイルをアップロードする場合があり、アップロードされたファイルごとに 1 回呼び出されます。
問題は、次のエラーが発生することです。
Database Error
Error: SQLSTATE[42000]:
[Microsoft][SQL Server Native Client 11.0][SQL Server]
SQLServerAgent Error: Request to run job ProcessTests
(from User [redacted]) refused because the job already has
a pending request from User [redacted].
SQL Query: exec sproc_runjob_ProcessTests
私が知る限り、これはストアド プロシージャを同時に実行できないことを意味します。プロセスごとに sproc を連続して実行する必要があり、これは私たちの豪華な新しいマルチコア サーバーでは残念なことです。
私たちが考えた解決策
sproc をシリアルに実行する
基本的にここでの考え方は、ストアド プロシージャを 1 回呼び出し、既に実行されている場合は失敗を無視することです。sproc 呼び出しの最後に、データベースをチェックして、再実行する必要があるかどうか (「新しい」ファイルがある場合) を確認し、必要な場合はそれ自体を再実行します。
既存のストアド プロシージャを使用しない
時間の制約もあって難しいと思いますが、こうすればいいという提案がありましたら、よろしくお願いします。
前もって感謝します!
の検索結果
この男も同じ問題を抱えているようで、電話する前にジョブのステータスを確認することで解決しています。おそらく、sproc 呼び出しを行う前に PHP からこれを行うことができますか?
Service Broker と呼ばれるものについて言及します。これは実際に私が探しているものかもしれませんが、それでも入力が大好きです。
前もって感謝します!