Какие шаги можно предпринять для увеличения производительности MariaDB 10.3?

Как улучшить производительность базы данных MariaDB 10.3.38 на Ubuntu 20.04.6 с 100 Гб оперативной памяти и 60 ядрами CPU для обработки запросов с JOIN без вложенных запросов, при условии большого объема данных (200K-400K записей для обработки и 100K-300K запросов)? Текущая стандартная конфигурация выполняет 3000 запросов с JOIN за 4 минуты. Таблицы InnoDB. Вот текущий конфигурационный файл: [указать конфигурацию].
  • 25 января 2024 г. 19:58
Ответы на вопрос 2
Для улучшения производительности MariaDB 10.3 с учетом ваших характеристик системы и задач, вы можете предпринять несколько шагов. Обратите внимание, что конкретные настройки всегда зависят от ваших индивидуальных условий работы системы, поэтому все изменения конфигурации следует тестировать на стенде перед применением их на рабочих серверах. Вот некоторые общие рекомендации:

1. **Настройка конфигурации InnoDB:**
   - `innodb_buffer_pool_size`: Установите размер пула буфера InnoDB достаточным для хранения большей части рабочего набора данных в памяти. В вашем случае с 100 ГБ ОЗУ начните, например, с 70 ГБ.
   - `innodb_buffer_pool_instances`: Повысьте значение, чтобы иметь несколько экземпляров буферного пула. Например, установите значение в соответствии с объемом оперативной памяти (примерно 1 экземпляр на 10ГБ).
   - `innodb_log_file_size`: Убедитесь, что размер файла журнала транзакций достаточно велик для минимизации ожидания записи на диск, начните с значений от 1 ГБ.
   - `innodb_log_buffer_size`: Установите достаточный размер буфера журнала, чтобы уменьшить количество записей на диск, например, 512М.
   - `innodb_flush_log_at_trx_commit`: В зависимости от требований к надежности, установите значение 0 или 2 для повышения производительности при потере устойчивости.
   - `innodb_io_capacity` и `innodb_io_capacity_max`: Настройте эти параметры соответственно вашим возможностям ввода-вывода дисковой системы.

2. **Индексация:**
   - Убедитесь, что все столбцы, участвующие в операциях JOIN, имеют соответствующие индексы.
   - Проанализируйте запросы с помощью `EXPLAIN` и добавьте необходимые индексы.
   - При необходимости создавайте составные индексы для столбцов, используемых в сортировке и группировке.

3. **Настройка сервера:**
   - `max_connections`: Увеличьте количество одновременных подключений, если это необходимо.
   - `thread_cache_size`: Установите достаточный размер кэша потоков для уменьшения накладных расходов на создание новых потоков.

4. **Настройка запросов:**
   - Оптимизируйте запросы с JOIN, обеспечивая их эффективность.
   - Используйте стратегии денормализации, если постоянно выполняются сложные запросы с JOIN.
   - Попробуйте разбить большие запросы на более мелкие и обработать их последовательно, если это возможно.

5. **Профилирование и мониторинг:**
   - Используйте инструменты профилирования и мониторинга, такие как `SHOW PROFILE` для запросов, `SHOW ENGINE INNODB STATUS`, `MariaDB's slow query log`, и перформанс-скрининг, чтобы определить узкие места.
   - Посмотрите на плагины перформанс-скрининга, такие как
Похожие вопросы