2017-04-11 21 views
2

私は2つのデータベース間の一致を検索するプロジェクトで作業していましたが、cronジョブが実行されると503エラーが発生します。503 2つのデータベース間の一致で

可変ソースは 'Peter'や 'Margot'のような名前です。 name_keyは 'name'や 'event'のような配列のキーです。

global $dbh; 
global $dbh_second; 

$import_sql = $dbh->prepare('SELECT name_key FROM imports WHERE name = :source'); 
$import_sql->bindParam(':source', $source, PDO::PARAM_STR); 
$import_sql->execute(); 
$name = $import_sql->fetch(PDO::FETCH_ASSOC); 

$source = strtolower($source); 
$import_data_sql = $dbh->prepare('SELECT * FROM import_data WHERE source = :source AND import_key = :key'); 
$import_data_sql->bindParam(':key', $name['name_key'], PDO::PARAM_STR); 
$import_data_sql->bindParam(':source', $source, PDO::PARAM_STR); 
$import_data_sql->execute(); 
$import_data = $import_data_sql->fetchAll(PDO::FETCH_ASSOC); 


foreach ($import_data as $filter) { 

    $column = $filter['import_key']; 
    $party_sql = $dbh_second->prepare("SELECT * FROM `digi_gz_parties` WHERE name LIKE :value"); 
    $party_sql->bindParam(':value', $filter['import_value'], PDO::PARAM_STR); 
    $party_sql->execute(); 

    if($party = $party_sql->fetch(PDO::FETCH_ASSOC)) { 

     $import_check_sql = $dbh->prepare('UPDATE import_data SET status = 1 WHERE source = :source AND import_value LIKE :value AND created_at = :max'); 
     $import_check_sql->bindParam(':max', $filter['max_data'], PDO::PARAM_STR); 
     $import_check_sql->bindParam(':value', $filter['import_value'], PDO::PARAM_STR); 
     $import_check_sql->bindParam(':source', $source, PDO::PARAM_STR); 
     $import_check_sql->execute(); 

    } 

} 

これを行う別のソリューションですか、タイムアウト秒を長く設定する必要がありますか?

ありがとうございます!

+0

ウェブサーバー(Apache?)エラーログにはどのようなエラーメッセージが表示されますか? – Jocelyn

+0

503タイムアウト30秒。 –

+0

タイムアウト。実行時間を長くする必要があります。set_time_limit(0); –

答えて

1

レコードをバッチで取得する必要があるのは、レコードが長すぎてタイムアウトになるためです。いくつかの最適化を見てみましょう:インデックス、キャッシングなど。

+0

サービスはオンラインです。システムがチェックする必要があるレコードは9000です。もし1000とすれば、503エラーがなければ正常に実行されますが、1000を超えるものは503エラーになります。 –

関連する問題