Mysql 5.7 проти 5.5: простий запит займає 50 разів більше часу


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
Ви абсолютно впевнені, що ні сервер, ні обидва сервери не мають кеш-пам'яті? Тобто, які конкретні кроки ви зробили для забезпечення цього?
ChrisInEdmonton

На проблемному повільному сервері з mysql 5.7 я повторно запускав цей запит. Результати часу були дещо різними, наприклад, від 0,301 до 0,309 секунд, але не дуже. Я не вірю, що це питання кешу.
Ігор Чудов

1
Я цілком зрозумів це питання. Змінилося те, що в новому mysql кеш запитів вимкнено через налаштування за замовчуванням query_cache_type = OFF. Коли я знову ввімкнув кеш запитів, встановивши query_cache_type = 1, покращилася ефективність. Оскільки мій сайт використовує в 100 разів більше SELECT запитів, ніж INSERT / UPDATE запитів, використання кешу запитів має для мене сенс. Дякую, що вказали на мене, щоб подивитися в цьому напрямку!
Ігор Чудов

Ігоре, ви можете додати це як відповідь. Приємна знахідка! Майте на увазі, що кеш запитів (востаннє я перевіряв) працює лише для EXACT-відповідностей, і лише до тих пір, поки дані не змінюються.
ChrisInEdmonton

Я просто це зробив, я не розумів, що можу дати відповідь. Тут чудовий веб-сайт. І дякую за вашу допомогу та заохочення Кріс.
Ігор Чудов

Відповіді:


6

Я цілком зрозумів це питання. Змінилося те, що в новому mysql кеш запитів вимкнено через налаштування за замовчуванням query_cache_type = OFF. Коли я знову ввімкнув кеш запитів, встановивши query_cache_type = 1, покращилася ефективність. Оскільки мій сайт використовує в 100 разів більше SELECT запитів, ніж INSERT / UPDATE запитів, використання кешу запитів має для мене сенс. Дякую, що вказали на мене, щоб подивитися в цьому напрямку!


Зауважте, що кеш запитів допомагає, якщо ви використовуєте ТОЧНИЙ той самий запит (однаковий точний рядок, навіть внизу до регістру) І таблиця не змінюється. У багатьох випадках кеш запитів насправді не так корисний. І все-таки дуже приємно знайти і подякувати за написання рішення. Це буде корисно для інших!
ChrisInEdmonton
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.