Народ, подскажите.
Есть сервер (2 CPUs 1300MHz, 1GB memory) Apache 1.3.33 + mod_perl + php + MySQL.
Помимо всяческих ВЕБ-запросов сервер получает почти сплошным потоком (через ftp) записи, которые быстренько обрабатываются и записываются в БД. Загрузка этого двухпроцессорного сервера от 70 до 500% (в среднем 150%) и большая часть приходится на MySQL.
Как оптимизировать MySQL чтоб он работал как можно быстрее и не "ел" столько CPU?
>Народ, подскажите.Не мешло бы еще ОС указать и версию MySQL!
Для FreeBSD попробуй пересобрать MySQL с linuxthreads. Потому что даже на нативной libptreads из 5.3 MySQL показывает удручающие результаты.
>Народ, подскажите.
>Есть сервер (2 CPUs 1300MHz, 1GB memory) Apache 1.3.33 + mod_perl +
>php + MySQL.
>Помимо всяческих ВЕБ-запросов сервер получает почти сплошным потоком (через ftp) записи, которые
>быстренько обрабатываются и записываются в БД. Загрузка этого двухпроцессорного сервера от
>70 до 500% (в среднем 150%) и большая часть приходится на
>MySQL.
>Как оптимизировать MySQL чтоб он работал как можно быстрее и не "ел"
>столько CPU?ОС действительно следовало бы указать. От нее многое зависит. На phpclub лежит 10ый номер журнала phpinside. Дык вот, там проводился тест на работу ОС с MySQL. На сколько я помню,лучшим оказался Linux 2.4 или 2.6
Да, это я действительно дал маху не указав ОС.
OS: RedHat linux enterprise (v9) Kernel 2.4.21-4
MySQL 4.1.9
Сборка MySQL-я следующая:
CC=gcc
CXX=gcc
CFLAGS="-O3"
CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"./configure \
--prefix=/usr/local/mysql \
--enable-dependency-tracking \
--with-archive-storage-engine \
--with-csv-storage-engine \
--with-extra-charsets=complex \
--enable-thread-safe-client \
--enable-local-infile \
--enable-assembler \
--disable-shared \
--with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static \
--with-embedded-server \
--with-innodb
Привет,Можно попробовать еще
--without-debug
--without-benchmarkесли онни поддерживаются в это ветке. Очень полезно посмотреть статистику самого сервера - на консоли набрать \s и внимательно прочитать последнюю строчку - в особенности, Slow queries: и Queries per second avg.
WWell,
>Народ, подскажите.
>Есть сервер (2 CPUs 1300MHz, 1GB memory) Apache 1.3.33 + mod_perl +
>php + MySQL.
>Помимо всяческих ВЕБ-запросов сервер получает почти сплошным потоком (через ftp) записи, которые
>быстренько обрабатываются и записываются в БД. Загрузка этого двухпроцессорного сервера от
>70 до 500% (в среднем 150%) и большая часть приходится на
>MySQL.
>Как оптимизировать MySQL чтоб он работал как можно быстрее и не "ел"
>столько CPU?
в догонку - немешало бы еще посмотреть вывод explain..
и еще - Вы знаете какие именно запросы так нагружают машину ?
если возможно, то стоит привести запросы и формат таблиц к которым они обращаются..
вообще-то это первое, что надо делать - сначала оптимизируются запросы,
если не помогло - сервер(ПО) и как последний вариант - железо.
и еще в догонку - читать больше про диски (HDD) и файловые системы ;-)
--
если в системе IDE, и нет возможности перезда на SCSI то отсадить базу на отличный от / и htdocs контроллер (канал)..
раздел с базой желательно держать на XFS (она оптимизированна для активной работы с большими файлами)..+отключить сжатие данных при передаче в настройках mysql
и можно подетальней каким образом "сервер получает почти сплошным потоком (через ftp) записи" - тут тоже может собака порыться
Начну с железа. Про процессоры и память сказал выше. Диски SCSI RAID5. 4 диска. Filesystem: ext3 :(. Не я этот сервер собирал. Переделать возможности нет-он в другой стране и останавливать его надолго нельзя.
Таблица статическая, без varchar. В основном bigint,mediumint и smallint и всего два char(15). Всего 22 поля. 7 индексов. Количество записей только на INSERT и INSERT DELAYED примерно 50-100 в секунду. Но это не равномерно, а скачками. Один поток идет все время - 20-50 записей в секунду, а второй после получения по ftp и небольшой обработки.
Помимо этого раз в минуту запускаются процессы для сбора статистики и создания кэш-таблиц(для более быстрого выполнения отчетов). Это,в основном, SELECT. Отчеты более суровые - с выборкой по нескольким таблицам. Но это пока отдельная тема. Пока даже простые запросы выполняются медленно.
SELECT DISTINCT Company FROM table WHERE Incoming_line;
выполняется 16 секунд (размер БД примерно 6 млн. записей)
Нашел несколькр причин
1. RedHat ES не очень хочет работать с пакетами не своей сборки или какая-то другая заморочка этого дистрибутива. Наверно надо было ставить не серверную версию, но от Dell - это их сервер. На Slackware все бежит на ура, но конфигурация чуть-чуть лучше. Процессоры немного сильнее.2. Обработка таблиц MyISAM требует больше ресурсов процессора (на mySQL-евском сайте где-то вычитал), а так как запись и чтение БД постоянны, то и загрузка большая. Нужны более мощные процессоры.
Если есть еще добавления - буду рад услышать
>Нашел несколькр причин
>1. RedHat ES не очень хочет работать с пакетами не своей сборки
>или какая-то другая заморочка этого дистрибутива. Наверно надо было ставить не
>серверную версию, но от Dell - это их сервер. На Slackware
>все бежит на ура, но конфигурация чуть-чуть лучше. Процессоры немного сильнее.
>
>
>2. Обработка таблиц MyISAM требует больше ресурсов процессора (на mySQL-евском сайте где-то
>вычитал), а так как запись и чтение БД постоянны, то и
>загрузка большая. Нужны более мощные процессоры.
>
>Если есть еще добавления - буду рад услышать
добавлений немеряно - книга Жереми Заводны (это специалист yahoo по mysql, а его книга считается лучшей, основной, непревзойденной и тд и тп :):O'Reilly High Performance MySQL - Jeremy Zawodni
можно найти в осле, если нужно, могу отдать этот бестселлер by http,
ну или застартую осла и дам ссылку ed2kНекоторые статьи и рекомендации можно найти в его blog'е, но лучше конечно
книга.
Огромное спасибо lavr-у. Книга - высший пилотаж. Рекомендую всем.