процесс mysql занимает весь cpu

Технические вопросы по UTM 5.0
Ответить
ponemetski
Сообщения: 38
Зарегистрирован: Чт ноя 13, 2008 15:55

процесс mysql занимает весь cpu

Сообщение ponemetski »

Добрый день

Возникла проблема процесс мускула постоянно занимает почти все время процессора.

Примерно 30 одновременных сессий, примерно гигабайт трафика в сутки.

Код: Выделить всё

last pid: 13244;  load averages:  0.83,  0.77,  0.74                                      up 0+00:47:13  18:26:58
85 processes:  2 running, 83 sleeping
CPU states: 98.9% user,  0.0% nice,  0.4% system,  0.7% interrupt,  0.0% idle
Mem: 59M Active, 25M Inact, 139M Wired, 72K Cache, 108M Buf, 1776M Free
Swap: 4096M Total, 4096M Free

  PID USERNAME         THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
 1833 mysql             18   4    0 62916K 29452K sbwait  27:40 93.75% mysqld
 6577 root              16   4  -10 24960K 18888K sbwait   0:06  0.00% utm5_core
 6591 root               2  96    0  6196K  3524K select   0:02  0.00% utm5_rfw
 6609 root               7  96    0  8884K  5556K select   0:01  0.00% utm5_radius
параметры в настройках
traffic_agregation_interval = 900
aggregation_todisc_barrier = 5

остальные настройки нетапа и мускула стандартные

есть подозрение что диск отформатирован без секторов по 65 килобайт, но оп моему нагрузка не такая большая

куда копать?
кто-нибудь сталкивался с подобным?
если нужны еще данные о настройках, напишу

зы. freebsd 7.0

заранее спасибо

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

mysqladmin processlist | grep Query
ls -lah /var/db/mysql/UTM5/discount*

ponemetski
Сообщения: 38
Зарегистрирован: Чт ноя 13, 2008 15:55

Сообщение ponemetski »

Код: Выделить всё

# mysqladmin processlist | grep Query
| 5   | root | localhost | UTM5 | Query   | 56   | Copying to tmp table | SELECT distinct ig.ip as ip,us.value, a.id as accountid,a.int_status,ig.mask,sl.id FROM accounts a,i |
| 172 | root | localhost |      | Query   | 0    |                      | show processlist                                                                                     |


# ls -lah /var/db/mysql/UTM5/discount*
-rw-rw----  1 mysql  mysql   8.8K Nov 15 18:09 /var/db/mysql/UTM5/discount_periods.frm
-rw-rw----  1 mysql  mysql   8.9K Nov 15 18:09 /var/db/mysql/UTM5/discount_transactions_all.frm
-rw-rw----  1 mysql  mysql   9.0K Nov 15 18:09 /var/db/mysql/UTM5/discount_transactions_iptraffic_all.frm

ponemetski
Сообщения: 38
Зарегистрирован: Чт ноя 13, 2008 15:55

Сообщение ponemetski »

вот полный запрос который постоянно выполняет

Код: Выделить всё

SELECT distinct 
	ig.ip as ip,
	us.value, 
	a.id as accountid,
	a.int_status,
	ig.mask,
	sl.id 
FROM 
	accounts a,
	iptraffic_service_links il,
	service_links sl,
	services_data sd,
	ip_groups ig,
	utm5_settings us 
WHERE 
	a.id=sl.account_id AND 
	a.is_deleted=0 AND 
	sl.service_id=sd.id AND 
	sd.tariff_id = us.variable AND 
	sl.id=il.id AND 
	ig.ip_group_id=il.ip_group_id  AND 
	sl.is_deleted=0 AND 
	sd.is_deleted=0 AND 
	ig.is_deleted=0 AND  
	sd.service_type=3 AND 
	sd.tariff_id!=0 
GROUP BY 
	ig.ip,
	us.value,
	a.id,
	a.int_status,
	ig.mask,
	sl.id 
ORDER BY a.id;

выполняется около 2 ух минут

может кто-то сталкивался. что за запрос? и что с ним сделать?

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

| 5 | root | localhost | UTM5 | Query | 56 | Copying to tmp table | SELECT distinct ig.ip as ip,us.value, a.id as accountid,a.int_status,ig.mask,sl.id FROM accounts a,i |
Вот эта строчка настораживает.
Попробуй подкрутить максимальные размеры временныйх таблиц, чтоб эта выборка туда вмещалась. Ну и explain погоняй, мож индексы надо поправить.
Может analyze/optimize помочь, но табличка, я так понял, в Innodb

bear
Сообщения: 498
Зарегистрирован: Чт ноя 15, 2007 11:53

Сообщение bear »

рекомендую прогнать tuning-primer.sh - поможет в базовом тюнинге мускула
кочать тут - http://www.day32.com/MySQL/

ponemetski
Сообщения: 38
Зарегистрирован: Чт ноя 13, 2008 15:55

Сообщение ponemetski »

было

storage_engine = MyISAM
tmp_table_size = 33554432

поставил
tmp_table_size = 335544320

по моему нетапу нужно innodb? как проверить точно какой сейчас режим?

ponemetski
Сообщения: 38
Зарегистрирован: Чт ноя 13, 2008 15:55

Сообщение ponemetski »

кстати
выполнил
mysql> set tmp_table_size = 335544320

mysql не перезагружал

нужно ли перезагружать?

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

ponemetski писал(а):вот полный запрос который постоянно выполняет

Код: Выделить всё

SELECT distinct 
	ig.ip as ip,
	us.value, 
	a.id as accountid,
	a.int_status,
	ig.mask,
	sl.id 
FROM 
	accounts a,
	iptraffic_service_links il,
	service_links sl,
	services_data sd,
	ip_groups ig,
	utm5_settings us 
WHERE 
	a.id=sl.account_id AND 
	a.is_deleted=0 AND 
	sl.service_id=sd.id AND 
	sd.tariff_id = us.variable AND 
	sl.id=il.id AND 
	ig.ip_group_id=il.ip_group_id  AND 
	sl.is_deleted=0 AND 
	sd.is_deleted=0 AND 
	ig.is_deleted=0 AND  
	sd.service_type=3 AND 
	sd.tariff_id!=0 
GROUP BY 
	ig.ip,
	us.value,
	a.id,
	a.int_status,
	ig.mask,
	sl.id 
ORDER BY a.id;

выполняется около 2 ух минут

может кто-то сталкивался. что за запрос? и что с ним сделать?
Динашейп есть ? Если да то это он :) Лечится установкой пары индексов, каких не помню так как не юзаю, в форуме ссылки были.
Дай эксплайн запроса

ponemetski
Сообщения: 38
Зарегистрирован: Чт ноя 13, 2008 15:55

Сообщение ponemetski »

динашейп есть

Код: Выделить всё

mysql> EXPLAIN SELECT distinct    ig.ip as ip,    us.value,    a.id as accountid,    a.int_status,    ig.mask,    sl.id FROM    accounts a,    iptraffic_service_links il,    service_links sl,    services_data sd,    ip_groups ig,    utm5_settings us WHERE    a.id=sl.account_id AND    a.is_deleted=0 AND    sl.service_id=sd.id AND    sd.tariff_id = us.variable AND    sl.id=il.id AND    ig.ip_group_id=il.ip_group_id  AND    sl.is_deleted=0 AND    sd.is_deleted=0 AND    ig.is_deleted=0 AND     sd.service_type=3 AND    sd.tariff_id!=0 GROUP BY    ig.ip,    us.value,    a.id,    a.int_status,    ig.mask,    sl.id ORDER BY a.id;
+----+-------------+-------+--------+---------------+---------+---------+--------------------+------+---------------------------------+
| id | select_type | table | type   | possible_keys | key     | key_len | ref                | rows | Extra                           |
+----+-------------+-------+--------+---------------+---------+---------+--------------------+------+---------------------------------+
|  1 | SIMPLE      | us    | ALL    | NULL          | NULL    | NULL    | NULL               |   28 | Using temporary; Using filesort |
|  1 | SIMPLE      | ig    | ALL    | NULL          | NULL    | NULL    | NULL               | 1958 | Using where                     |
|  1 | SIMPLE      | sl    | ALL    | PRIMARY       | NULL    | NULL    | NULL               | 1156 | Using where                     |
|  1 | SIMPLE      | a     | eq_ref | PRIMARY       | PRIMARY | 4       | UTM5.sl.account_id |    1 | Using where                     |
|  1 | SIMPLE      | sd    | eq_ref | PRIMARY       | PRIMARY | 4       | UTM5.sl.service_id |    1 | Using where                     |
|  1 | SIMPLE      | il    | eq_ref | PRIMARY       | PRIMARY | 4       | UTM5.sl.id         |    1 | Using where                     |
+----+-------------+-------+--------+---------------+---------+---------+--------------------+------+---------------------------------+
6 rows in set (0.00 sec)

ponemetski
Сообщения: 38
Зарегистрирован: Чт ноя 13, 2008 15:55

Сообщение ponemetski »

заработало

Код: Выделить всё

create index ig_idx on ip_groups(ip_group_id);
спасибо всем

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

У меня постоянно вот это. Время дорастает до 300-400
Может и мне кто чего посоветует?

| 7766 | root | localhost | UTM5_last3 | Query | 6 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |
| 7767 | root | localhost | UTM5_last3 | Query | 11 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |
| 7768 | root | localhost | UTM5_last3 | Query | 12 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |
| 7769 | root | localhost | UTM5_last3 | Query | 8 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |
| 7770 | root | localhost | UTM5_last3 | Query | 14 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |

в это время: top:

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
22811 root 18 132 0 641M 574M RUN 0 578:24 122.80% mysqld

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

kirush писал(а):У меня постоянно вот это. Время дорастает до 300-400
Может и мне кто чего посоветует?

| 7766 | root | localhost | UTM5_last3 | Query | 6 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |
| 7767 | root | localhost | UTM5_last3 | Query | 11 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |
| 7768 | root | localhost | UTM5_last3 | Query | 12 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |
| 7769 | root | localhost | UTM5_last3 | Query | 8 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |
| 7770 | root | localhost | UTM5_last3 | Query | 14 | Sending data | SELECT id,sender_id,subject,message,mime,state,send_date,recv_date FROM messages WHERE (receiver_id= |

в это время: top:

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
22811 root 18 132 0 641M 574M RUN 0 578:24 122.80% mysqld
почитсти мессагес, я сомневаюсь что они тебе нужны более чем месячной давности :)
Ну и индекс поставь попробуй на receiver_id

Ответить