Как настроить MQSQL сервера, чтобы сократить время выполнения запроса?

Ссылка скопирована
30 января 2026 1 ответ

Друзья, прошу подсказать.

На Wordpress-сайте происходит фильтрация записей по таксономиям и произвольным полям. Понятно, что meta_query традиционно работает медленно, но есть нюанс. На локальном Open Server запрос в зависимости от сложности занимает от 0.5 до 4.5 секунд.
А на VDS-хостинге сложный запрос занимает от 25 до 45 секунд, может и вообще не выполнгиться!
Более чем уверен, что дело в настройках MYSQL хостинга. Прошу подсказать на какие параметры обратить внимание.

НАСТРОЙКИ MQSQL хостинга
symbolic-links=0

skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 16M
table_open_cache = 10000
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
net_buffer_length = 1M
thread_stack = 240K

myisam_max_sort_file_size = 256M

#innodb_use_native_aio = 0
innodb_file_per_table

max_connections=64
max_user_connections=20
wait_timeout=10
interactive_timeout=50
long_query_time=5

НАСТРОЙКИ OPEN SERVER-а, который работает быстро:
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
datadir = "%dprogdir%\userdata\%mysql_driver%"
default_authentication_plugin = mysql_native_password
default_storage_engine = InnoDB
explicit_defaults_for_timestamp = 1
ft_min_word_len = 3
local_infile = 0
lower_case_table_names = 1
max_allowed_packet = 256M
mysqlx = 0
pid_file = "%dprogdir%\userdata\temp\mysql.pid"
port = %mysqlport%
secure-file-priv = "%dprogdir%\userdata\temp\upload"
#skip_name_resolve = 1
skip-ssl
tmpdir = "%dprogdir%\userdata\temp"
# Buffer Settings
bulk_insert_buffer_size = 8M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
sort_buffer_size = 2M
# Connection Settings
max_connections = 64
max_connect_errors = 32
back_log = 128
thread_cache_size = 8
interactive_timeout = 180
wait_timeout = 180

# InnoDB Settings

innodb_adaptive_hash_index = 0
innodb_buffer_pool_instances = 1
innodb_buffer_pool_size = 128M
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
# 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 = 32M
myisam_max_sort_file_size = 256M
myisam_recover_options = backup,force
# Table Settings
table_definition_cache = 10000
table_open_cache = 10000
open_files_limit = 60000
max_heap_table_size = 128M
tmp_table_size = 128M
[mysqldump]
quick
quote_names
max_allowed_packet = 16M

[myisamchk]

key_buffer_size = 64M
sort_buffer_size = 64M
read_buffer = 2M
write_buffer = 2M
[mysqld_safe]
open_files_limit = 60000

Что подскажете?

Дополнительно:

А где соответствующие настройки хостинга?

  • На хостинге прописаны только те настройки что я указал - с фразы "НАСТРОЙКИ MQSQL хостинга" до "НАСТРОЙКИ OPEN SERVER-а, который работает быстро"
  • Что значит "прописаны"?
    Набор настроек везде один и тот же. И надо видеть те значения, которые на хостинге, чтобы понимать в чем проблема.
  • Ну или если это все прописано в конфиг файле то почему не записать то же самое на хостинг?
  • Роман Юрьевич Ипатьев, Прописали - почти ничего не поменялось.
    Написали запрос в хостинг. В ответ в техподдержке предложили заказать дополнительные ядра процессора (но что-то берут сомнения...) и обратили внимание на версию MYSQL: на хостинге установлен 5.7, у нас на локалке - 8.0.
  • Я предлагаю дома поставить virtualbox, сделать виртуалку с теми же параметрами что и у впс, и поиграться в ней.

    Если будет работать норм, то хостинг где-то врет

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Для оптимизации производительности MySQL сервера и сокращения времени выполнения запросов, можно применить следующие методы:

    1. Индексирование таблиц: создание индексов на поля, по которым часто выполняются запросы, позволяет ускорить поиск данных. Однако следует избегать создания слишком большого количества индексов, так как это может повлиять на производительность при вставке и обновлении данных.

    CREATE INDEX index_name ON table_name (column_name);

    CREATE INDEX index_name ON table_name (column_name);

    2. Оптимизация запросов: используйте EXPLAIN для анализа выполнения запросов и определения возможных узких мест. Избегайте использования SELECT *, так как это может привести к избыточной загрузке данных.

    EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';

    EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';

    3. Кэширование запросов: настройте кэширование запросов на стороне приложения или используйте встроенные инструменты кэширования в MySQL, такие как Query Cache или InnoDB Buffer Pool.

    4. Параметры конфигурации: настройте параметры конфигурации MySQL сервера в соответствии с требованиями вашего приложения. Например, увеличьте размер буфера запросов или установите оптимальные значения для параметров like innodb_buffer_pool_size, innodb_log_file_size, query_cache_size.

    innodb_buffer_pool_size = 2G
    innodb_log_file_size = 256M
    query_cache_size = 64M

    innodb_buffer_pool_size = 2G innodb_log_file_size = 256M query_cache_size = 64M

    5. Разделение данных: разделите данные на отдельные таблицы или базы данных для улучшения производительности. Например, можно вынести архивные данные в отдельную таблицу или базу данных.

    6. Оптимизация индексов: периодически проверяйте и оптимизируйте индексы в базе данных с помощью команды OPTIMIZE TABLE.

    OPTIMIZE TABLE table_name;

    OPTIMIZE TABLE table_name;

    Следуя этим методам, вы сможете значительно улучшить производительность MySQL сервера и сократить время выполнения запросов.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно