Модератор


Зарегистрирован: Oct 2001
Место проживания: Альметьевск, Татарстан
Публикаций: 480
Статус:  |
В теме http://www.netadmin.ws/forum/showth...=&threadid=3729 я сетовал на траблы с тормозами. Почти все удалось решить. Основная трабла была в корявом хаке для вывода самого популярного аттача и настроек MySQL.
Привожу свои мысли по итогам разбора полетов. (FreeBSD привязка)
Один из самых важных аспектов для производительности – написание заведомо правильных и адаптированных под конкретную задачу и среду приложений. Никакой тюнинг не спасет вас в случае бесконечного цикла в коде или таймаутов. Соcтояние MySQL можно отслеживать с помощью различных ключей утилиты mysqladmin (SHOW PROCESSLIST, SHOW STATUS) в сочетании с мониторингом всей системы утилитами top и ps. Для удобства можно использовать phpMyAdmin.
Условно можно выделить 3 группы проблем:
а) соединение клиента с сервером;
б) проблемы в самой базе;
в) проблемы дискового ввода/вывода.
Для начала, необходимо посмотреть параметры, заданные по умолчанию в MySQL при компиляции. Для этого можно воспользоваться готовым программным обеспечением (phpMyAdmin), либо помощью утилит имеющихся в системе. В командной строке наберем
#mysqladmin –p variables, или запишем сразу в файл
#mysqladmin –p variables > temp.txt (опция p указывает на необходимость ввода пароля)
Переменные, которые заслуживают пристального внимания:
max_connections – число одновременных соединений разрешенное сервером;
table_cache – буфер хранения данных наиболее частых обращений;
key_buffer – буфер хранения последних использовавшихся ключей;
back_log – количество одновременных подключений по TCP/IP стеку;
skip-locking – редко встречаемая трабла в BSD, но лучше выставить (решает проблемы с блокировкой файлов).
Устанавливая систему из портов, вы получите несколько готовых к применению конфигурационных файлов. Они рассчитаны для разного железа и количества пользователей. Необходимо выбрать наиболее близкий вашей системе вариант и отредактировать файл руками. Достаточно скопировать готовый файл под именем my.cnf в каталог /usr/var/db/mysql и перегрузить базу. Возможное содержание этого файла из расчета на 512 MB оперативной памяти выглядит так:
# Example def’s MySQL config file [my.cnf]
# The MySQL server
[mysqld]
set-variable = max_connections=300
set-variable = back_log=120
skip-locking
set-variable = key_buffer=256M
set-variable = max_allowed_packet=1M
set-variable = table_cache=256
set-variable = sort_buffer=1M
set-variable = record_buffer=1M
set-variable = myisam_sort_buffer_size=64M
set-variable = thread_cache=8
# При многопроцессорной системе параметр умножить на число CPU
set-variable = thread_concurrency=2
log-bin
server-id = 1
# Меняем стандартные пути
tmpdir = /tmp/
# Ускоряем архивацию
[mysqldump]
quick
set-variable = max_allowed_packet=16M
# Оптимизация и проверка таблиц
[isamchk]
set-variable = key_buffer=128M
set-variable = sort_buffer=128M
set-variable = read_buffer=2M
set-variable = write_buffer=2M
[mysqlhotcopy]
interactive-timeout
Для начала достаточно, двинемся дальше. О проблемах дискового ввода/вывода. Главное, помните, что swap и /var должны по возможности быть на разных физических HDD - базы mySQL находятся в каталоге /var/db/mysql, а mySQL регулярно свопится.
В FreeBSD вы обязательно найдете утилиту isamchk, которая предназначена для анализа размещения данных в таблицах, их оптимизации, нахождению и исправлению ошибок. Утилита имеет кучу параметров, но есть пара простых соображений по части её использования.
а) при каждом удвоении базы запускайте isamchk –a;
б) редко, но обязательно запускайте isamchk –d. Ð_тот параметр покажет вам число удаленных блоков, и если их количество велико, следует после запускать isamchk –r.
При большой нагрузке может оказаться, что пользователи получат отказ даже при заведомо выставленных правильно параметрах max_connections и back_log. Дело в том, что существует еще ограничение дескрипторов файлов и процессов в Unix. Ð_та проблема решается обязательной пересборкой ядра и выставлением опции maxusers = xxx, но это уже отдельная тема для разговора, а на сегодня все.
Bochkarev_D.S. добавил 11-01-2003 в 11:22:36:
P.S. я не пытаюсь сам выкладывать свои писанины на первую страницу, хотя пару раз уже просили. Если они того стоят, то polo или кто ему помогает сами должны сделать это.
Сообщить модератору об этом сообщении | Предупреждение | IP: определен
|