У меня есть большой экземпляр 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 не общие, поэтому они должны быть меньше, чем у вас есть ОЗУ. Позже вы также можете посмотреть на буферы сортировки и чтения.
Я чувствую, что вам нужно попробовать несколько разных (хорошо задокументированных) вариантов и собрать некоторую статистику, чтобы вы могли проводить сравнения до и после, иначе вы могли бы ПОЧУВСТВОВАТЬ, что помогаете, но это может повредить.
Самая простая статистика - прямо из phpmyadmin, войдите в phpmyadmin и выберите статус с помощью кнопок в верхней части правого фрейма.
Еще один достойный инструмент - https://github.com/rackerhacker/MySQLTuner-perl/blob/master/mysqltuner.pl # (v1.2.0)
наконец, чтобы включить журнал медленных запросов.
Я считаю, что критически важно получить хорошие показатели, прежде чем вносить изменения, иначе вы не будете уверены в том, что это помогает.
Я считаю, что здорово добавлять индексы ко всему, что ЧИТАЕТ часто и редко обновляется / вставляется / добавляется.
Я делаю таблицу 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 для меня говорит, что я опасно бегаю ЧЕРЕЗ физическую память, но у меня всегда есть половина гига бесплатно.