Які таблиці слід або можна мігрувати до InnoDB, а які повинні залишатися MyISAM?


10

Відповідно до назви: Чи є швидкий список кандидатів у таблиці для переходу до InnoDB? І що має залишитися MyISAM.

Деякі додаткові відомості

  • Сайт має досить велике завантаження, але він вставляє приблизно 10 вузлів на годину, з тегами тощо.
  • Ми активно використовуємо CCK (величезна кількість нормованих таблиць у вигляді content_field%).
  • Ми також використовуємо перегляди для всіх наших блоків і сторінок; але багато хто з них є кандидатом на заміну спеціальними модулями (щодо зменшення запитів до бази даних та важкості цих запитів).
  • Усі користувачі анонімні; за винятком кількох авторизованих редакторів та веб-майстрів.

Весело, що весь Інтернет не має уявлення, як насправді відповісти на це питання. Які таблиці Drupal беруть найбільше записів, і замикаються .... хто знає.
Дж. М. Бекер

Відповіді:


8

Ви повинні перетворити всі дані в InnoDB, щоб запобігти проблемам із блокуванням таблиці. Однак ось дещо подумати:

Індексація FULLTEXT

В даний час тільки MyISAM підтримує індексацію FULLTEXT. Індексація FULLTEXT для InnoDB наразі працює для MySQL 5.6, але не готова до виробництва . Якщо у вас є будь-які таблиці Drupal, які мають індекси FULLTEXT, наразі вони не можуть бути перетворені в InnoDB.

ОНОВЛЕННЯ на індексацію FULLTEXT

MySQL 5.6 тепер GA (для виробничого використання). Спробуйте спробувати індексацію FULLTEXT в InnoDB.

Щоб знайти ті таблиці з FULLTEXTіндексом, запустіть цей запит:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

Якщо жодні рядки не повернулися, конвертуйте всі таблиці InnoDB у вміст вашого серця. Я писав раніше повідомлення про те, як перетворити всі таблиці MyISAM в InnoDB, використовуючи лише mysql .

Реплікація MySQL

Якщо у вас є важке для читання середовище, читання можуть пройти швидше в MyISAM, якщо ви зробите наступне:

  • Мастер налаштування / Реплікація підлеглого
  • Створіть одного чи декількох зчитуваних рабів під головним
  • Додайте --skip-innodbв /etc/my.cnf на всіх Slaves (перетворює таблиці в MyISAM при завантаженні даних у Slave)
  • За допомогою цієї команди змініть формат рядків усіх таблиць MyISAM на кожному підлеглому на FIXED: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • Я щось про це розмістив у DBA StackExchange
  • Книга MySQL Database Design and Tuning рекомендує використовувати ROW_FORMAT=FIXEDна сторінках 72,73. Це внутрішньо перетворить усі поля VARCHAR у CHAR. Це зробить таблицю MyISAM більшою, але виконані SELECTs проти неї будуть набагато швидшими. Я особисто можу це засвідчити. Колись у мене був стіл, який був 1,9 Гб. Я змінив формат на ALTER TABLE tblname ROW_FORMAT=FIXED. Стіл закінчився 3,7 Гб. Швидкість SELECTs проти нього була на 20-25% швидшою, не покращуючи і не змінюючи нічого іншого.

Єдиний головний біль у цьому полягає в тому, щоб ваша програма знала про окремі раби, що читаються.

ЕПІЛОГ

Якщо ви шукаєте інші переваги, які має кожен механізм зберігання даних, перевірте DBA StackExchange:


4

Оскільки ваш веб-сайт є важким для читання, я просто перетворять усі таблиці в InnoDB. Тоді ви зможете оптимізувати ефективність читання, розмістивши пул InnoDB і кеш запитів відповідним чином. Таким чином ми досягаємо декількох тисяч запитів в секунду на спеціалізованих серверах баз даних в нашій хостинговій інфраструктурі Drupal.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.