The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"MySQL + Apache"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Базы данных)
Изначальное сообщение [ Отслеживать ]

"MySQL + Apache"  +/
Сообщение от Чефир (ok) on 01-Апр-11, 18:53 
Здравствуйте!
Сильно нужна помощь, проблема: 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       = 8

myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10

query_cache_limit    = 1M
query_cache_size        = 16M

log_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/*.conf

Include 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" agent

Include 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

Помогите пожалуйста...
(извените за корявое оформление).

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "MySQL + Apache"  +/
Сообщение от Zl0 (ok) on 01-Апр-11, 19:13 
Что тут посоветовать
1. Разносить это хозяйство по разным машинкам
2. Оптимизировать запросы к sql, кеширование как контента так и запросов.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "MySQL + Apache"  +/
Сообщение от Чефир (ok) on 01-Апр-11, 19:37 
> Что тут посоветовать
> 1. Разносить это хозяйство по разным машинкам
> 2. Оптимизировать запросы к sql, кеширование как контента так и запросов.

Можно по подробнее как это сделать?!

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "MySQL + Apache"  +/
Сообщение от DeadLoco (ok) on 02-Апр-11, 09:41 
> Можно по подробнее как это сделать?!

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)

Чтобы понять, в чем фокус, нужно немножко понимать, как работают СУБД.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "MySQL + Apache"  +/
Сообщение от Чефир (ok) on 02-Апр-11, 12:29 
>[оверквотинг удален]
> справиться. Он, мускль, умеет работать очень, очень быстро, но при условии,
> что к нему корректно обращаются. Например, не так давно я наблюдал
> примерно вот такой запрос:
>      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!

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "MySQL + Apache"  +/
Сообщение от DeadLoco (ok) on 02-Апр-11, 12:36 
> Вряд ли база кривая, я использую движок DLE!

Стопроцентную гарантию дает только похоронное бюро.
Если структура базы не менялась, тогда, скорей всего, она повредилась.
http://dev.mysql.com/doc/refman/5.0/en/myisam-repair.html


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "MySQL + Apache"  +/
Сообщение от SlaDER email(??) on 03-Апр-11, 15:11 
>[оверквотинг удален]
>> что к нему корректно обращаются. Например, не так давно я наблюдал
>> примерно вот такой запрос:
>>      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!

Могут быть кривые дополнительные модули, которые вы ставили.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "MySQL + Apache"  +/
Сообщение от Zl0 (ok) on 04-Апр-11, 12:53 
>[оверквотинг удален]
>>> примерно вот такой запрос:
>>>      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 так плохо работать не может, просто с ним видимо неправильно работают.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру