У меня проблема со старым приложением Symfony 2. Внезапно, когда пользователь нажимает на вкладку «Заказы», отображение списка занимает более 5 минут, а раньше это занимало не более 3 секунд. Это запрос с планом выполнения:
EXPLAIN
SELECT DISTINCT s0_.id AS id0
, SUM(s1_.price * s1_.amount) AS sclr1
, SUM(s1_.price * s1_.amount * s1_.tax) AS sclr2
, SUM(s1_.price * s1_.amount * s1_.retax) AS sclr3
, s0_.id AS id4
FROM stncrp_order s0_
JOIN stncrp_store s2_
ON s0_.store_id = s2_.id
LEFT
JOIN stncrp_orderline s1_
ON s0_.id = s1_.order_id
AND s1_.rejected = 0
LEFT
JOIN stncrp_order_provider_warn s3_
ON s0_.id = s3_.order_id
WHERE s0_.state >= 3
GROUP
BY s0_.id
, s0_.date
, s0_.shipment_limit_date
, s0_.state
, s0_.state_changed_date
, s0_.received
, s0_.shipment_cost
, s0_.username
, s0_.notes
, s0_.user_id
, s0_.store_id
, s0_.storedata_id
, s3_.id
, s3_.createdDate
, s3_.comments
, s3_.order_id
ORDER
BY s0_.id DESC
LIMIT 10
OFFSET 0;
+----+-------------+-------+--------+----------------------+----------------------+---------+---------------------+-------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+----------------------+----------------------+---------+---------------------+-------+----------------------------------------------+
| 1 | SIMPLE | s0_ | ALL | IDX_F4A5D9B092A811 | NULL | NULL | NULL | 19633 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | s2_ | eq_ref | PRIMARY | PRIMARY | 4 | est_db.s0_.store_id | 1 | Using index |
| 1 | SIMPLE | s1_ | ref | IDX_252BF9D78D9F6D38 | IDX_252BF9D78D9F6D38 | 5 | est_db.s0_.id | 3 | |
| 1 | SIMPLE | s3_ | ref | IDX_20FC41F28D9F6D38 | IDX_20FC41F28D9F6D38 | 5 | est_db.s0_.id | 1 | |
+----+-------------+-------+--------+----------------------+----------------------+---------+---------------------+-------+----------------------------------------------+
Вот список процессов на сервере прямо сейчас:
mysql> show processlist;
+-----+------+-----------------+--------+---------+------+---------------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------------+--------+---------+------+---------------------+------------------------------------------------------------------------------------------------------+
| 185 | root | localhost:52066 | est_db | Sleep | 4877 | | NULL |
| 186 | root | localhost:52068 | est_db | Sleep | 4885 | | NULL |
| 209 | root | localhost:52176 | est_db | Sleep | 31 | | NULL |
| 242 | root | localhost | est_db | Query | 0 | NULL | show processlist |
| 248 | root | localhost:52368 | est_db | Query | 1525 | Removing duplicates | SELECT DISTINCT s0_.id AS id0, SUM(s1_.price * s1_.amount) AS sclr1, SUM(s1_.price * s1_.amount * s1 |
+-----+------+-----------------+--------+---------+------+---------------------+------------------------------------------------------------------------------------------------------+
Запрос генерируется «волшебным образом» следующим методом:
/**
* @Route("/admin/order/index", name="mainbundle_admin_orderentity")
* @Template()
*/
public function orderAjaxListAction()
{
$searchform = $this->searchForm(
$this->createForm(new OrderEntitySearchType())
);
$em = $this->getDoctrine()->getManager();
$qb = $em->getRepository('StoreBundle:OrderEntity')->findByCriteria($searchform->getData());
return $this->index('OrderEntity', $qb, $searchform, 't.id', 'DESC');
}
Никто ничего не изменил в коде приложения или базе данных, и он работал прекрасно до последней пятницы ... В чем может быть причина?
Заранее спасибо,