Как оптимизировать MySQL Server для повышения производительности?

783
pippi longstocking

Недавно мне пришлось работать с устаревшей системой. Работа с ним заняла у меня много времени, потому что многие таблицы не были должным образом нормализованы. Из-за проблем с обслуживанием это невозможно изменить. Мой старший инженер сказал мне оптимизировать сервер MySQL для повышения производительности и скорости.

Я изменил свой C:\Program Files\MySQL\MySQL Server 5.6\my.iniфайл, чтобы быть следующим:

key_buffer_size = 128M 30% of your memory (Max 4GB) max_allowed_packet = 5M table_open_cache = 256 sort_buffer_size = 10M read_buffer_size = 20M read_rnd_buffer_size = 10M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 30M thread_concurrency = 8 bulk_insert_buffer_size = 256 innodb_buffer_pool_size = 5G to 50% - 70% of your ram. innodb_additional_mem_pool_size = 1G to to 10% of ram innodb_log_buffer_size = 1G innodb_log_file_size = 1G (Max 4GB) larger the file recovery slow. innodb_file_per_table = 1 

Сначала работает нормально. Однако через несколько часов я не смог запустить MySQL, и мне пришлось переустановить MySQL Server.

Что я сделал не так и как я могу это исправить?

0
Что сказали логи? Ох, и это фактический контент? «1G (макс. 4 ГБ) больше, восстановление файла медленное». Похоже, что-то скопировано, даже не задумываясь о том, что там написано. Seth 7 лет назад 0
да, это была копия пасты. Процесс моего друга получил скорость, чем раньше, после изменения этих значений я my.ini pippi longstocking 7 лет назад 0
Тем не менее, без какой-либо дополнительной информации о технических характеристиках машины, о том, какой движок использует БД, и о том, какая именно ошибка помешала появлению MySQL, вы не получите никакой полезной информации (вероятно), и, как вы только что сказали, это даже не живой конфигурации. Почему вы изменили конфигурацию таким образом? Особенно «переустанавливать сервер» не нужно, если это была ошибка конфигурации. Кроме того, похоже, что вы также сделали [тот же] (http://stackoverflow.com/questions/40231896/how-to-optimize-mysql-server-for-better-performance) пост в Stackoverflow? Seth 7 лет назад 0
да, это его копия. Я хотел получить быстрый ответ на это. Так как это последнее сообщение не получило никакого ответа, я решил разместить это здесь. Это показывает, что двигатель БД - InnoDB. И не было ошибок. @seth pippi longstocking 7 лет назад 0
Итак, как вы определили, что не можете запустить MySQL, если не было ошибок? Почему вы решили переустановить его? Пожалуйста, предоставьте ответы и на другие вопросы. Каков порядок использования БД? Seth 7 лет назад 0
Единственной ошибкой было то, что когда я дважды щелкал по локальному узлу, в navicat появилось сообщение об ошибке «Не удается подключиться к серверу MySQL на« localhost »(10061)». pippi longstocking 7 лет назад 0

1 ответ на вопрос

2
Seth

Просто чтобы получить некоторую перспективу извлечения вашего конфигурационного файла, я сделал сравнение со значением по умолчанию ( 1, 2 ). Обозначение будет иметь параметр, за которым следует ваше значение и значение по умолчанию в скобках.

key_buffer_size = 128M (8M) max_allowed_packet = 5M (4M) table_open_cache = 256 (2000) sort_buffer_size = 10M (2M) read_buffer_size = 20M (1M) read_rnd_buffer_size = 10M (2M) myisam_sort_buffer_size = 64M (8M) thread_cache_size = 8 (-1) query_cache_size= 30M (0/1M) thread_concurrency = 8 (10) bulk_insert_buffer_size = 256 (8M) innodb_buffer_pool_size = 5G (128M) innodb_additional_mem_pool_size = 1G (8M) innodb_log_buffer_size = 1G (8M) innodb_log_file_size = 1G (5M) innodb_file_per_table = 1 (Off/On) 

Как мы видим, вы значительно увеличили большинство кешей. Но имеет ли это смысл? Вы сказали, что ваша БД использует движок InnoDB. Согласно вышеуказанной документации key_buffer_size, read_buffer_size, bulk_insert_buffer_sizeотносится только к базам данных MyISAM. Я не уверен, когда временные пробелы будут работать на этом.

Использование myisam_sort_buffer_sizeкажется задом наперед, особенно если в документации говорится: The size of the buffer that is allocated when sorting MyISAM indexes during a REPAIR TABLE or when creating indexes with CREATE INDEX or ALTER TABLE.так что в большинстве нормальных случаев использования оно будет использоваться редко.

Кроме того, вы используете следующие настройки, которые, кажется, в значительной степени зависят от вашей БД схемы использования max_allowed_packet, table_open_cache, thread_cache_size,innodb_log_buffer_size но вы ничего о модели использования не говорите. Поэтому рассмотрите приведенную выше документацию, чтобы взглянуть на то, что они на самом деле делают, и сравнить их с моделью использования БД.

Остерегайтесь этого sort_buffer_sizeи read_rnd_buffer_sizeзарезервировано для каждой сессии. Некоторые параметры MyISAM могут быть такими же, так что вы действительно получаете немало накладных расходов для каждого сеанса. Опять же, вам нужно оценить фактическую модель использования.

Теперь о настройках InnoDB, которые вы указали. innodb_additional_mem_pool_sizeустарела. Непонятно, почему вы изменили innodb_log_file_size, innodb_file_per_tableне знаю, в чем причина вашего изменения. Последний может быть просто по умолчанию On? Установив оставшуюся настройку innodb_buffer_pool_sizeна такое высокое значение, вы можете также рассмотреть возможность использования innodb_buffer_pool_instances.

В целом похоже, что вы только что попробовали что-то, и это не сработало. Согласно вашим комментариям, вы даже не заглядывали в файлы журналов MySQL, чтобы выяснить, что отвечает за службу, которая не принимает подключения или вообще не устанавливает соединение. Если вы действительно хотите оптимизировать производительность БД, вам придется это сделать. Подумайте об использовании дополнительных индексов для таблиц, где это целесообразно, чтобы повысить производительность запросов и посмотреть, какие запросы фактически выполняются в БД. Кроме того, постарайтесь получить представление о том, какой шаблон использования БД имеет с точки зрения количества соединений и размера запросов.

Хороший совет, здесь. `table_open_cache` - это особенно деликатное значение, которое, вероятно, следует удалить из конфигурации в произвольном порядке, если только нет веских причин и сопутствующего тестирования для обоснования изменения. Упоминается [здесь] (http://dba.stackexchange.com/a/45570/11651) вместе с моей любимой цитатой за все время: * «Настройка» вашего сервера может быть потрясающей тратой времени. »* Michael - sqlbot 7 лет назад 1

Похожие вопросы