質問: new PDO(DSN, USERNAME, PASSWORD); $con->begin(); $con->exec($delete_sql1, $where); //集計テーブルクリア $con->commit(); $con->begin(); $con->exec($delete_sql2, $where); //集計テーブルクリア $con->commit(); $con->begin(); $con->exec($delete_sql3, $where); //集計テーブルクリア //<<---↑このクエリに時間がかかった場合はログがここまでになる $con->commit(); $con->begin(); $con->exec($insert_sql1, $where); //集計テーブルへ集計データを挿入 $con->commit(); $con->begin(); $con->exec($insert_sql2, $where); //集計テーブルへ集計データを挿入 $con->commit(); $con->begin(); $con->exec($insert_sql3, $where); //集計テーブルへ集計データを挿入 $con->commit(); ### 試したこと 【パターンA時】 PHP側に set_time_limit(0); ini_set("session.gc_maxlifetime", 60*30); を入れてみましたが改善できませんでした。 【パターンB時】 トランザクションを分割しました。 ### 補足情報(FW/ツールのバージョンなど) PHP(5.2.17) PostgreSQL(8.4.20)
回答: トランザクションの分割とクエリーの最適化で完走。 クエリに時間がかかってもそのまま実行する様にしたかったのですが、 個別のクエリーを最適化しエラーが出ない範囲内に収める事で収束しました。 $con = new PDO(DSN, USERNAME, PASSWORD); $con->begin(); $con->exec($delete_sql1, $where); //集計テーブルクリア $con->exec($delete_sql2, $where); //集計テーブルクリア $con->exec($delete_sql3, $where); //集計テーブルクリア //<<---↑このクエリに時間がかかった場合はログがここまでになる $con->exec($insert_sql1, $where); //集計テーブルへ集計データを挿入 $con->exec($insert_sql2, $where); //集計テーブルへ集計データを挿入 $con->exec($insert_sql3, $where); //集計テーブルへ集計データを挿入 $con->commit(); ↓ $con = new PDO(DSN, USERNAME, PASSWORD); $con->begin(); $con->exec($delete_sql1, $where); //集計テーブルクリア $con->commit(); $con->begin(); $con->exec($delete_sql2, $where); //集計テーブルクリア $con->commit(); $con->begin(); $con->exec($delete_sql3, $where); //集計テーブルクリア $con->commit(); $con->begin(); $con->exec($insert_sql1, $where); //集計テーブルへ集計データを挿入 $con->commit(); $con->begin(); $con->exec($insert_sql2, $where); //集計テーブルへ集計データを挿入 $con->commit(); $con->begin(); $con->exec($insert_sql3, $where); //集計テーブルへ集計データを挿入 $con->commit();