Mysql
 sql >> база данни >  >> RDS >> Mysql

Най-добра практика за създаване на индекси във вашите MySQL таблици – подвижни индексни компилации

Като имате подходящи индекси във вашите MySQL таблици, можете значително да подобрите производителността на SELECT заявките. Но знаете ли, че добавянето на индекси към вашите таблици само по себе си е скъпа операция и може да отнеме много време за завършване в зависимост от размера на вашите таблици? През това време е вероятно също да изпитате влошена производителност на заявките, тъй като вашите системни ресурси също са заети с работата по създаване на индекси. В тази публикация в блога обсъждаме подход за оптимизиране на процеса на създаване на MySQL индекс по такъв начин, че редовното ви работно натоварване да не бъде засегнато.

Създаване на MySQL Rolling Index

Наричаме този подход „Създаване на подвижен индекс“ – ако имате набор от реплики главен-подчинен на MySQL, можете да създавате индекса един възел в даден момент по непрекъснат начин. Трябва да създадете индекса само на подчинените възли, така че производителността на главната да не бъде засегната. Когато създаването на индекс е завършено на подчинените, ние понижаваме текущия главен и повишаваме един от подчинените, който е актуален, като нов главен. По това време изграждането на индекса продължава на оригиналния главен възел (който сега е подчинен). Ще има кратка продължителност (десетки секунди), през която ще загубите връзка с вашата база данни поради отказ, но това може да бъде преодоляно чрез повторни опити на ниво приложение.

Предимства на производителността от създаването на подвижния индекс

Направихме малък експеримент, за да разберем ползите от производителността от създаването на подвижен индекс.

Тестът използва MySQL набор от данни, създаден с помощта на Sysbench, който имаше 3 таблици с 50 милиона реда всяка. Генерирахме натоварване на MySQL master с 30 клиента, работещи с балансирано работно натоварване (50% четене и 50% запис) за 10 минути и в същото време изградихме прост вторичен индекс на една от таблиците в два сценария:

  1. Създаване на индекса директно върху главния
  2. Създаване на индекса на подчинения

Конфигурация на тестовото легло на MySQL

Тип на MySQL екземпляр EC2 екземпляр m4.large с 8GB RAM
Тип внедряване Набор от 2 възела главен-подчинен с полусинхронна репликация
Версия на MySQL 5.7.25

Резултати от производителността

Сценарий Пропускателна способност на работното натоварване (заявки в секунда) 95-ти процентил закъснение
Създаване на индекс на главния 453.63 670 ms
Създаване на подвижен индекс 790.03 390 ms

Вземане за вкъщи

Като стартираме създаването на индекс директно на главната MySQL, бихме могли да изпитаме само 60% от пропускателната способност, която беше постигната чрез стартиране на създаване на индекс на подчинения MySQL чрез подвижна операция. Закъснението от 95-ия процентил на заявките също беше 1,8 пъти по-високо, когато създаването на индекса се случи на главния сървър.

Най-добра практика за създаване на индекси във вашите #MySQL таблици Щракнете за туит

Автоматизиране на създаването на подвижния индекс

ScaleGrid автоматизира създаването на подвижен индекс за внедряването на MySQL с опростен потребителски интерфейс, за да го инициирате.

В потребителския интерфейс по-горе можете да изберете името на вашата база данни и таблица и „Добавяне на индекс“ като операция за промяна на таблицата. След това посочете име на колона и име на индекс и командата за промяна на таблицата ще бъде генерирана и показана за вас. След като щракнете върху Създаване, създаването на индекс ще се извършва един възел в даден момент по подвижния начин.

Освен това, ScaleGrid поддържа и други прости операции за промяна на таблицата, като добавяне на нова колона към вашата таблица по подвижния начин. Очаквайте моята последваща публикация в блога с повече подробности!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ALTER TABLE за добавяне на съставен първичен ключ

  2. Mysql преброява екземпляри на подниз, след което подрежда по

  3. Изпълнение на .sql скрипт с помощта на MySQL с JDBC

  4. JSON_OBJECT() – Създайте JSON обект от списък с двойки ключ/стойност в MySQL

  5. Как да нулирам паролата за root на mysql?