Bash scripts for highloading and measuring performance of mysql, using awk and existing SQL logs from production system.
Я хочу поделиться опытом нагрузочного тестирования СУБД, с использованием продуктивной нагрузки.
Это реальный пример реализации многопоточного тестирования БД на bash.
Суть подхода в следующем:
- Собирается полный лог SQL запросов в БД, подготавливается под конкретную исследовательскую задачу. Например, удаляются все запросы, кроме select.
- Задается количество потоков, а также количество повторений одного и того же SQL запроса.
- Исходные данные разделяются на потоки.
- В каждом потоке каждый оператор исходного набора выполняется определенное количество раз. Порядок выполнения операторов устанавливается псевдослучайный.
Когда я приступил к решению данной задачи, у меня не было под рукой других инструментов, кроме знаний bash/awk. Кроме этого, не было существенных ограничений по ресурсам и минимальной нагрузке на БД. Поэтому я написал набор скриптов bash для выполнения этой задачи.
Основная задача - "на скорую руку" подобрать параметры конфигурации СУБД, для увеличения её производительности.
Сложность заключалась в том, что запросы необходимо было выполнять в несколько раздельных потоков. А именно, в их строго определённом количестве, на протяжении всего расчета.
Различные способы организации многопоточности с помощью семафоров в файле и в памяти не сработали. Поэтому, скрипты пришлось разделить на три фазы:
- Скрипт запуска, контроля/мониторинга и завершения расчета. Запуск скрипта 2 в фоновом режиме.
- Скрипт подготовки(рандомизации) исходных файлов и запуска расчёта потоков.
- Скрипт запуска расчёта одного потока, с установленным количеством запусков каждого SQL запроса.
Скрипты не запускались несколько лет, на тестирование у меня сейчас нет времени. Поэтому прошу прощения, если не заработают. Можно обратиться ко мне, если потребуется их "оживить".