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

Při pokusu o aktualizaci 640 000 řádků v mySQL dojde během dotazu ke ztrátě připojení k serveru MySQL

Existuje další potenciální důvod této chyby, a to je fond připojení ActiveRecord žací stroj . Je-li povoleno, reaper vyhledá ve fondu připojení "mrtvá" připojení a uzavře je. Při mém testování se zdá, že je příliš horlivý a také uzavírá dokonale živá spojení (obecně ta, která mají o něco větší dotazy).

Zkuste vymazat reaping_frequency z konfigurace DB (která ji vypne) a zjistěte, zda to pomůže. Naskenujte svou kódovou základnu pro tento řetězec a ujistěte se, že není nastaven (nebo je jednoduše odstraněn!). Pokud vidíte řádek jako config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 , vězte, že || 10 ve skutečnosti nastavuje nízkou výchozí hodnotu 10 s. Tento vzor byl nějakou dobu v kódové základně rails, dokud nebyla změna vrácena zpět protože to způsobuje různé problémy, včetně zabíjení dlouhotrvajících dotazů , ale stále jej doporučuje Heroku .

Pokud se deaktivací reaperu věci vyřeší, doporučoval bych jej nechat vypnutý. Rails to již nenastavuje ve výchozím nastavení a zdá se, že způsobuje více problémů, než řeší.

Měl jsem chybu jako ty a tak jsem to opravil. Osobně to nechávám vypnuté. O svém konkrétním problému jsem psal podrobněji na svém blogu .



  1. Jak ladit překročení časového limitu čekání na zámek na MySQL?

  2. Jak vypsat tabulky ovlivněné kaskádovým mazáním

  3. Jedinečné omezení na kombinaci dvou sloupců?

  4. MySQL IFNULL ELSE