Рубріки: HighloadТеория

Определение лишних индексов в MySQL

Игорь Грегорченко

База данных чаще всего становится слабым местом высоконагруженного веб-приложения. Так что даже лишние, неиспользуемые индексы способны замедлить работу MySQL.

Самый простой способ избавления от таких индексов — утилита check-unused-keys. Она собирает информацию о неиспользуемых таблицах и индексах в MySQL при помощи другой утилиты User Statistics. Патч добавляет таблицы INFORMATION_SCHEMA (включая нужную нам INDEX_STATISTICS со статистикой использования индексов), несколько команд и переменную userstat.

Установка

Для работы утилиты требуется патч User Statistics, скачать можно по ссылке, а лучше использовать Percona Server для MySQL, который из коробки поддерживает user_stats.

Когда все готово, нужно задействовать UserStats, которые по умолчанию выключены:

mysql> SET GLOBAL userstat_running = 1;

# Установка глобальной переменной MySQL

Теперь UserStats будет собирать все статистику об использовании индексов, нагрузка на CPU минимальная.

После этого можно установить утилиту check-unused-keys:

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/check-unused-keys/check-unused-keys
chmod +x check-unused-keys

# Скачать в директорию, дать разрешение на выполнение

Использование

Когда UserStats насобирал достаточное количество статистики, можно использовать утилиту:

./check-unused-keys --help
Options:
   -d, --databases=<dbname>  Список баз данных, через запятую
   -h, --help                Показать это сообщение
   -H, --hostname=<hostname> Требуемый хост MySQL
   --[no]create-alter        Вывести операторы ALTER для каждой таблицы
   --ignore-databases        Список игнорируемых баз данных, через запятую
   --ignore-indexes          Список игнорируемых индексов, через запятую
                                 db_name.tbl_name.index_name
   --ignore-tables           Список игнорируемых таблиц, через запятую
                                 db_name.tbl_name
   --[no]ignore-primary      Включить или игнорировать PRIMARY KEY
   --[no]ignore-unique       Включить или игнорировать индексы UNIQUE
   --options-file            Использовать файл опций
   --[no]print-unused-tables 
                             Выводить или нет список неиспользуемых таблиц
                                 (индексы этих таблиц никогда не использовались)
   -p, --password=<password> Пароль пользователя MySQL
   -i, --port=<portnum>      Порт MySQL
   -s, --socket=<sockfile>   Использовать указанный MySQL unix-сокет 
   -t, --tables=<tables>     Список таблиц для оценки, через запятую
                                 db_name.tbl_name
   --[no]summary             Отобразить краткую информацию
   -u, --username=<username> Пользователь для подключения к MySQL
   -v, --verbose             Повысить детальность вывода
   -V, --version             Вывод версии программы и выход

# Вывод параметров check-unused-keys

Для запуска утилиты достаточно выполнить:

./check-unused-keys -u mysql -p password --print-unused-tables --create-alter

# Выполнение программы с указанием пользователя и пароля, выводом неиспользуемых таблиц и оператором Alter

Команда выводит неиспользуемые таблицы (с индексами), для каждой из которых будет создан “ALTER TABLE” для удаления неиспользуемых индексов. Если нужно, анализ можно провести только по требуемым БД и таблицам.

Самое главное

Утилита поможет избавиться от неиспользуемых индексов. Будьте внимательны, под удаление попадают все индексы, использованные 0 раз. Так что под раздачу попадут таблицы из cron-jobs, которые не успели выполниться за время сбора статистики.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023