Re Slowlog: Покажите нам свой my.cnf.Были ли изменения в разделе [mysqld]
?Протестируйте его с помощью SELECT SLEEP(12);
, а затем просмотрите файл и таблицу.
Альтернативный способ найти запрос: поскольку запрос занимает несколько минут, выполните SHOW FULL PROCESSLIST;
, если считаете, что он выполняется.
Сколько у вас оперативной памяти?У нет max_allowed_packet=300M
, если у вас не менее 30 ГБ ОЗУ.В противном случае вы рискуете обменом (или даже крахом).Оставьте этот параметр ниже 1% ОЗУ.
Для дальнейшего анализа настроек укажите, пожалуйста, (1) размер ОЗУ, (2) SHOW VARIABLES;
и (3) SHOW GLOBAL STATUS;
.
Redeleted_at
: Ссылка, которую вы дали, начинается с "Колонка удален_ не является подходящим индексным кандидатом".Вы неверно истолковали это.Речь идет об одной колонке INDEX(deleted_at)
.Я предлагаю составной индекс, такой как INDEX(contact_id, job_class_name, execute_at, deleted_at)
.
158 секунд для простого запроса на небольшую таблицу?Может случиться так, что происходит много других вещей.Получите PROCESSLIST
.
Re Отдельные индексы и составные: представьте себе два индекса: INDEX(last_name)
и INDEX(first_name)
.Вы пролистываете индекс last_name, чтобы найти «Джеймса», тогда что вы можете сделать?Пролистав другой индекс «Рик», вы не найдете меня.
Анализ переменных и глобальное состояние
Наблюдения:
- Версия: 5.7.22-log
- 1,00 ГБ ОЗУ
- Время работы = 16d 10: 30: 19
- Вы уверены, что это былоa ПОКАЗАТЬ ГЛОБАЛЬНОЕ СОСТОЯНИЕ?
- Вы не работаете в Windows.
- Работает в 64-битной версии
- Вы, кажется, работаете полностью (или в основном) с InnoDB.
Более важные проблемы:
innodb_buffer_pool_size - я думал, что у вас это было в 213M, а не 10M.10М это слишком мало.С другой стороны, кажется, что у вас меньше данных.
Поскольку оперативной памяти очень мало, я рекомендую сбросить tmp_table_size и max_heap_table_size и max_allowed_packet до 8M.И более низкие table_open_cache, table_definition_cache и innodb_open_files до 500.
Что вызывает так много одновременных соединений?
Подробности и другие наблюдения:
( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98%
-% оперативной памяти, используемой для InnoDB buffer_pool
( innodb_buffer_pool_size ) = 10M
- InnoDB Data + Index cache
( innodb_lru_scan_depth ) = 1,024
- «InnoDB: page_cleaner: 1000 мсек, цикл, который должен был выполняться ...» можетбыть исправлено путем понижения lru_scan_depth
( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8%
- Pct для buffer_pool в настоящее время не используется - innodb_buffer_pool_size больше необходимого?
( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0%
- Процент пула буферов, занятого данными- Небольшой процент может означать, что buffer_pool неоправданно велик.
( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6%
- Процент ОЗУ, используемый для буферизации записей журнала InnoDB.- Слишком большой отнимает от другого использования для оперативной памяти.
( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0%
- Отношение размера журнала к размеру buffer_pool.Рекомендуется 50%, но посмотрите другие расчеты, если это имеет значение.- Журнал не должен быть больше, чем пул буферов.
( innodb_flush_method ) = innodb_flush_method =
- Как InnoDB должен запрашивать у ОС запись блоков.Предложите O_DIRECT или O_ALL_DIRECT (Percona), чтобы избежать двойной буферизации.(По крайней мере, для Unix.) См. Chrischandler для предостережения о O_ALL_DIRECT
( innodb_flush_neighbors ) = 1
- Незначительная оптимизация при записи блоков на диск.- Используйте 0 для SSD накопителей;1 для жесткого диска.
( innodb_io_capacity ) = 200
- число операций ввода-вывода в секунду на диске.100 для медленных дисков;200 для прядильных дисков;1000-2000 для твердотельных накопителей;умножить на коэффициент RAID.
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF
- регистрировать ли все тупики.- Если вы страдаете от тупиков, включите это.Внимание: если у вас много взаимоблокировок, это может привести к записи большого количества данных на диск.
( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6%
- процент оперативной памяти, выделяемой при необходимости таблицы MEMORY (для каждой таблицы), или временной таблицы внутри SELECT (длявременная таблица для некоторых SELECTs).Слишком высокая может привести к обмену.- Уменьшите tmp_table_size и max_heap_table_size, скажем, до 1% от оперативной памяти.
( net_buffer_length / max_allowed_packet ) = 16,384 / 16M = 0.10%
( local_infile ) = local_infile = ON
- local_infile = ON - потенциальная проблема безопасности
( Select_scan / Com_select ) = 111,324 / 264144 = 42.1%
-% выборок, выполняющих полное сканирование таблицы.(Может быть одурачен хранимыми процедурами.) - Добавить индексы / оптимизировать запросы
( long_query_time ) = 10
- Обрезание (секунды) для определения «медленного» запроса.- Предложить 2
( Max_used_connections / max_connections ) = 152 / 151 = 100.7%
- Пиковый% соединений - увеличить max_connections и / или уменьшить wait_timeout
У вас есть полупериод кеша запросов.Вы должны установить и query_cache_type = OFF, и query_cache_size = 0.Существует (согласно слухам) «ошибка» в коде QC, которая оставляет некоторый код включенным, если вы не отключите обе эти настройки.
Аномально маленький:
( Innodb_pages_read + Innodb_pages_written ) / Uptime = 0.186
Created_tmp_files = 0.015 /HR
Handler_write = 0.21 /sec
Innodb_buffer_pool_bytes_data = 3 /sec
Innodb_buffer_pool_pages_data = 256
Innodb_buffer_pool_pages_total = 638
Key_reads+Key_writes + Innodb_pages_read+Innodb_pages_written+Innodb_dblwr_writes+Innodb_buffer_pool_pages_flushed = 0.25 /sec
Table_locks_immediate = 2.8 /HR
Table_open_cache_hits = 0.44 /sec
innodb_buffer_pool_chunk_size = 5MB
Аномально большой:
Com_create_db = 0.41 /HR
Com_drop_db = 0.41 /HR
Connection_errors_peer_address = 2
Performance_schema_file_instances_lost = 9
Ssl_default_timeout = 500
Аномальные строки:
ft_boolean_syntax = + -><()~*:&
have_ssl = YES
have_symlink = DISABLED
innodb_fast_shutdown = 1
optimizer_trace = enabled=off,one_line=off
optimizer_trace_features = greedy_search=on, range_optimizer=on, dynamic_range=on, repeated_subselect=on
session_track_system_variables = time_zone, autocommit, character_set_client, character_set_results, character_set_connection
slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN