sql >> データベース >  >> RDS >> Mysql

APPARENTDEADLOCK割り当てられていない保留中のタスクの緊急スレッドを作成する

    http://www.mchange.com/projects/c3p0/#other_ds_configuration>

    numHelperThreads およびma​​xAdministrativeTaskTime DataSourceスレッドプールの動作を構成するのに役立ちます。デフォルトでは、各データソースには3つの関連するヘルパースレッドしかありません。高負荷でパフォーマンスが低下しているように見える場合、またはJMXまたはPooledDataSourceの直接検査で観察した場合、「保留中のタスク」の数が通常ゼロより大きい場合は、numHelperThreadsを増やしてみてください。 maxAdministrativeTaskTime いつまでもハングするタスクや「APPARENTDEADLOCK」メッセージを経験しているユーザーに役立つ場合があります。 (詳細については、付録Aを参照してください。)

    maxAdministrativeTaskTime デフォルト:0秒前にc3p0のスレッドプールは明らかにハングしたタスクを中断しようとします。めったに役に立ちません。 c3p0の機能の多くは、クライアントスレッドによって実行されるのではなく、内部スレッドプールによって非同期的に実行されます。 c3p0の非同期性は、クライアントのパフォーマンスを直接向上させ、ロックを保持しないスレッドで低速のjdbc操作が実行されるようにすることで、重要なロックが保持される時間を最小限に抑えます。ただし、これらのタスクの一部が「ハング」した場合、つまり、長期間例外で成功も失敗もしなかった場合、c3p0のスレッドプールが使い果たされ、管理タスクがバックアップされる可能性があります。タスクが単純に遅い場合、問題を解決する最善の方法は、 numHelperThreadsを使用してスレッドの数を増やすことです。 。ただし、タスクが無期限にハングすることがある場合は、このパラメーターを使用して、タスクが設定された制限時間を超えたときに、タスクスレッドのinterrupt()メソッドを強制的に呼び出すことができます。 [c3p0は、「APPARENT DEADLOCK」(ログに警告として表示されます)を通知し、スレッドプールタスクスレッドを置き換え、元のスレッドを割り込み()することで、ハングしたタスクから最終的に回復します。ただし、プールをAPPARENT DEADLOCKに入れてから回復させると、一定期間、c3p0のパフォーマンスが低下することを意味します。したがって、これらのメッセージが表示されている場合は、numHelperThreadsを増やしてmaxAdministrativeTaskTimeを設定すると役立つ場合があります 。 maxAdministrativeTaskTimeは、データベースから接続を取得する、接続をテストする、または2つの接続を破棄するという合理的な試みが、設定された時間内に成功または失敗すると予想されるように、十分に大きくする必要があります。ゼロ(デフォルト)は、タスクが中断されないことを意味します。これは、ほとんどの状況で最良かつ最も安全なポリシーです。タスクが遅い場合は、より多くのスレッドを割り当てます。タスクが永遠にハングしている場合は、その理由を理解してみてください。その間、maxAdministrativeTaskTimeを設定すると役立つ場合があります。

    The default is 3 for numHelperThreads , increase this to 8-10 
    
    setting maxAdministrativeTaskTime will help 
    


    1. Symfony 2でデータベースビューのエンティティ(doctrine)を設定する方法

    2. ユーザーの更新コマンドが拒否されました

    3. PDOの配列を使用して複数のMySQLテーブル列を更新する

    4. PHPのグリフに基づいて文字列の言語を確認してください