У меня размер БД MySQL 1 ГБ, работающий на выделенном сервере с 4C/4T, 8 ГБ RAM и SSD-накопителем.Настройка конфигурации MySQL для 1G DB, 8GB Ram
Мой сайт имеет более 200 000 статей, а при использовании функций поиска (SELECT-запросы) он медленно или не реагирует на то, что мне нужно, чтобы убить процессы с моей панели WHM.
Я просил поддержки сегодня, чтобы показать мне файл my.conf, и, как я вижу, он работает по умолчанию. Вот данные:
max_connections = 150
max_user_connections = 100
query_cache_size = 64M
skip-external-locking
key_buffer_size = 64M
max_allowed_packet=268435456
table_open_cache = 256
sort_buffer_size = 1M
net_buffer_length = 16K
read_buffer_size = 1M
read_rnd_buffer_size = 1M
myisam_sort_buffer_size = 32M
innodb_file_per_table
tmp_table_size = 64M
max_heap_table_size = 64M
thread_cache_size = 8
query_cache_type = on
# This setting allows the use of asynchronous I/O in InnoDB.
# The following files track usage of this resource:
# - /proc/sys/fs/aio-max-nr
# - /proc/sys/fs/aio-nr
# Default limit is 65536, of which a single instance of mysql uses 2661 out of the box
innodb_use_native_aio = 1
default_storage_engine = MyISAM
open_files_limit=10000
В заданных значений, я не вижу присутствие innodb_buffer_pool_size
, и парень из поддержки спросил бы я хотел, чтобы добавить его в my.conf. Я читал, что это важная ценность, поэтому, вероятно, ее следует добавить?
Самые большие таблицы в моей БД - InnoDB, а MyISAM - механизм хранения по умолчанию.
Какова будет рекомендованная конфигурация здесь и какие значения необходимо будет скорректировать для достижения оптимальной производительности?
В my.cnf есть что-то еще, например innodb_buffer_pool_size
или innodb_log_file_size
?
Скорее всего, проблема не связана с конфигурационным файлом. Я бы посмотрел на SQL-запросы, которые занимают слишком много времени и запускают команду EXPLAIN. Некоторые индексы могут отсутствовать, что приводит к полному сканированию таблицы. Вторая самая популярная ошибка - чтение всего большого набора результатов SELECT в ОЗУ за один раз с помощью fetchall() или эквивалентного. –
@MikeBessonov Запросы в основном предназначены для того, чтобы функция поиска выполняла фактический поиск. Я могу использовать FULLTEXT вместо LIKE для некоторых запросов, но это может привести к тому, что я потеряю подстановочные знаки, что является важной частью поиска моего сайта. По этой причине я думал, что для того, чтобы настройка базы данных имела лучшую производительность, определенно повлияет на производительность сайта в целом. –
Можете ли вы определить SQL-запрос, который слишком долго выполняется? –