2016-04-05 6 views
0

私は、次のクエリを持っている:Apacheの設定、PHP5 FPMとMySQL

ロードするのに約160秒かかった
SELECT SQL_CALC_FOUND_ROWS 
    a.`id_order`,`reference`,`total_paid_tax_incl`, 
    `payment`,a.date_add as date_add, 
    a.id_currency, a.id_order AS id_pdf, 
    CONCAT(LEFT(c.`firstname`, 1), '. ', c.`lastname`) AS `customer`, 
    osl.`name` AS `osname`, os.`color`, 
    IF((SELECT COUNT(so.id_order) FROM `ps_orders` so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new, 
    IF(om.`erp_order_id` is null, 0, 1) as erp_id 
FROM `ps_orders` a 
LEFT JOIN `ps_customer` c ON (c.`id_customer` = a.`id_customer`) 
LEFT JOIN `ps_order_state` os ON (os.`id_order_state` = a.`current_state`) 
LEFT JOIN `ps_order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = 1) 
LEFT JOIN `ps_order_merge` om ON (om.`prst_order_id` = a.`id_order`) 
WHERE 1 
ORDER BY a.id_order DESC LIMIT 0,50; 

。このクエリは、非常に特定のページ(実際には特定のページからのみ呼び出されます)で呼び出されます。ちょうど、次のURLは、このようなクエリを実行仮定しましょう:

http://example.com/some/url/query.php

私は、そのクエリを呼び出す時点では、ブラウザはさらに、デバッグの際に

'500 Internal Server Error' 

を示し、私は、ログから以下のようになります。

Wed Mar 30 01:22:43.780576 2016] [fastcgi:error] [pid 12345:tid 1234567890] [client 123.459.78.123:12345] FastCGI: incomplete headers (0 bytes) received from server "/path/to/php5-fcgi", referer: http://example.com/some/file.php 

そして、FPMが遅いログには、この示しています

私はそのためのapache/PHP5-FPMは、少なくとも160秒間待ちますタイムアウトを拡張 できる方法を知りたい

[0x00007f55bb18ab68] executeS() /path/to/some/script/AdminController.php:2198 

script_filename = /path/to/some/script.php 
[0x00007f55bb18afd8] query() /path/to/some/script/DbPDO.php:80 
[0x00007f55bb18aef8] _query() /path/to/some/script/Db.php:305 
[0x00007f55bb18ad88] query() /path/to/some/script/Db.php:482 
[0x00007f55bb18ab68] executeS() /path/to/some/script/AdminController.php:2198 
[0x00007f55bb18a9e8] getList() /path/to/some/script/AdminController.php:1531 
[0x00007f55bb18a8d0] renderList() /path/to/some/script/AdminController.php:1440 
[0x00007f55bb18a788] initContent() /path/to/some/script/Controller.php:167 
[0x00007f55bb18a5d0] run() /path/to/some/script/Dispatcher.php:349 
[0x00007f55bb18a480] dispatch() /path/to/some/script/index.php:50 

これは、正確なファイルにクエリを実行&行です。それで、少なくとも今のところはそうです。私はその問題のあるページを読み込むことができます。

私はすでに私のphp.iniの設定:私は許されず、私は、クエリを変更するためのアクセス権を持っていないです

mysql.allow_persistent = On 
mysql.connect_timeout = 160 

EDIT 1

を。

+0

PHPで 'set_time_limit'を使用していますか? – apokryfos

+0

@apokryfosソースコードから「set_time_limit」が見つかりません。 max_execution(php.ini)は1000に設定されています。 – Jeremy

答えて

0

私自身の問題の解決策を見つけたので、LEFT JOINEDテーブルの1つが正しく索引付けされていないことに気付きました。

私はこのテーブルのインデックス作成:

LEFT JOIN `ps_order_merge` 

をし、クエリは(秒未満)はるかに高速に実行されます。

関連する問題