Тяжелый процессор или память использования mysql
у меня есть экземпляр Amazon s3, и проект, который мы имеем на сервере, делает много вставок и обновлений и несколько сложных вариантов
мы обнаруживаем, что MySQL довольно часто занимает много CPU.
Я пытаюсь установить, является ли более высокая память или более высокий процессор лучше вышеуказанной установки.
ниже выводится значение cat /proc/meminfo
MemTotal: 7347752 kB
MemFree: 94408 kB
Buffers: 71932 kB
Cached: 2202544 kB
SwapCached: 0 kB
Active: 6483248 kB
Inactive: 415888 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 168264 kB
Writeback: 0 kB
AnonPages: 4617848 kB
Mapped: 21212 kB
Slab: 129444 kB
SReclaimable: 86076 kB
SUnreclaim: 43368 kB
PageTables: 54104 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 3673876 kB
Committed_AS: 5384852 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 180 kB
VmallocChunk: 34359738187 kB
Текущие Настройки:
High-CPU Extra Large Instance
7 ГБ памяти 20 вычислительных единиц EC2 (8 виртуальные ядра с вычислением 2.5 EC2 Единицы каждый) 1690 ГБ экземпляра хранения 64-разрядная платформа ввода/вывода Производительность: высокое имя API: c1.xlarge
Возможные Варианты:
Двойник Высоко-Памяти Экстренный Большой Пример
34.2 ГБ памяти 13 EC2 Вычислительные единицы (4 виртуальных ядра с вычислением 3,25 EC2 Единиц каждый) 850 ГБ хранилище 64-разрядная производительность платформы ввода / вывода: высокая Имя API: m2.2xlarge
6 ответов
Я бы пошел на память 32GB и, возможно, больше жестких дисков в RAID. CPU не поможет так много - у вас есть мощность процессора. Вам также нужно правильно настроить mysql.
- оставьте 1-2 ГБ для кэша ОС и временных таблиц.
- увеличить tmp_table_size
- удалить swap
- оптимизируйте query_cache_size (не делайте его слишком большим - см. документацию mysql об этом)
- периодически запускать кэш флеш-запросов. если кэш запросов не очищает кэш, он оптимизирует (дефрагментирует). Это из mysql docs:
Дефрагментация кэша запросов к лучшему используйте его память. КЭШ ЗАПРОСОВ FLUSH не удаляет запросы из кэш, в отличие от таблиц FLUSH или RESET КЭШ ЗАПРОСОВ.
однако я заметил, что другое решение имеет половину дискового пространства: 850GB, что может быть уменьшено количество жестких дисков. Это вообще плохо идея. Самая большая проблема в базах данных-жесткие диски. Если вы используете RAID5-убедитесь, что вы не используете меньше жестких дисков. Если вы вообще не используете raid - я бы предложил raid 0.
использовать vmstat
и iostat
чтобы узнать, является ли CPU или I/O узким местом (если I/O - добавить больше ОЗУ и загрузить данные в память). Запустите из оболочки и проверьте результаты:
vmstat 5
iostat -dx 5
- если CPU является проблемой
vmstat
покажет высокие значения в иiostat
покажет низкое использование диска (util
) - если I / O является проблемой, то
vmstat
покажет низкие значения в иiostat
покажет высокую загрузку диска (util
); под высоким я подразумеваю >50%
Это зависит от приложения.
можно использовать memcached кэшировать запросы mysql. Это немного облегчит использование ЦП, однако с помощью этого метода вы захотите увеличить ОЗУ для хранения запросов.
с другой стороны, если это невозможно на основе типа приложения, я бы рекомендовал более высокий процессор.
существует не так много причин для MySQL использовать много CPU: это либо обработка хранимых подпрограмм (хранимых процедур или хранимых функций), либо сортировка, которая может съесть CPU.
Если вы используете много CPU из-за сохраненных процедур, вы делаете это неправильно, и ваша душа не может быть сохранена в любом случае.
Если вы используете много CPU из-за сортировки, некоторые вещи могут быть сделаны, в зависимости от характера ваших запросов: вы можете расширить индексы, чтобы включить Упорядочить по столбцам в конце, или вы можете удалить предложения ORDER BY и отсортировать в клиенте.
какой подход к выбору зависит от фактической причины использования ЦП-это запросы и сортировка? И по фактическим запросам. Так что, в любом случае, сначала вам понадобится лучший мониторинг.
Не имея информации о мониторинге, общий совет Всегда: покупайте больше памяти, а не больше процессора для базы данных.
не делает ли характер EC2 по требованию довольно простым арендовать возможную установку на день и выполнить некоторые нагрузочные испытания? Измерения говорят громче слов.
используйте "High-CPU Extra Large Instance".
в вашей текущей настройке MySQL не ограничен памятью:
MemTotal: 7347752 kB
MemFree: 94408 kB
Buffers: 71932 kB
Cached: **2202544 kB**
из 7 ГБ памяти 2 ГБ не используется и используется ОС в качестве кэша ввода-вывода.
в этом случае увеличение количества ЦП даст вам больше взрыва для доллара.