Использую OpenServer 5.3.7 с PHP 7.4 и MySQL 8.0 на сервере Intel Core i3-2100 (3.1 ГГц), 4 ГБ ОЗУ без SSD, на HDD. Установлен сайт на Wordpress, в котором содержится более 60 тысяч опубликованных записей. Засунуты они туда автопостингом скриптами. Каждая запись - это около 5-10 страниц А4 текста. У каждой записи установлена своя рубрика. Меток гораздо меньше - около семи штук, распределены равномерно. Это для описания масштаба загрузки базы. У некоторых записей много ревизий, таким образом в базе таблица с постами (wp_posts) имеет около 120 тысяч строк. MySQL сайта работает в InnoDB режиме, что кажется лучше сказывается на скорости. Объем данной БД около 4.1 ГБ.
Но есть проблема. Часто при первом обращении к поиску сайта (с конкретным запросом) выгрузка результатов может занять минут 20. Второй и последующие поиски происходят за секунды. Вероятно, первый поиск требует выгрузки базы в файл подкачки? MySQL постоянно сидит в ОЗУ и занимает там 800 МБ, 1500 МБ (чаще всего) или даже 2000-2200 МБ.
Конфиг mysql вот:
[client] port = %mysqlport% character_sets_dir = "%dprogdir%\\modules\\database\\%mysql_driver%\\share\\charsets" [mysql] no-auto-rehash no-beep character_sets_dir = "%dprogdir%\\modules\\database\\%mysql_driver%\\share\\charsets" [mysqld] # Required Settings basedir = "%dprogdir%\\modules\\database\\%mysql_driver%" bind-address = %ip% character_sets_dir = "%dprogdir%\\modules\\database\\%mysql_driver%\\share\\charsets" character_set_server = utf8mb4 collation_server = utf8mb4_unicode_ci datadir = "%dprogdir%\\userdata\\%mysql_driver%" default_authentication_plugin = mysql_native_password default_storage_engine = MyISAM explicit_defaults_for_timestamp = 1 ft_min_word_len = 3 local_infile = 0 lower_case_table_names = 1 max_allowed_packet = 3072M mysqlx = 0 pid_file = "%dprogdir%\\userdata\\temp\\mysql.pid" port = %mysqlport% secure-file-priv = "%dprogdir%\\userdata\\php_upload" #skip_name_resolve = 1 ssl = 0 tmpdir = "%dprogdir%\\userdata\\temp" # Buffer Settings bulk_insert_buffer_size = 256M join_buffer_size = 256M read_buffer_size = 128M read_rnd_buffer_size = 128M sort_buffer_size = 256M # Connection Settings max_connections = 64 max_connect_errors = 32 back_log = 128 thread_cache_size = 64 interactive_timeout = 180 wait_timeout = 180 # InnoDB Settings innodb_adaptive_hash_index = 0 innodb_buffer_pool_instances = 1 innodb_buffer_pool_size = 3072M innodb_data_file_path = ibdata1:10M:autoextend innodb_data_home_dir = "%dprogdir%\\userdata\\%mysql_driver%" innodb_file_per_table = 1 #innodb_force_recovery = 1 innodb_log_file_size = 64M innodb_read_io_threads = 8 #innodb_thread_concurrency = 4 innodb_write_io_threads = 8 innodb_flush_log_at_trx_commit = 0 # Logging %log%general_log = 1 %log%general_log_file = "%dprogdir%\\userdata\\logs\\%mysql_driver%_queries.log" log_error = "%dprogdir%\\userdata\\logs\\%mysql_driver%_error.log" skip-log-bin #log_queries_not_using_indexes = 1 #long_query_time = 5 #slow_query_log = 1 #slow_query_log_file = "%dprogdir%\\userdata\\logs\\%mysql_driver%_slow.log" # MyISAM Settings key_buffer_size = 256M myisam_max_sort_file_size = 256M myisam_recover_options = backup,force # Table Settings table_definition_cache = 50000 table_open_cache = 50000 open_files_limit = 60000 max_heap_table_size = 256M tmp_table_size = 256M # Set the SQL mode to strict sql-mode = "ALLOW_INVALID_DATES" [mysqldump] quick quote_names max_allowed_packet = 1024M [myisamchk] key_buffer_size = 256M sort_buffer_size = 256M read_buffer = 16M write_buffer = 16M [mysqlhotcopy] interactive-timeout [mysqld_safe] open_files_limit = 60000Вопрос: как можно ускорить работу базы для первого поиска? База в основном статичная, запись данных происходит пакетно по 200-1000 записей. И, возможно, даже запись новых данных влияет на переиндексирование БД, но речь идет даже о базе, к которой никак не обращались, просто сервер работал несколько часов в холостую, и вот дали первый поисковый запрос - он будет выполнятся несколько минут. Может можно что-то в Windows 7 настроить с подкачкой?