Плохая производительность Мариадб против MySQL - PullRequest
0 голосов
/ 07 июня 2018

Я слышал, что Mariadb имеет лучшую производительность, чем MySQL, поэтому я клонировал веб-сайт со всей его базой данных, чтобы сравнить разницу между 2.

Действительно, с кешем все кажется быстрее, но у меня очень странный вывод, когда естькеша нет, по некоторым большим запросам mariadb намного хуже, чем mysql:

MariaDB> select SQL_NO_CACHE [...] ORDER BY FIELD LIMIT 0, 200;
Empty set (10.13 sec)

mysql> select SQL_NO_CACHE [...] ORDER BY FIELD LIMIT 0, 200;
Empty set (0.76 sec)

Это огромная разница, как это возможно?

Полный запрос выглядит так:

SELECT 
    SQL_NO_CACHE [...] 
FROM 
    table1
WHERE
    field1 = 'val1' and
    field2 = 'val2' and
    (field3='val3' or INSTR(field3, 'val3'))
ORDER BY field4 DESC LIMIT 0, 200;

Вот объяснение запроса:

+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+
| id | select_type | table    | type | possible_keys            | key     | key_len | ref   | rows   | Extra                       |
+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+
|  1 | SIMPLE      | table1   | ref  | field1,field3            | field1  | 123     | const | 125832 | Using where; Using filesort |
+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Трудно сказать, является ли это ошибкой тестового случая, или между ветвями есть большая разница.Я расскажу о некоторых из многих возможностей (в дополнение к возможности Спенсера):

Пожалуйста, укажите SHOW CREATE TABLE.

Оба сервера нуждаются в

INDEX(field1, field2, field4)

с 1и 2 может быть в любом порядке;4 должно быть последним.

Есть ли подзапросы?Это одна из областей, где MySQL и MariaDB значительно разошлись.

OR - убийца производительности;Хотели бы вы помочь в использовании UNION вместо этого?

Одно из моих практических правил заключается в том, что кэширование дает 10-кратную разницу.Эти два времени примерно в 10 раз.Может ли быть так, что MySQL работал с теплым кешем?Простой тест - запустить оба тайминга дважды и взять второй.

Какие версии MySQL и MariaDB?Их оптимизаторы начали совершать значительные отклонения на уровне 5,6 / 10,0.Я видел большие временные различия в любом случае .(И не всегда легко отследить функцию оптимизатора, которая помогла.)

Включены ли виртуальные или сгенерированные столбцы?Это еще одна область значительного расхождения.Или JSON?Я уже просил SHOW CREATE TABLE?

0 голосов
/ 07 июня 2018

Помимо определения времени, запустите EXPLAIN в обеих средах и сравните.Возможно, MariaDB использует другой индекс или выполняет полное сканирование.Может быть, статистика InnoDB не актуальна ... указывает оптимизатору MariaDB, что таблица пуста, когда ее нет.

При такой большой разнице я склонен считать, что ввод-вывод может бытьcontributor.

Возможно, буферный пул InnoDB намного больше в экземпляре MySQL, чем в экземпляре Mariadb.(Это не окончательный диагноз. Это просто то, что я хотел бы рассмотреть.

Я бы посмотрел на размеры буферного кеша InnoDB и архитектуру хранилища и убедился, что они совпадают на двух серверах..

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

Saying ", клонированный с его целым«Базы данных» заставляет нас верить, что все в базе данных одинаково, один и тот же механизм хранения, одинаковые индексы, одинаковый набор символов и сопоставление символьных столбцов, эквивалентная конфигурация базы данных и т. д. Но, возможно, наша вера не оправдана.

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