5

У меня есть база данных "алгебра" с таблицей "вопросы" с 1 033 990 строк. Записи имеют атрибут "решено", то есть INT. У меня простой запрос

select count(*) from questions where solved = 0

У меня есть два сервера с аналогичными процессорами. На обоих серверах таблицы одинаковы. (база данных является точной копией продукции). Они на SSD. На одном сервере установлена Ubuntu 14.04 с MySQL 5.5.49, а на другом сервере - Ubuntu 16.04 с MySQL 5.7.12.

Проблема в том, что этот запрос занимает всего 0,009 с на MySQL 5.5, но занимает 0,304 с на MySQL 5.7. Что в 34 раза МЕДЛЕННО !!!

Планы запроса примерно одинаковы:

Медленный сервер:

id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    filtered        Extra
1       SIMPLE  questions       NULL    index   NULL    by_topic_solved 97      NULL    1033990 10.00   Using where; Using index

Быстрый сервер:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  questions   index   NULL    by_topic_solved 97  NULL    1033989 Using where; Using index

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

Я пытаюсь найти объяснение этому или с чего начать. my.cnf был примерно одинаков между двумя. Любые предложения будут с благодарностью приняты.

1 ответ1

6

Я полностью понял эту проблему. Что изменилось, так это то, что в новом mysql кеш запросов отключен из-за установки по умолчанию query_cache_type = OFF. Когда я снова включил кэш запросов, установив query_cache_type = 1, лучшая производительность вернулась. Поскольку мой сайт использует в 100 раз больше запросов SELECT, чем запросов INSERT/UPDATE, использование кэша запросов имеет для меня смысл. Спасибо, что указали мне смотреть в этом направлении!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .