SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.11.2012 17:05:58

beba
Участник
Зарегистрирован: 06.11.2012
Сообщений: 3

State end в запросаз на update висит долго, в результате locked :(

Здравствуйте.

Борюсь с проблемой уже третий день.. (может и больше уже...)
Иногда в БД появляется куча запросов locked в show processlist.
Самое обидное, что выловить момент иногда получается только тогда, когда сайт подвисает.. и мы это сами нечаянно замечаем.. Почти сутки все было нормально и я уж решил, что все поправилось. Когда появляется куча locked в State, тогда замечаю что в списке запросов есть кучка update и статус end может висеть секунды 2-3 у одного запроса, который и является инициатором блокировки.

Запрос идет просто мелочный (как мне кажется):
UPDATE sessions SET expiry = '1352193698', VALUE = 'информация по переменным сессии' WHERE ses_sid = 'ИД';
update banners_history set banners_shown = 2000 where banners_history_id = 'ИД'
Но почему то он выполняется ого-го (( 2-3 секунды.. просто жесть.

-----------------------

В основном связано с 2 таблицами. Одна - sessions (отвечает за сессии на сайте), другая banners_history (отвечает за информацию по паказам баннеров).

Структура такая теперь:

CREATE TABLE `banners_history` (
  `banners_history_id` int(11) NOT NULL AUTO_INCREMENT,
  `banners_id` int(11) NOT NULL DEFAULT '0',
  `banners_shown` int(5) NOT NULL DEFAULT '0',
  `banners_clicked` int(5) NOT NULL DEFAULT '0',
  `banners_history_date` date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (`banners_history_id`),
  KEY `banners_id` (`banners_id`),
  KEY `banners_date` (`banners_history_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


Create Table

CREATE TABLE `sessions` (
  `sess_id` int(11) NOT NULL AUTO_INCREMENT,
  `sesskey` varchar(32) NOT NULL DEFAULT '',
  `expiry` int(11) unsigned NOT NULL DEFAULT '0',
  `value` text NOT NULL,
  PRIMARY KEY (`sess_id`),
  KEY `expiry` (`expiry`),
  KEY `sesskey` (`sesskey`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

-----------------------------------------------------------------

Пытался делать:
1) Менять на InnoDB (не помогло)
2) concurent_insert выставлять в 2 (скорость отмены локетов менялась, но блокировки все равно бывало что появлялись)
3) изменил структуру в таблицах.
3.1) В sessions добавил primary_key отдельным полем и сделал его инкриментным... до этого было sesskey - primarykey. и при обновлениях использую ид.
3.2) В sessions убрал unique у sesskey, т.к. уникальность регулируется на программном уровне.
3.3) Переделал запросы, убрал в banners_history запрос типа banners_shown = banners_shown + 1 и еще несколько вещей
4) анализировал настройки на наличие ограничений.. (show variables like '%max%', show variables like '%slow%', show variables like '%insert%' и т.п.).. смотрел временные таблицы, когда висело все с локетами.. вроде бы нигде не утыкался в ограничения.

Что за такое может быть?.. на что можно еще обратить внимание..
на какие настройки акцентрировать внимание?..

я просто хоть убейте не могу понять, почему update простенький может выполняться так долго?..
сервер сам свой, физический.. 6Гб памяти DDR2 Dual Channel, 2 x Xeon E5310, 2 SAS 72Gb в РАЙД1 . в свое время выдерживал до 500 пользователей онлайн, когда были текстовые трансляции.. А еще был случай в прошлом году, что доходило до предела настроек и 1000 пользователей онлайн выдерживал..

меня не было поряда трех месяцев, был далеко по личным причинам от работы.. приехал, может что то еще в скриптах где то поменяли.. может в настройках чего то не вижу и замылилось.. т.к. такого раньше как то не видел.. ( возможно сессии раньше на диске хранились, а не в БД).. может еще что .. (((

Спасибо, .. хотя бы за то что дочитали до сюда.)

Неактивен

 

#2 06.11.2012 17:34:23

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: State end в запросаз на update висит долго, в результате locked :(

может наивно, но... дисковую систему проверяли? как себя контроллер с дисками и фс чувствует?

Неактивен

 

#3 06.11.2012 17:41:54

beba
Участник
Зарегистрирован: 06.11.2012
Сообщений: 3

Re: State end в запросаз на update висит долго, в результате locked :(

спасибо за ответ..

На серваке райд контроллер не используется для создания райда, юзаю mdadm (программный райд)..
состояние программного райда нормальное...

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

Неактивен

 

#4 09.11.2012 18:26:57

beba
Участник
Зарегистрирован: 06.11.2012
Сообщений: 3

Re: State end в запросаз на update висит долго, в результате locked :(

нашел проблему..
как оказалось Shopen был прав...
когда подгружается диск (копирование через rsync, или обычное копирование файлов) то и происходит торможение.. Запросы на обновление, добавление выполняются очень медленно.

надо думать над подключением отдельных хардов.. читал сейчас по поводу SSD, но все же наверное подключу SAS к своему контроллеру.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson