Здравствуйте!
Сильно нужна помощь, проблема: MYSQL грузит процессор до 96% из за этого апачь тоже не работает, и сайт перестает работать (сайт очень посещаемый).Может посоветуете оптимизацию...
Данные Didecated:
Сервер на базе Athlon64 2800+
CPU: 1x1.8 MHz
RAM: 2 Gb DDR-400
LAN: 100 Mbit/s
OC: Ubuntu ServerКонфиг MySQL:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-networking
skip-external-locking
federated=ON
bind-address = 127.0.0.1
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10query_cache_limit = 1M
query_cache_size = 16Mlog_error = /var/log/mysql/error.log
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name[mysqldump]
quick
quote-names
max_allowed_packet = 16M[mysql]
#no-auto-rehash # faster start of mysql but no tab completition[isamchk]
key_buffer = 16M!includedir /etc/mysql/conf.d/
Конфиг apache:
ServerRoot "/etc/apache2"
LockFile ${APACHE_LOCK_DIR}/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule><IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule><IfModule mpm_event_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}<Directory "/var/web/csds.ws/www">
Options Indexes FollowSymLinks Includes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy all
</Files>DefaultType text/plain
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
Include mods-enabled/*.load
Include mods-enabled/*.confInclude httpd.conf
Include ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agentInclude conf.d/
Пишу команду top по ssh вот что выдает:771 mysql 20 0 167m 41m 6004 S 96.3 2.1 11:29.17 mysqld
3837 www-data 20 0 68488 10m 4456 S 1.3 0.5 0:00.08 apache2
3795 www-data 20 0 68896 10m 4476 S 0.3 0.6 0:00.11 apache2
3798 www-data 20 0 68688 10m 4504 S 0.3 0.5 0:00.19 apache2
3800 www-data 20 0 68556 10m 4512 S 0.3 0.5 0:00.12 apache2
3803 www-data 20 0 69228 13m 7064 R 0.3 0.7 0:00.60 apache2
3805 www-data 20 0 69228 13m 7076 S 0.3 0.7 0:00.57 apache2
3818 www-data 20 0 68924 11m 4728 S 0.3 0.6 0:00.11 apache2
3828 www-data 20 0 68716 12m 6488 S 0.3 0.7 0:00.50 apache2Помогите пожалуйста...
(извените за корявое оформление).
Что тут посоветовать
1. Разносить это хозяйство по разным машинкам
2. Оптимизировать запросы к sql, кеширование как контента так и запросов.
> Что тут посоветовать
> 1. Разносить это хозяйство по разным машинкам
> 2. Оптимизировать запросы к sql, кеширование как контента так и запросов.Можно по подробнее как это сделать?!
> Можно по подробнее как это сделать?!100% или около того на мускль - это
а) отсутствие индексов
б) кривые запросы
в) а+бВ первом случае индексы могли просто слететь и надо всего лишь отремонтировать базы (см. документацию)
Также, индексы могут быть вообще не определены или могут быть пропущены критичные индексы. Тут уже нужно пинать разраба БД.
Во втором случае запросы составлены так, что мусклю просто не под силу справиться. Он, мускль, умеет работать очень, очень быстро, но при условии, что к нему корректно обращаются. Например, не так давно я наблюдал примерно вот такой запрос:
SELECT a, b, c FROM xyz WHERE u_id=1 ORDER BY date DESC LIMIT 1
Он совершенно корректен синтаксически, но вот только выполняется в тысячу раз дольше, чем вот такой:
SELECT a, b, c FROM xyz WHERE u_id=1 AND date=(SELECT MAX(date) FROM xyz WHERE u_id=1)Чтобы понять, в чем фокус, нужно немножко понимать, как работают СУБД.
>[оверквотинг удален]
> справиться. Он, мускль, умеет работать очень, очень быстро, но при условии,
> что к нему корректно обращаются. Например, не так давно я наблюдал
> примерно вот такой запрос:
> SELECT a, b, c FROM xyz WHERE
> u_id=1 ORDER BY date DESC LIMIT 1
> Он совершенно корректен синтаксически, но вот только выполняется в тысячу раз дольше,
> чем вот такой:
> SELECT a, b, c FROM xyz WHERE
> u_id=1 AND date=(SELECT MAX(date) FROM xyz WHERE u_id=1)
> Чтобы понять, в чем фокус, нужно немножко понимать, как работают СУБД.Вряд ли база кривая, я использую движок DLE!
> Вряд ли база кривая, я использую движок DLE!Стопроцентную гарантию дает только похоронное бюро.
Если структура базы не менялась, тогда, скорей всего, она повредилась.
http://dev.mysql.com/doc/refman/5.0/en/myisam-repair.html
>[оверквотинг удален]
>> что к нему корректно обращаются. Например, не так давно я наблюдал
>> примерно вот такой запрос:
>> SELECT a, b, c FROM xyz WHERE
>> u_id=1 ORDER BY date DESC LIMIT 1
>> Он совершенно корректен синтаксически, но вот только выполняется в тысячу раз дольше,
>> чем вот такой:
>> SELECT a, b, c FROM xyz WHERE
>> u_id=1 AND date=(SELECT MAX(date) FROM xyz WHERE u_id=1)
>> Чтобы понять, в чем фокус, нужно немножко понимать, как работают СУБД.
> Вряд ли база кривая, я использую движок DLE!Могут быть кривые дополнительные модули, которые вы ставили.
>[оверквотинг удален]
>>> примерно вот такой запрос:
>>> SELECT a, b, c FROM xyz WHERE
>>> u_id=1 ORDER BY date DESC LIMIT 1
>>> Он совершенно корректен синтаксически, но вот только выполняется в тысячу раз дольше,
>>> чем вот такой:
>>> SELECT a, b, c FROM xyz WHERE
>>> u_id=1 AND date=(SELECT MAX(date) FROM xyz WHERE u_id=1)
>>> Чтобы понять, в чем фокус, нужно немножко понимать, как работают СУБД.
>> Вряд ли база кривая, я использую движок DLE!
> Могут быть кривые дополнительные модули, которые вы ставили.Истину глаголите, еще включите slowlog посмотрите там запросы которые долго висят, поставте так же mytop, посмотрите каких запросов больше что так грузит базу, sql так плохо работать не может, просто с ним видимо неправильно работают.