processed_event_parameters долго выполняются запросы

Технические вопросы по UTM 5.0
Ответить
spudd
Сообщения: 49
Зарегистрирован: Пт апр 28, 2006 10:54

processed_event_parameters долго выполняются запросы

Сообщение spudd »

Подскажите, может у кого возникала такая проблема, очень долго выполняются запросы:
SELECT processed_event_parameters.string_value AS "string_value" FROM processed_event_parameters WHERE (processed_event_parameters.processed_event_id = 22341 AND processed_event_parameters.name = 131950) AND processed_event_parameters.deleted = 0;

Выполнение запросов происходит секунд по 60-70. Запросов сыпется достаточно много. В mysql размер таблицы 403 тысячи записпей. В следствии этого очень сильно грузится база данных и не работает интерфейс платежей, да и сами платежи приходят с задержкой.

Можно ли каким то образом почистить данную таблицу?
Посмотрел кол-во записей в таблице с 15 января по 1 марта = 149000. а с 1 марта по 23 марта = 259744, причем 200 тысяч записей за последние 7 дней. Модуль только один - ОСМП
Тоже не понятно как то....

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

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

посмотреть, какие там висят индексы на этой таблице. Чтобы индекс использовался максимально эффективно, то он должен иметь перечисленными те поля, которые участвуют в WHERE-фильтре. Причем порядок должен совпадать.
Ну можно еще посмотреть show create table для этой таблички и explain extended select ...

spudd
Сообщения: 49
Зарегистрирован: Пт апр 28, 2006 10:54

Сообщение spudd »

про оптимизацию понятно. Очень интересно на самом деле послушать тех кто тоже столкнулся с этой проблемой. алгоритм работы то один у платежной системы, думаю что должны у кого то возникнуть проблемы поххожие.

Han_s
Сообщения: 21
Зарегистрирован: Чт июн 28, 2007 09:55

Сообщение Han_s »

я столкнулся... просто очищаю ее периодически не всю конечно

spudd
Сообщения: 49
Зарегистрирован: Пт апр 28, 2006 10:54

Сообщение spudd »

Han_s писал(а):я столкнулся... просто очищаю ее периодически не всю конечно
Ну я пока также поступил. но этож блин дур дом. а ведь у некоторых платежей то думаю поболее моего должно быть.....

Han_s
Сообщения: 21
Зарегистрирован: Чт июн 28, 2007 09:55

Сообщение Han_s »

угу согласен... но в хотлайне ничего вразумительного не ответили а у меня дошло до состояния что чуть ли не все падало через каждые 15 минут... в итоге чищу а что делать...

spudd
Сообщения: 49
Зарегистрирован: Пт апр 28, 2006 10:54

Сообщение spudd »

Han_s писал(а):угу согласен... но в хотлайне ничего вразумительного не ответили а у меня дошло до состояния что чуть ли не все падало через каждые 15 минут... в итоге чищу а что делать...
а какая периодичность чистки и как чистиш?

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

Re: processed_event_parameters долго выполняются запросы

Сообщение Magnum72 »

spudd писал(а):Подскажите, может у кого возникала такая проблема, очень долго выполняются запросы:
SELECT processed_event_parameters.string_value AS "string_value" FROM processed_event_parameters WHERE (processed_event_parameters.processed_event_id = 22341 AND processed_event_parameters.name = 131950) AND processed_event_parameters.deleted = 0;

Выполнение запросов происходит секунд по 60-70. Запросов сыпется достаточно много. В mysql размер таблицы 403 тысячи записпей. В следствии этого очень сильно грузится база данных и не работает интерфейс платежей, да и сами платежи приходят с задержкой.

Можно ли каким то образом почистить данную таблицу?
Посмотрел кол-во записей в таблице с 15 января по 1 марта = 149000. а с 1 марта по 23 марта = 259744, причем 200 тысяч записей за последние 7 дней. Модуль только один - ОСМП
Тоже не понятно как то....
попробуй индекс повесить на processed_event_id, и кинь структуру таблицы.

spudd
Сообщения: 49
Зарегистрирован: Пт апр 28, 2006 10:54

Re: processed_event_parameters долго выполняются запросы

Сообщение spudd »

Magnum72 писал(а): попробуй индекс повесить на processed_event_id, и кинь структуру таблицы.
Спасибо за совет, попробую и отпишусь.

spudd
Сообщения: 49
Зарегистрирован: Пт апр 28, 2006 10:54

Сообщение spudd »

После чистки базы запросы начали выполнятся порядка 3-5 секунд. После установки индекса на processed_event_id запрос выполняется 0.01 секунды в среднем.

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

Сообщение Magnum72 »

spudd писал(а):После чистки базы запросы начали выполнятся порядка 3-5 секунд. После установки индекса на processed_event_id запрос выполняется 0.01 секунды в среднем.
А если сделать двойной индекс
processed_event_id
name

spudd
Сообщения: 49
Зарегистрирован: Пт апр 28, 2006 10:54

Сообщение spudd »

Magnum72 писал(а):
spudd писал(а):После чистки базы запросы начали выполнятся порядка 3-5 секунд. После установки индекса на processed_event_id запрос выполняется 0.01 секунды в среднем.
А если сделать двойной индекс
processed_event_id
name
думаю тут надо подождать пока таблица подростет, чтоб наглядно было.

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

Сообщение Magnum72 »

spudd писал(а):
Magnum72 писал(а):
spudd писал(а):После чистки базы запросы начали выполнятся порядка 3-5 секунд. После установки индекса на processed_event_id запрос выполняется 0.01 секунды в среднем.
А если сделать двойной индекс
processed_event_id
name
думаю тут надо подождать пока таблица подростет, чтоб наглядно было.
Эксплаин запрса можешь показать ?

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

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

Делать надо именно двойной индекс, причем поля в индекс совать лучше в том порядке, в каком они идут в where, тогда mysql будет этим индексом пользоваться.
Если индекс есть, но поля указаны в индексе не в том порядке, в каком они идут в Where ... and ... - использовать оно этот индекс не будет. Если есть индекс отдельно на первое условие, то будет использоваться он.

spudd
Сообщения: 49
Зарегистрирован: Пт апр 28, 2006 10:54

Сообщение spudd »

Magnum72 писал(а): Эксплаин запрса можешь показать ?

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

mysql> explain SELECT processed_event_parameters.string_value AS "string_value" FROM processed_event_parameters WHERE (processed_event_parameters.processed_event_id = 22341 AND processed_event_parameters.name = 131950) AND processed_event_parameters.deleted = 0;  
+----+-------------+----------------------------+------+--------------------+--------------------+---------+-------+------+-------------+
| id | select_type | table                      | type | possible_keys      | key                | key_len | ref   | rows | Extra       |
+----+-------------+----------------------------+------+--------------------+--------------------+---------+-------+------+-------------+
|  1 | SIMPLE      | processed_event_parameters | ref  | processed_event_id | processed_event_id | 8       | const |   11 | Using where | 
+----+-------------+----------------------------+------+--------------------+--------------------+---------+-------+------+-------------+
1 row in set (0.05 sec)
а без индекса была проверка всех строк в таблице!
А тут получается как раз правильно. ведь на внесение платежа создается 11 записей в таблице, а на проверку платежа создается 10 записей.

а вот так получается если создать двойной индекс:

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

mysql> explain SELECT processed_event_parameters.string_value AS "string_value" FROM processed_event_parameters WHERE (processed_event_parameters.processed_event_id = 22341 AND processed_event_parameters.name = 131950) AND processed_event_parameters.deleted = 0;
+----+-------------+----------------------------+------+--------------------+--------------------+---------+-------------+------+-------------+
| id | select_type | table                      | type | possible_keys      | key                | key_len | ref         | rows | Extra       |
+----+-------------+----------------------------+------+--------------------+--------------------+---------+-------------+------+-------------+
|  1 | SIMPLE      | processed_event_parameters | ref  | processed_event_id | processed_event_id | 12      | const,const |    1 | Using where | 
+----+-------------+----------------------------+------+--------------------+--------------------+---------+-------------+------+-------------+
1 row in set (0.01 sec)
Так что думаю верное решение это действительно двойной индекс для этих запросов.

Ответить