Като имате подходящи индекси във вашите MySQL таблици, можете значително да подобрите производителността на SELECT заявките. Но знаете ли, че добавянето на индекси към вашите таблици само по себе си е скъпа операция и може да отнеме много време за завършване в зависимост от размера на вашите таблици? През това време е вероятно също да изпитате влошена производителност на заявките, тъй като вашите системни ресурси също са заети с работата по създаване на индекси. В тази публикация в блога обсъждаме подход за оптимизиране на процеса на създаване на MySQL индекс по такъв начин, че редовното ви работно натоварване да не бъде засегнато.
Създаване на MySQL Rolling Index
Наричаме този подход „Създаване на подвижен индекс“ – ако имате набор от реплики главен-подчинен на MySQL, можете да създавате индекса един възел в даден момент по непрекъснат начин. Трябва да създадете индекса само на подчинените възли, така че производителността на главната да не бъде засегната. Когато създаването на индекс е завършено на подчинените, ние понижаваме текущия главен и повишаваме един от подчинените, който е актуален, като нов главен. По това време изграждането на индекса продължава на оригиналния главен възел (който сега е подчинен). Ще има кратка продължителност (десетки секунди), през която ще загубите връзка с вашата база данни поради отказ, но това може да бъде преодоляно чрез повторни опити на ниво приложение.
Предимства на производителността от създаването на подвижния индекс
Направихме малък експеримент, за да разберем ползите от производителността от създаването на подвижен индекс.
Тестът използва MySQL набор от данни, създаден с помощта на Sysbench, който имаше 3 таблици с 50 милиона реда всяка. Генерирахме натоварване на MySQL master с 30 клиента, работещи с балансирано работно натоварване (50% четене и 50% запис) за 10 минути и в същото време изградихме прост вторичен индекс на една от таблиците в два сценария:
- Създаване на индекса директно върху главния
- Създаване на индекса на подчинения
Конфигурация на тестовото легло на 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 поддържа и други прости операции за промяна на таблицата, като добавяне на нова колона към вашата таблица по подвижния начин. Очаквайте моята последваща публикация в блога с повече подробности!