Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Производительность / оптимизация (Andy) 20/02/2007 - 08:11:49
      Re: Производительность / оптимизация (Pentarh Udi) 27/02/2007 - 17:58:06

> Original message text:
> From: Andy - 20/02/2007 - 08:11:49
> Subject:Производительность / оптимизация
> -----------------
> Добрый день, уважаемые!
>
> Испытываю затруднения с работой MySQL 4.1.22-log.
> Сервер 2 * Xeon 3,2 ГГц, 2 Гб памяти.
> Около 40 запросов в секунду, пики до 100.
>
> Происходит "зависание" запросов, с последующим исчерпанием max_connections (=100) и отказом в обслуживании.
>
> Переменные сервера по памяти:
> key_buffer = 256M
> sort_buffer_size = 1M
> read_buffer_size = 1M
>
> В slow-query.log очень много запросов (форума) следующего вида:
>
> select ... i.name, c.name, t.subject, t.username, date_format(t.orderdate,'%Y%m%d%H%i%s') ... from forum_topic as t, forum_index as i, city as c where t.deleted='0' and t.orderdate>date_sub(now(),interval 14 day) and t.idc=c.id and i.id=t.idi order by t.orderdate desc;
>
> Выборка за последние 14 дней.
>
> Объединяются таблицы forum_index (разделы форума), forum_topics (темы форума), city (города) с последующей сортировкой по полю orderdate (timestamp).
>
> Количество записей:
> forum_index = 42
> forum_topics = 107000
> city = 5
>
> Индексы:
> в forum_topic индекс idi_deleted по двум полям idi и deleted
>
> Исходя из этого есть предположения как можно оптимизировать запрос или таблицы? Очень надеюсь на вашу помощь.
>
> Если данных мало - скажите.
>


From: Pentarh Udi - 27/02/2007 - 17:58:06
Subject:Производительность / оптимизация
-----------------
1. По оптимизации my.cnf надо смотреть твой "SHOW GLOBAL STATUS" (от рута). Выложи.
2. max_connections=100 маловасто. твой сервак пицот потянет.
3. Кстати что за ось? Только не гри что фря )

Но это все лирика.

Твоя основная проблема в том, что какая то хрень локает таблиц(у|ы) на запись, а в это время в нее(их) другие треды очень настойчиво пытаются что-то писать (update/insert/delete). Писать у них не получается и они (треды, коннекшины) сидят в памяти и ждут момента снятия лока. Лок видать долгий идет, кол-во желающих что-то записать все растет и растет, пока не достигнет лимита max_connections.

Что может локать таблицы?
1. mysqldump или какой то бекап на время чтения ставит LOCK TABLES WRITE
2. Какой то тормозящий UPDATE/DELETE, который работает не по индексу и долго, в следствии этого локает таблицу(ы) надолго.
3. Какой то INSERT/UPDATE/DELETE, который пищет в большую таблицу, где много индексов. Индексы приходится долго перестраивать.

MyISAM использует table-level locking. Эт значит что при записи локается ВСЯ таблица.

Попробуй переключить наиболее большие таблицы на INNODB (возьми конфигурацию innodb в my.cnf из дистрибутивного my-huge.cnf)

Делается это так: ALTER TABLE your_table ENGINE=INNODB;

Если табличка большая, прийдется подождать. INNODB использует row-level locking, т.е. блокируется только строка а не вся таблица и другие могут в нее одновременно писать. На INNODB не работают INSERT DELAYED.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
30845



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |