Есть небольшой сервер 4хOpteron 2.0, 8 GB, 2x500 SATA, 1x SCSI.
стоят 6.3-RC1 FreeBSD amd64, php-5, mysql 5.0.1.Основной сайт имеет таблицу новостей (100.000 штук + добавляется около 300 в день). Размер таблицы - 150 мб.
Хочу попросить совета у профи по настройке mysql. Для ускорения работы mysql купил SCSI-винчестер и вынес на него базы и директорию для хранения временных таблиц.Раньше не настраивал "большие" веб-сервера, но в итоге пришел к таким параметрам:
# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
sort_buffer_size = 256M
record_buffer=8M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
thread_concurrency = 32
tmpdir = /mysqldata/tmp/
max_connections=2048
innodb_additional_mem_pool_size=2M
innodb_buffer_pool_size=47M
innodb_log_buffer_size=1M
innodb_log_file_size=24M
join_buffer_size=256M
key_buffer_size = 2048M
key_cache_block_size = 64M
thread_cache_size = 128
max_connect_errors = 1000
table_cache = 8192
max_allowed_packet = 320M
myisam_max_sort_file_size=100G
query_cache_size = 2048M
query_cache_limit = 64M
query_cache_type = 1
default_table_type = MYISAM
thread_stack = 512K
tmp_table_size = 2048M
myisam_sort_buffer_size = 1024M
myisam_max_sort_file_size = 10G
max_binlog_size = 1073741824
max_binlog_cache_size = 4294967295Какие параметры мной назначены неправильно?
Проблемы: 1. Неоптимизированное количество и качество SQL-запросов(плохое использование индекса) - потихонечку копаюсь и давлю на разработчиков.
2. Из-за первой проблемы при некоторой приличной нагрузке на стартовую страницу начинают расти загрузка CPU процессом mysql + в show processlist видно, что на диске начинают создаваться временные таблицы.В phpMyAdmin в статусе mysql красным выделены такие поля:
Handler_read_rnd - 886 k - The number of requests to read a row based on a fixed position. This is high if you are doing a lot of queries that require sorting of the result. You probably have a lot of queries that require MySQL to scan whole tables or you have joins that don't use keys properly.
Handler_read_rnd_next - 1,909 M - The number of requests to read the next row in the data file. This is high if you are doing a lot of table scans. Generally this suggests that your tables are not properly indexed or that your queries are not written to take advantage of the indexes you have.
Table_locks_waited - 6,195 - The number of times that a table lock could not be acquired immediately and a wait was needed. If this is high, and you have performance problems, you should first optimize your queries, and then either split your table or tables or use replication. (при этом - Table_locks_immediate 2,387 k )
Created_tmp_disk_tables - 32 k
В какую сторону стоит тыкать разработчиков?
Заранее спасибо за любые советы по оптимизации FreeBSD+apache.P.S. чтобы top показывал CPU states: 0.0% user, 0.0% nice, 0.2% system, 0.0% interrupt, 99.8% idle отдельными строками для каждого процессора, нужно где-то найти специальную версию top для многопроцессорных систем или добавить какой-то ключик?
>[оверквотинг удален]
>стоят 6.3-RC1 FreeBSD amd64, php-5, mysql 5.0.1.
>
>Основной сайт имеет таблицу новостей (100.000 штук + добавляется около 300 в
>день). Размер таблицы - 150 мб.
>Хочу попросить совета у профи по настройке mysql. Для ускорения работы mysql
>купил SCSI-винчестер и вынес на него базы и директорию для хранения
>временных таблиц.
>
>Раньше не настраивал "большие" веб-сервера, но в итоге пришел к таким параметрам:
>Вообще-то это совсем не большая база, и как можно написать сайт что-бы
тормозило на ТАКОМ железе ???
У меня система подсчета трафика и ON-Line статистики для более чем 1000 абонентов
работает на Core2Duo 6750 2.66 + 4Gb RAM + 4xSATA 160Gb SoftRaid (Linux)
Средний размер таблиц 600Мб/сутки, статистика лежит за год.
Ничего не тормозит, учет трафика, показ клиентам, обработка и.т.д
Плюс к этому на сервере висит около десятка баз другого плана для небольших проектов.
Правда база PostgreSQL 8, Там-же крутится и MySQL/>Заранее спасибо за любые советы по оптимизации FreeBSD+apache.
Однозначно надо начинать с великого пинка разработчиков,
Заставьте их прогнать запросы используемые на сайте через EXPLAIN
Подробнее http://dev.mysql.com/doc/refman/5.0/en/explain.html
>По поводу строк выделенных красным
1 - Handler_read_rnd - 886 k - The number of requests to read a row based on a fixed position ......
Ну создайте вы ему ключ по этому фиксированному полю, он-же на английском по белому просит, и еще в добавок объясняет что используется неэффективный линейный поиск
2 - То-же самое только предлагает создать индекс по полю
3 - В третьем случае предлагает выпрямить руки разработчикам потому что слишком большое время блокировки таблиц, и доступ не можетбыть получен немедленно, у вас есть необходимость делать LOCK целых таблиц ??? Это очень исключительный случай для сложных транзакций в системе, обычно можно обойтись лочкой строк.
Ну и предлагает оптимизировать структуру таблицы.Из всего этого можно сделать вывод что с оптимизацией запросов к базе у Вас очень плохо.
Это 90% роста производительности системы.
Еще раз скажу - вопросы скорее всего к SQL дизайнерам запросов.
>P.S. чтобы top показывал CPU states: 0.0% user, 0.0% nice,
> 0.2% system, 0.0% interrupt, 99.8% idle отдельными строками для
>каждого процессора, нужно где-то найти специальную версию top для многопроцессорных систем
>или добавить какой-то ключик?Нажать 1 в топе ;-)
---
С уважением
Валерий
>>P.S. чтобы top показывал CPU states: 0.0% user, 0.0% nice,
>> 0.2% system, 0.0% interrupt, 99.8% idle отдельными строками для
>>каждого процессора, нужно где-то найти специальную версию top для многопроцессорных систем
>>или добавить какой-то ключик?
>
>Нажать 1 в топе ;-)top -P
#top -v
top: version 3.5beta12