|
|
|
| Добрый день.
На сайт заходят 12 тыс. хостов, просматривают 200 тыс. страниц.
В онлайн висят более 200 человек
Сайт всегда в "жопе" полной в час пик из за мускуля.
Подскажите что исправить в конфиге -- чтоб сайт летал.
FreeBSD
Pention 3.2 Xeon
4Гб апперативки
Заранее спасибо!
[mysqld]
user=leha
init-connect="SET NAMES cp1251"
datadir=/home/mysql
#log=/var/tmp/mysql.log
#log-slow-queries=/home/www/logs/slow-queries.log
#long_query_time = 3
sql-mode=NO_UNSIGNED_SUBTRACTION
set-variable=query_cache_size=524288
set-variable=bulk_insert_buffer_size=524288
set-variable=key_buffer=16M
set-variable=max_allowed_packet=1M
set-variable=table_cache=64
set-variable=sort_buffer_size=512K
set-variable=net_buffer_length=8K
set-variable=myisam_sort_buffer_size=8M
skip-innodb
port=3306
socket=/tmp/mysql.sock
skip-external-locking
default-character-set=cp1251
set-variable=interactive_timeout=120
set-variable=wait_timeout=120
set-variable=delayed_insert_limit=0
set-variable=delayed_insert_timeout=0
set-variable=delayed_queue_size=5
set-variable=max_delayed_threads=0
max_connections=50
#log-bin
#server-id = 1
# Point the following paths to different dedicated disks
#tmpdir = /tmp/
#log-update = /path-to-dedicated-directory/hostname
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/var/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/var/
#innodb_log_arch_dir = /usr/local/var/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
# Set .._log_file_size to 25 % of buffer pool size
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=50
[mysqldump]
quick
set-variable=max_allowed_packet=16M
[mysql]
default-character-set=cp1251
no-auto-rehash
[isamchk]
set-variable=key_buffer=20M
set-variable=sort_buffer_size=20M
set-variable=read_buffer=2M
set-variable=write_buffer=2M
[myisamchk]
set-variable=key_buffer=20M
set-variable=sort_buffer_size=20M
set-variable=read_buffer=2M
set-variable=write_buffer=2M
[mysqlhotcopy]
interactive-timeout
[mysql.server]
user=tonnel
log-error=/dev/null
|
| |
|
|
|
|
|
|
|
для: !!!Леха
(22.09.2007 в 14:44)
| | В секции [mysqld]
>set-variable=query_cache_size=524288
set-variable=query_cache_size=128M
>set-variable=key_buffer=16M
set-variable=key_buffer=1024M
С таким количеством памяти можете смело и больше ставить, но думаю 1Гб вместо 16Мб уже сильно проще будет. Эффект проявится не сразу, но когда ключи переползут с диска в оперативную память - проблемы должны исчезнуть.
>set-variable=max_allowed_packet=1M
Это максимальный размер SQL-запроса - сделайте 128M
>set-variable=sort_buffer_size=512K
set-variable=sort_buffer_size=8M
>max_connections=50
max_connections=200
После этого перегрузите MySQL-сервер
PS С таким количеством памяти и такой нагрузкой - у вас всё летать должно. | |
|
|
|
|
|
|
|
для: cheops
(22.09.2007 в 15:20)
| | Спасибо большое.
Исправлю конфиг -- отпишусь летает ли;) | |
|
|
|
|
|
|
|
для: !!!Леха
(22.09.2007 в 15:40)
| | Пока результата -- ноль. Говорят что дос аттака идет. но зато часто выдает не удалось подключиться к сервер мускуль.
mysql-server-5.0.33
подлючается через @mysql_pconnect
и нигде не закрывается
В чем может быть проблема? | |
|
|
|
|
|
|
|
для: !!!Леха
(22.09.2007 в 19:10)
| | 1) mysql_pconnect() лучше не использовать - используйте mysql_connect() - чем быстрее отработает процесс, тем лучше.
2) Если ДОС-атака нужно смотреть логи - вычислять IP-адреса умельцев
3) Таблицы индексированы? | |
|
|
|
|
|
|
|
для: cheops
(23.09.2007 в 10:12)
| | Спасибо Вам большое. Сайт летает ;)
Но вот конкуренты досс-атаку травят, тогда тяжело грузится канал, а не сам скрипт.
А где айпи аттакующих собираются? В access_log или в других логах?
И ещё один вопросик, чем отличается pconnect ot connet?
Я читал что pconnect лучше потому что он не закрывает базы, а при выполнение скрипта -- он автоматом все что нужно закрывает.
Заранее ещё раз спасибо. | |
|
|
|
|
|
|
|
для: !!!Леха
(24.09.2007 в 13:28)
| | >А где айпи аттакующих собираются? В access_log или в других логах?
Да, следует отпарсить access_log и посмотреть IP-адреса откуда наиболее часто происходят обращения (лучше даже по интервалам времени разбить) - только следует проследить, чтобы не задать роботов поисковых систем.
>Я читал что pconnect лучше потому что он не закрывает базы, а при выполнение скрипта -- он
>автоматом все что нужно закрывает.
В принципе это справедливо, если вы создаёте клиента базы данных, использующего протокол СУБД MySQL. Однако, при обращении из Apache/PHP связь в любом случае рвётся со стороны потока Apache - а будет ли в следующий момент этот поток обращаться к MySQL или займётся выдачей клиенту картинки или статического файла не факт - скорее всего соединение будет просто висеть, а PHP откроет новое (так как обращаться к открытому соединению нужно с того же процесса, что его открыл) - если все 50 (теперь) процессов заняты (да хоть бы и сном) - остальные клиенты будут ждать. В результате накапливается море висящих процессов, которые просто спят, и занимают память - а когда серверу вдруг понадобится море памяти, например, чтобы выстоять в атаке - она оказывается вся занята ожидающими непонятно чего MySQL-процессами. Лучше использовать обычные соединения - процесс отработал за доли секунды и отсоединился - нет процесса - не занята память и ресурсы. | |
|
|
|
|
|
|
|
для: cheops
(24.09.2007 в 14:48)
| | Уважаемый, cheops.
Спасибо большое за консультацию.
А что значит распарсить?
Вот что ссыпиться в логах.
Это ужас, айпи постоянно меняются с разных стран и городов ломяться.
Это дос или нет? может знаете как с этим бороться, кого не спрашивал первый раз такое видят.
212.86.246.40 - - [02/Oct/2007:15:34:10 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:14 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:14 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:16 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:26 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:34:26 +0400] "-" 400 0 "-" "-"
89.232.124.31 - - [02/Oct/2007:15:37:48 +0400] "-" 400 0 "-" "-"
89.232.124.31 - - [02/Oct/2007:15:37:48 +0400] "-" 400 0 "-" "-"
89.232.124.31 - - [02/Oct/2007:15:37:49 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:39:53 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:39:53 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:39:53 +0400] "-" 400 0 "-" "-"
212.86.246.40 - - [02/Oct/2007:15:39:57 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:47 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:47 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:47 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:47 +0400] "-" 400 0 "-" "-"
82.204.248.18 - - [02/Oct/2007:15:26:48 +0400] "-" 400 0 "-" "-"
|
| |
|
|
|
|
|
|
|
для: !!!Леха
(02.10.2007 в 15:51)
| | Хм... 400 ошибка - это означает, что сервер просто дёргают по 80 порту ничего практически не передавая и соответственно не слушая ответ. У вас FireWall какой-нибудь используется? | |
|
|
|