Анализ ГЛОБАЛЬНОГО СОСТОЯНИЯ и ПЕРЕМЕННЫХ:
Наблюдения:
- Версия: 10.4.12-МарияДБ
- 32 ГБ оперативной памяти
- Время безотказной работы = 19д 23:11:43
- Похоже, вы используете и MyISAM, и InnoDB.
- 240 запросов в секунду
Более важные вопросы:
Изменять long_query_time
к 1
так что вы можете поймать больше запросов в slowlog. (У вас есть 10 секунд; это, вероятно, объясняет, почему вы нашли только 4 запроса.)
Есть несколько признаков того, что некоторые запросы выполняются неэффективно. Вот как найти такие запросы: http://mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog
Почему вы используете MyISAM? Значения сбивают с толку - это как если бы вы [пере]построили индекс для большой таблицы MyISAM, но ничего больше не сделали. В большинстве случаев лучше использовать InnoDB.
innodb_buffer_pool_size
вероятно, можно увеличить, чтобы улучшить скорость запросов InnoDB.
Будьте осторожны в отношении общий_лог
-- он довольно быстро заполняет диск.
«Кэш запросов» работает неэффективно. Я рекомендую полностью отключить его: query_cache_type = выкл.
и query_cache_size = 0
.
Max_used_connections
нажмите 152, что указывает на то, что одновременно подключено много пользователей. (Это не означает, что одновременно выполнялось 152 запроса.)
Подробности и другие наблюдения:
Преобразование из MyISAM в InnoDB
( Key_blocks_used * 1024 / key_buffer_size ) = 460 * 1024 / 128M = 0,35%
-- Процент использования key_buffer. Верхняя отметка.
-- Уменьшите key_buffer_size (теперь 134217728), чтобы избежать ненужного использования памяти.
((key_buffer_size/0,20 + innodb_buffer_pool_size/0,70)) = ((128M/0,20 + 8192M/0,70))/32768M = 37,7%
-- Большая часть доступной оперативной памяти должна быть доступна для кэширования.
-- http://mysql.rjweb.org/doc.php/память
(общий_журнал) = общий_журнал = ВКЛ.
-- Журнал (ФАЙЛ или ТАБЛИЦА) всех выполненных запросов.
-- Выключите general_log (сейчас включен), когда он не используется. Этот журнал может очень быстро заполнить диск.
( innodb_buffer_pool_size ) = 8 192 / 32768M = 25,0%
-- % оперативной памяти, используемой для InnoDB buffer_pool
-- Установите около 70% доступной оперативной памяти. (Слишком низкое значение менее эффективно; слишком высокое значение может привести к обмену.)
((key_buffer_size/0,20 + innodb_buffer_pool_size/0,70)) = ((128M/0,20 + 8192M/0,70))/32768M = 37,7%
-- (метрика для оценки использования оперативной памяти)
( innodb_lru_scan_depth * innodb_page_cleaners ) = 1024 * 4 = 4096
-- Объем работы по очистке страниц каждую секунду.
-- "InnoDB: page_cleaner: запланированный цикл занял 1000 мс..." можно исправить, уменьшив lru_scan_depth: рассмотрим 1000 / innodb_page_cleaners (сейчас 4). Также проверьте обмен.
(innodb_lru_scan_depth) = 1024
-- "InnoDB: page_cleaner: запланированный цикл занял 1000 мс..." можно исправить, уменьшив lru_scan_depth
(innodb_io_capacity) = 200
-- При сбросе используйте это количество операций ввода-вывода.
-- Чтение может быть вялым или скачкообразным.
( Innodb_log_writes ) = 43 856 157 / 1725103 = 25 /сек
(Innodb_os_log_writing/(Uptime/3600)/innodb_log_files_in_group/innodb_log_file_size) = 137 804 939 264/(1725103/3600)/2/48M = 2,86
-- Соотношение
-- (см. протокол)
(Время работы / 60 * innodb_log_file_size / Innodb_os_log_writing) = 1 725 103 / 60 * 48M / 137804939264 = 10,5
-- Минуты между ротациями журналов InnoDB. Начиная с 5.6.8, это можно изменить динамически; не забудьте также изменить my.cnf.
-- (Рекомендация 60 минут между ротациями несколько произвольна.) Отрегулируйте innodb_log_file_size (теперь 50331648). (Невозможно изменить в AWS.)
( innodb_flush_method ) = innodb_flush_method = fsync
-- Как InnoDB должен запрашивать у ОС запись блоков. Предложите O_DIRECT или O_ALL_DIRECT (Percona), чтобы избежать двойной буферизации. (По крайней мере, для Unix.) См. chrischandler для предостережений относительно O_ALL_DIRECT.
( default_tmp_storage_engine ) = default_tmp_storage_engine =
(innodb_flush_neighbors) = 1
-- Незначительная оптимизация при записи блоков на диск.
-- Используйте 0 для дисков SSD; 1 для жесткого диска.
(innodb_io_capacity) = 200
-- Количество операций ввода-вывода в секунду на диске . 100 для медленных дисков; 200 для вращающихся дисков; 1000-2000 для твердотельных накопителей; умножьте на коэффициент RAID.
( innodb_adaptive_hash_index ) = innodb_adaptive_hash_index = ON
-- Обычно должен быть включен.
-- Есть случаи, когда OFF лучше. См. также innodb_adaptive_hash_index_parts (теперь 8) (после 5.7.9) и innodb_adaptive_hash_index_partitions (MariaDB и Percona). ON был причастен к редким сбоям (ошибка 73890). 10.5.0 решил по умолчанию ВЫКЛ.
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = ВЫКЛ.
-- Регистрировать ли все взаимоблокировки.
-- Если вас мучают взаимоблокировки, включите это.Предупреждение: Если у вас много взаимоблокировок, это может привести к записи большого количества данных на диск.
(сервер_набора_символов) = сервер_набора_символов = latin1
-- Проблемы с кодировкой можно решить, установив для character_set_server (теперь latin1) значение utf8mb4. Это будущий дефолт.
( локальный_файл ) = локальный_файл = ON
-- local_infile (сейчас ВКЛ) = ВКЛ - потенциальная проблема безопасности
( Key_blocks_used * 1024 / key_buffer_size ) = 460 * 1024 / 128M = 0,35%
-- Процент использования key_buffer . Верхняя отметка.
-- Уменьшите key_buffer_size (теперь 134217728), чтобы избежать ненужного использования памяти.
( Key_writes / Key_write_requests ) = 19 978 377 / 40284646 = 49,6%
-- эффективность key_buffer для записи
-- Если у вас достаточно оперативной памяти, стоит увеличить key_buffer_size (сейчас 134217728).
( query_cache_size ) = 524 288 = 0,5 МБ
-- Размер КК
-- Слишком маленький = бесполезен. Слишком большой = слишком много накладных расходов. Рекомендуется либо 0, либо не более 50M.
( Qcache_lowmem_prunes ) = 125 234 412 / 1725103 = 73 /сек
-- Не хватило места в QC
-- увеличить query_cache_size (теперь 524288)
(Qcache_lowmem_prunes/Qcache_inserts) = 125 234 412/146211296 = 85,7%
-- Removal Ratio (частота необходимости обрезки из-за нехватки памяти)
( Qcache_not_cached ) = 78 413 835 / 1725103 = 45 /сек
-- Попытка SQL_CACHE была проигнорирована
-- Переосмыслить кэширование; настроить qcache
(Qcache_hits/Qcache_inserts) = 37 201 050/146211296 = 0,254
-- Соотношение попаданий и вставок -- высокое -- это хорошо
-- Рассмотрите возможность отключения кеша запросов.
(Qcache_hits / (Qcache_hits + Com_select)) = 37 201 050 / (37201050 + 282029692) = 11,7%
-- Соотношение попаданий -- SELECT, которые использовали QC
-- Рассмотрите возможность отключения кеша запросов.
(Qcache_hits / (Qcache_hits + Qcache_inserts + Qcache_not_cached)) = 37 201 050 / (37201050 + 146211296 + 78413835) = 14,2%
-- Частота попаданий в кэш запросов
-- Наверное, лучше отключить QC.
( (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache / query_alloc_block_size ) = (524288 - 78344) / 82 / 16384 = 0,332
-- query_alloc_block_size против формулы
-- Настроить query_alloc_block_size (теперь 16384)
( Created_tmp_tables ) = 96 501 765 / 1725103 = 56 /сек
-- Частота создания "временных" таблиц как часть сложных SELECT.
( Created_tmp_disk_tables ) = 23 539 653 / 1725103 = 14 /сек
-- Частота создания диск «временные» таблицы как часть сложных SELECT
-- увеличить tmp_table_size (теперь 16777216) и max_heap_table_size (теперь 16777216).
Проверьте правила для временных таблиц, когда вместо MyISAM используется MEMORY. Возможно, незначительные изменения схемы или запроса помогут избежать использования MyISAM.
Улучшенные индексы и переформулировка запросов, скорее всего, помогут.
( Created_tmp_disk_tables / Вопросы ) = 23 539 653 / 414140316 = 5,7%
-- Процент запросов, которым требовалась таблица tmp на диске.
-- Улучшенные индексы/Без BLOB/и т.д.
( Select_full_join / Com_select ) = 30 333 225 / 282029692 = 10,8%
-- % выборок, которые являются безиндексными соединениями
-- Добавьте подходящие индексы к таблицам, используемым в JOIN.
( Com_insert + Com_delete + Com_delete_multi + Com_replace + Com_update + Com_update_multi ) = (87669877 + 27242 + 0 + 0 + 1452911 + 0) / 1725103 = 52 /сек
-- записей/сек
-- 50 записей в секунду + сброс журнала, вероятно, превысят емкость записи ввода-вывода для жестких дисков. Если у вас SSD, то этот показатель, вероятно, подходит.
( binlog_format ) = binlog_format = СМЕШАННЫЙ
-- ЗАЯВЛЕНИЕ/РЯД/СМЕШАННЫЙ.
-- ROW предпочитают 5,7 (10,3)
(длинное_время_запроса) = 10
-- Cutoff (Seconds) для определения "медленного" запроса.
-- Предложить 2
( Max_used_connections / max_connections ) = 152 / 151 = 100,7%
-- Пиковый % подключений
-- увеличьте max_connections (теперь 151) и/или уменьшите wait_timeout (теперь 28800). Или ускорить запросы.
( Соединения ) = 11 987 448 / 1725103 = 6,9 /сек
-- Соединения
-- Увеличить wait_timeout (сейчас 28800); использовать пул?
( Connection_errors_accept + Connection_errors_internal + Connection_errors_peer_address + Connection_errors_select + Connection_errors_tcpwrap ) = 0 + 26 + 0 + 0 + 0 = 26
-- Ошибки подключения, отличные от max_connections.
-- Для получения дополнительной информации см. SHOW GLOBAL STATUS LIKE 'Connection_errors%'
Аномально маленький:
Created_tmp_files = 0,094/час
innodb_spin_wait_delay = 4
Аномально большой:
Aria_pagecache_writes = 34 /сек
Ария_транзакция_log_syncs = 25 641
Com_show_warnings = 40/час
Connection_errors_internal = 0,054/час
Handler_read_key = 85109/сек
Handler_tmp_update = 839/сек
Innodb_buffer_pool_read_requests = 675158/сек
Innodb_buffer_pool_read_requests / (Innodb_buffer_pool_read_requests + Innodb_buffer_pool_reads) = 100,0%
Innodb_rows_updated = 356/сек.
performance_schema_max_cond_classes = 90
Нестандартные строки:
Innodb_have_punch_hole = ВЫКЛ.
aria_recover_options = РЕЗЕРВНОЕ КОПИРОВАНИЕ,БЫСТРОЕ
отключить_on_expired_password = ВЫКЛ.
ft_boolean_syntax = + -><()~*:
innodb_fast_shutdown = 1
log_output = ТАБЛИЦА
myisam_stats_method = NULLS_UNEQUAL
old_alter_table = ПО УМОЛЧАНИЮ
оптимизатор_трассировка = включено = выключено