【mysql】CodeIgniterのDB設定の罠【Sleep】
この時なにが起こっていたのかを書きます
Sleepしてるクエリが多いから消してやればいいやーAHAHAHAとはさすがになりません
これが起きた原因を排除します
結論からいいますと、phpのフレームワーク codeIgniter のDB設定に問題がありました
正しい設定は以下の通り
$db['default']['hostname'] = 'XXX.XXX.XXX.XXX'; $db['default']['username'] = 'ユーザー名'; $db['default']['password'] = 'パスワード'; $db['default']['database'] = 'DB名'; $db['default']['dbdriver'] = 'mysql'; $db['default']['dbprefix'] = ''; $db['default']['pconnect'] = FALSE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; $db['default']['swap_pre'] = ''; $db['default']['autoinit'] = FALSE; $db['default']['stricton'] = FALSE;
問題の設定はここです
$db['default']['pconnect'] = FALSE; $db['default']['autoinit'] = FALSE;
pconnectがONになっていると、一度接続したコネクションは破棄されず、保持して使いまわします
phpからmysqlに再アクセスする際、高速にアクセスできるのですが
DB側のコネクション数が最大になってしまい、DBにアクセスできなくなっていたというわけです
autoinitは、ライブラリがロードされたときに、データベースに自動的に接続するかどうか。もし FALSE に設定された場合、最初のクエリの実行の前に接続されます
ちなみに、CodeIgniterの初期設定ではこれらがONになっています
かならずOFFにするようにしましょう