Оптимизация запросов к БД

Главные вкладки

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 12 октября 2014 в 10:19

Hello world)

Очередной раз занялся разбором запросов к БД.

Выявил два долгих запроса:

1. К таблице comments, как я понял, генерирует их views, одно представление. Отключил, вроде стало легче)

2. Второй запрос выглядит вот так

SELECT node.nid AS nid, node.title AS node_title, node_data_field_teaser_image.field_teaser_image_fid AS node_data_field_teaser_image_field_teaser_image_fid, node_data_field_teaser_image.field_teaser_image_list AS node_data_field_teaser_image_field_teaser_image_list, node_data_field_teaser_image.field_teaser_image_data AS node_data_field_teaser_image_field_teaser_image_data, node.type AS node_type, node.vid AS node_vid, RAND() AS _random FROM node node LEFT JOIN term_node term_node_value_0 ON node.vid = term_node_value_0.vid AND term_node_value_0.tid = 1435 LEFT JOIN term_node term_node_value_1 ON node.vid = term_node_value_1.vid AND term_node_value_1.tid = 435 LEFT JOIN term_node term_node_value_2 ON node.vid = term_node_value_2.vid AND term_node_value_2.tid = 10367 LEFT JOIN term_node term_node_value_3 ON node.vid = term_node_value_3.vid AND term_node_value_3.tid = 11571 LEFT JOIN term_node term_node_value_4 ON node.vid = term_node_value_4.vid AND term_node_value_4.tid = 1441 LEFT JOIN term_node term_node_value_5 ON node.vid = term_node_value_5.vid AND term_node_value_5.tid = 11572 LEFT JOIN term_node term_node_value_6 ON node.vid = term_node_value_6.vid AND term_node_value_6.tid = 11570 LEFT JOIN content_field_teaser_image node_data_field_teaser_image ON node.vid = node_data_field_teaser_image.vid WHERE (node.status <> 0) AND (node.type IN ('blog')) AND (term_node_value_0.tid = 1435 OR term_node_value_1.tid = 435 OR term_node_value_2.tid = 10367 OR term_node_value_3.tid = 11571 OR term_node_value_4.tid = 1441 OR term_node_value_5.tid = 11572 OR term_node_value_6.tid = 11570) ORDER BY _random ASC LIMIT 0, 6

И выполняется такой запрос - минимум 100мс, как я понимаю это основной запрос к БД?

Пошел на другой сайт, под управлением Drupal, похожий запрос так же выполняется постоянно, но выглядит он по другому, и выполняется по быстрее, хоть и самый долгий(

SELECT DISTINCT node.nid AS nid, node.title AS node_title, node_data_field_teaser_img.field_teaser_img_fid AS node_data_field_teaser_img_field_teaser_img_fid, node_data_field_teaser_img.field_teaser_img_list AS node_data_field_teaser_img_field_teaser_img_list, node_data_field_teaser_img.field_teaser_img_data AS node_data_field_teaser_img_field_teaser_img_data, node.type AS node_type, node.vid AS node_vid, RAND() AS _random FROM node node LEFT JOIN content_type_post node_data_field_teaser_img ON node.vid = node_data_field_teaser_img.vid WHERE node.type IN ('post') ORDER BY _random ASC LIMIT 0, 6

Хотел грешить на производительность сервера, но отбросил этот вариант, так как остальные запросы выполняются быстро, пропорционального увеличения времени выполнения не произошло(

Помогите понять что выполняется в этом запросе и как это исправить?

Комментарии

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 12 октября 2014 в 11:07

Проблема найдена)

Любая выборка которая генерируется в помощью views делает "долгие" запросы. Какая может быть причина?

1. Размер БД - 1,9 Гб
2. "Битый" модуль views

???

Аватар пользователя chilic chilic 14 октября 2014 в 23:26

ХулиGUN wrote:
"<a href="mailto:kpv_dnepr@drupal.org">kpv_dnepr@drupal.org</a>" wrote:
Любая выборка которая генерируется в помощью views делает "долгие" запросы

Уже ж писал выше....
Смотрите explane
Может выборки идут не по индексам
Может запросы такие (дохрена join`ов)
А так только на кофейной гуще гадать

Чего там смотреть если в сортировке рандом?

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 13 октября 2014 в 19:07

Победа!!))

Решение, как оказалось лежит в настройке views, нужно было вкл кеширование блоков, на странице производительности это было сделано, но как я понял блоки views не реагируют на эту настройку. После вкл кеширования в представлении, сайт вздохнул с облегчением.

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 13 октября 2014 в 19:06

Победа!!))

Решение, как оказалось лежит в настройке views, нужно было вкл кеширование блоков, на странице производительности это было сделано, но как я понял блоки views не реагируют на эту настройку. После вкл кеширования в представлении, сайт вздохнул с облегчением.

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 15 октября 2014 в 10:16

"chilic" wrote:
Чего там смотреть если в сортировке рандом?

ORDER BY _random ASC LIMIT 0, 6

Я так понимаю вы вот за это говорите? ВИЖУ

В настройке вьюхи стоит - сортировка по времени создания.

Аватар пользователя drupby drupby 15 октября 2014 в 13:56

"<a href="mailto:kpv_dnepr@drupal.org">kpv_dnepr@drupal.org</a>" wrote:
В настройке вьюхи стоит

и вьюха конечно же одна и дисплей у нее тоже один?