Назад | Перейти на главную страницу

Хорошая / лучшая конфигурация для MySQL на крупном экземпляре EC2

У меня есть большой экземпляр EC2, посвященный MySQL.

Он будет обслуживать комбинацию Joomla / Magento, поэтому в нем будет смесь таблиц InnoDB и MyISAM. Раньше я работал только с MyISAM и поэтому не знаком с настройками, которые использует InnoDB. Эксперименты до сих пор были менее чем плодотворными, так как я продолжаю отключать движок InnoDB.

Мой экземпляр работает под управлением 64-разрядной серверной версии Ubuntu 10.04 и имеет ~ 7,5 ГБ оперативной памяти. MySQL в настоящее время использует ~ 0,6% от этого объема с несколько низкой производительностью. Я хотел бы настроить его так, чтобы он использовал как можно больше системной оперативной памяти.

При тестировании некоторых настроек я узнал, что журналы InnoDB не могут быть больше 4G.

Сможет ли кто-нибудь предоставить некоторые базовые настройки InnoDB и MyISAM, чтобы я начал.

Спасибо Тим

Я использую такой же сервер Mysql на EC2. Не трогайте /etc/mysql/my.cnf, а вместо этого помещайте файлы конфигурации в /etc/mysql/conf.d/. Это позволит вам управлять своими изменениями для определенных движков и даст администраторам дополнительные подсказки о том, как все было настроено. . Также это упрощает резервное копирование любых внесенных вами изменений, а также их отслеживание.

/etc/mysql/conf.d/innodb_mysql.cnf

[mysqld]    
# innodb settings 
innodb_additional_mem_pool_size = 12M
innodb_buffer_pool_size         = 2G
innodb_file_per_table           = 1
innodb_flush_log_at_trx_commit  = 2
innodb_lock_wait_timeout        = 180
innodb_log_buffer_size          = 16M
innodb_open_files               = 512
innodb_thread_concurrency       = 0

Большинство из этих настроек довольно стандартные, и вам обязательно стоит взглянуть на Рекомендации Percona. Вы могли бы получить в своей системе до 6G, но я бы начал с малого. Также с таблицами myisam я бы остановился на 4G. Я бы не стал трогать размеры файла журнала innodb, там очень мало пользы. Увеличение log_buffer_size и addition_mem_pool также имеет очень небольшую отдачу после начального скачка.

Кроме того, указанные выше настройки предназначены для повышения производительности, а не для согласованности транзакций. Предполагая, что вы запускаете только веб-приложение, все вышесказанное подходит, но не для банковской системы.

/etc/mysql/conf.d/general_mysql.cnf

[mysqld]
# general settings
key_buffer = 384M

key_buffer является наиболее полезным для myisam и Mysql в целом. По умолчанию это всего лишь 16 МБ, что очень мало на машине с 8 ГБ. Снова я бы начал с хорошего прыжка и посмотрел, улучшится ли ты. Имейте в виду, что буферы myisam и innodb не общие, поэтому они должны быть меньше, чем у вас есть ОЗУ. Позже вы также можете посмотреть на буферы сортировки и чтения.

Я чувствую, что вам нужно попробовать несколько разных (хорошо задокументированных) вариантов и собрать некоторую статистику, чтобы вы могли проводить сравнения до и после, иначе вы могли бы ПОЧУВСТВОВАТЬ, что помогаете, но это может повредить.

  1. Самая простая статистика - прямо из phpmyadmin, войдите в phpmyadmin и выберите статус с помощью кнопок в верхней части правого фрейма.

  2. Еще один достойный инструмент - https://github.com/rackerhacker/MySQLTuner-perl/blob/master/mysqltuner.pl # (v1.2.0)

  3. наконец, чтобы включить журнал медленных запросов.

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

Я считаю, что здорово добавлять индексы ко всему, что ЧИТАЕТ часто и редко обновляется / вставляется / добавляется.

Я делаю таблицу optimisze для всего каждую ночь после ночных mysqldumps.

Ваши конкретные варианты innodb:

spended #  
[ 14:31. diane@ltk-prod-1 ~]% mysqladmin -u USER -pPASSWD variables | grep -i inno |sed -e 's/                                  //g'|less

Mine are:


| innodb_autoinc_lock_mode | 1::                     |
| innodb_buffer_pool_size  | 8388608::               |
| innodb_checksums         | ON::                    |
| innodb_commit_concurrency| 0::                     |
| innodb_concurrency_tickets              | 500::    |
| innodb_data_file_path    | ibdata1:10M:autoextend::|
| innodb_data_home_dir     |::                       |
| innodb_doublewrite       | ON::                    |
| innodb_fast_shutdown     | 1::                     |
| innodb_file_io_threads   | 4::                     |
| innodb_file_per_table    | ON::                    |
| innodb_flush_log_at_trx_commit          | 1::      |
| innodb_flush_method      |::                       |
| innodb_force_recovery    | 0::                     |
| innodb_lock_wait_timeout | 50::                    |
| innodb_locks_unsafe_for_binlog          | OFF::    |
| innodb_log_buffer_size   | 1048576::               |
| innodb_log_file_size     | 5242880::               |
| innodb_log_files_in_group| 2::                     |
| innodb_log_group_home_dir| ./::                    |
| innodb_max_dirty_pages_pct              | 90::     |
| innodb_max_purge_lag     | 0::                     |
| innodb_mirrored_log_groups              | 1::      |
| innodb_open_files        | 300::                   |
| innodb_rollback_on_timeout              | OFF::    |
| innodb_stats_on_metadata | ON::                    |
| innodb_support_xa        | ON::                    |
| innodb_sync_spin_loops   | 20::                    |
| innodb_table_locks       | ON::                    |
| innodb_thread_concurrency| 8::                     |
| innodb_thread_sleep_delay| 10000::                 |
| innodb_use_legacy_cardinality_algorithm | ON::     |

    enter code here

Я предлагаю увеличить количество буферов 2 раза за раз и попробовать выполнить тестовые запросы,

НО. также на некоторых машинах у меня заканчивается / dev / shm (ramdisk) (помогает 16gb ram)

а затем просто выполняйте mysqldumps 3 или 4 раза в день.

mysqltuner для меня говорит, что я опасно бегаю ЧЕРЕЗ физическую память, но у меня всегда есть половина гига бесплатно.