sql >> Databáze >  >> RDS >> Mysql

APPARENT DEADLOCK Vytváření nouzových vláken pro nepřiřazené nevyřízené úkoly

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

numHelperThreads a maxAdministrativeTaskTime pomáhají nakonfigurovat chování fondů vláken DataSource. Ve výchozím nastavení má každý DataSource pouze tři přidružená pomocná vlákna. Pokud se vám zdá, že výkon při velkém zatížení klesá nebo pokud prostřednictvím JMX nebo přímé kontroly PooledDataSource pozorujete, že počet „čekaných úloh“ je obvykle větší než nula, zkuste zvýšit numHelperThreads. maxAdministrativeTaskTime může být užitečné pro uživatele, kteří zaznamenají úkoly, které visí na dobu neurčitou, a zprávy „ZDANÝ ZÁMEK“. (Více viz Příloha A.)

maxAdministrativeTaskTime Výchozí:0 sekund před tím, než se fond vláken c3p0 pokusí přerušit zjevně zavěšenou úlohu. Zřídka užitečné. Mnoho funkcí c3p0 není vykonáváno klientskými vlákny, ale asynchronně pomocí interního fondu vláken. Asynchronie c3p0 přímo zvyšuje výkon klienta a minimalizuje dobu držení kritických zámků tím, že zajišťuje provádění pomalých operací jdbc ve vláknech bez blokování. Pokud se však některé z těchto úloh „zaseknou“, to znamená, že nebudou úspěšné ani neúspěšné s výjimkou po delší dobu, fond vláken c3p0 se může vyčerpat a administrativní úlohy budou zálohovány. Pokud jsou úlohy prostě pomalé, nejlepším způsobem, jak problém vyřešit, je zvýšit počet vláken pomocí numHelperThreads . Pokud však úkoly někdy visí neomezeně dlouho, můžete tento parametr použít k vynucení volání metody interrupt() vlákna úlohy, pokud úkol překročí stanovený časový limit. [c3p0 se nakonec stejně zotaví ze zavěšených úloh tím, že signalizuje "ZDAŘITÝ DEADLOCK" (uvidíte to jako varování v protokolech), nahradí vlákna úloh fondu vláken a přeruší() původní vlákna. Ale ponechání fondu přejít do ZDAJNÉHO DEADLOCKU a poté se obnovit znamená, že po určitou dobu bude výkon c3p0 narušen. Pokud se vám tedy zobrazují tyto zprávy, může pomoci zvýšení numHelperThreads a nastavení maxAdministrativeTaskTime . maxAdministrativeTaskTime by měl být dostatečně velký, aby se očekávalo, že jakýkoli rozumný pokus získat připojení z databáze, otestovat připojení nebo dva zničit připojení, bude úspěšný nebo selže v nastaveném čase. Nula (výchozí) znamená, že úkoly nejsou nikdy přerušeny, což je ve většině případů nejlepší a nejbezpečnější zásada. Pokud jsou úkoly pomalé, přidělte více vláken. Pokud úkoly věčně visí, zkuste zjistit proč, a možná vám mezitím pomůže nastavení maxAdministrativeTaskTime.

The default is 3 for numHelperThreads , increase this to 8-10 

setting maxAdministrativeTaskTime will help 


  1. Jak zkopíruji databázi SQL Azure na svůj místní vývojový server?

  2. Oznamujeme repmgr 2.0RC2

  3. Je možné přesunout záznam z jedné tabulky do druhé pomocí jediného SQL příkazu?

  4. MySQL:Porovnejte BETWEEN časem