Жестокая производительность от MySQL 5,6 до MySQL 5,7 - PullRequest
1 голос
/ 27 февраля 2020

Как видно из заголовка, мы получаем брутальную производительность, перенося сервер с 5.6 на 5.7.29. Мне было поручено перенести несколько десятков сайтов Drupal с серверов SUSE под управлением 5.6 на Ubuntu runnning 5.7.29, что само по себе является проблемой, но для одного конкретного c сайта БД умирает. Сайт использует таксономию для категоризации контента и создает некоторые накладные расходы, но я провел несколько тестов на разных серверах, которые мы работаем как в рабочей, так и в промежуточной версии, а также Docker.

. На 5.7 запросах требуется около 100 время больше или около 10-15 секунд в зависимости от машины, в то время как система 5,6 занимает от 80 до 120 мс. Я знаю, что запрос уродливый и, безусловно, может быть улучшен, но на самом деле это не вариант и выходит за рамки задачи. Это CMS, и мне интересно, есть ли способ заставить MySQL использовать конкретную c технику оптимизации запросов. Кроме того, это только один из многих запросов, которые наносят вред на этом сайте, и все они связаны с таксономиями.

Я могу создать fre sh контейнеров из docker для любого изображения, импортировать дамп и У меня такое же поведение.

docker run -p 127.0.0.1:3306:3306/tcp --name mysql5.6 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.6
docker run -p 127.0.0.1:3307:3306/tcp --name mysql5.7 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7

Кто-нибудь, прежде всего, знает, почему он так себя ведет, и есть ли какие-нибудь решения для серверов или таблиц?

Обсуждение Reddit

Объяснение визуальных элементов + таблицы + индексы enter image description here enter image description here enter image description here enter image description here enter image description here

Запрос

SELECT DISTINCT node.nid AS nid, node.title AS node_title, node.created AS node_created, 
       ttdn.name AS ttdn_name, ttdn.vid AS ttdn_vid, 
       ttdn.tid AS ttdn_tid, ttdn_tv.machine_name AS ttdn_tv_machine_name, 
       node.sticky AS node_sticky, 
       'node' AS field_data_field_top_image_node_entity_type, 
       'node' AS field_data_field_summary_node_entity_type, 
       'node' AS field_data_body_node_entity_type, 
       'node' AS field_data_field_tags_node_entity_type  
FROM node
LEFT JOIN (
           SELECT td.*, tn.nid AS nid  
           FROM   taxonomy_term_data td  
           LEFT JOIN taxonomy_vocabulary tv ON td.vid = tv.vid  
           LEFT JOIN taxonomy_index tn ON tn.tid = td.tid  
           WHERE (tv.machine_name IN ('news_categories')) 
           AND   (td.tid IN ('10', '21','23', '24', '25', '26', '27', '28', 
                              '31', '32', '33'/*.. some data removed for brevity*/))) ttdn 
        ON node.nid = taxonomy_term_data_node.nid  
LEFT JOIN taxonomy_vocabulary ttdn_tv ON ttdn.vid = ttdn_tv.vid  
WHERE     (((node.status = '1') 
AND (node.type IN ('news_feed', 'www_news_releases_feed', 'article', 'www_rru_in_the_media_feed')) ))
AND       ( EXISTS (
                    SELECT na.nid AS nid  
                    FROM  node_access na  
                    WHERE (( (na.gid = '0') AND (na.realm = 'all') )OR( (na.gid = '1') 
                    AND (na.realm = 'taxonomy_access_role') ))AND (na.grant_view >= '1') 
                    AND (node.nid = na.nid) ))  
ORDER BY node_sticky DESC, node_created DESC  LIMIT 1 OFFSET 0

1 Ответ

0 голосов
/ 03 марта 2020

set optimizer_switch = "производная_мердж = выкл";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...