SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 15.12.2011 11:20:31

beast
Участник
Зарегистрирован: 15.12.2011
Сообщений: 6

Торможение HEAP при вставке/чтение

Добрый день, всем!

Есть таблица с  ENGINE = HEAP в эту таблицу много записывается/удаляется, но еще больше из нее читается данных, порядка 3-4 зап./сек(один процесс в нее пишет) и 6-8 чтен./сек(читают много процессов), т.е таблицу все время насилуют с разных сторон. smile Проблема заключается в том, что из таблицы все время нужно доставать актуальные данные, но т.к. она(таблица) все время обвешана блокировками это не всегда удается. Т.е. либо селекты ждут своей очереди, либо инсерты.

В голове крутится одна мысль, но я не знаю как ее реализовать. Организовать две таблицы, одна с ENGINE = MyISAM(1) др. с ENGINE = HEAP(2), соответственно в (1)  будут писаться/удалятся данные, а из (2) читаться, но вопрос в том, как их между собой синхронизировать?

MySQL 4.1.22

P.S. : Решение связанное с переходом на новую версию MySQL или поменять БД, пока не рассматривается.

Неактивен

 

#2 15.12.2011 18:28:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Торможение HEAP при вставке/чтение

Кажется, с такой нагрузкой может справиться и innodb, который будет блокировать
построчно, а не таблицу целиком. В 4.1, вроде, уже была рабочая версия.

Но вообще, если Вы упираетесь в блокировки MEMORY, — что-то пошло совсем-совсем
плохо. Действия над памятью всегда только processor-bound sad

Неактивен

 

#3 16.12.2011 10:28:19

beast
Участник
Зарегистрирован: 15.12.2011
Сообщений: 6

Re: Торможение HEAP при вставке/чтение

Дело все в том, что этот движок не активен на боевом сервере. Его намеренно отключили, чтобы он лишние ресурсы не отъедал

*************************** 8. row ***************************
Engine: InnoDB
Support: DISABLED
Comment: Supports transactions, row-level locking, and foreign keys

Но его все же удалось протестировать под данной нагрузкой на тестовом сервере, и он немного быстрее MyISAM, но медленнее чем HEAP.
Т.о InnoDB не годится.

А можно, все-таки, как-то развить мою идею или она совсем нереальна?

Неактивен

 

#4 16.12.2011 13:12:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Торможение HEAP при вставке/чтение

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

Неактивен

 

#5 16.12.2011 13:15:41

beast
Участник
Зарегистрирован: 15.12.2011
Сообщений: 6

Re: Торможение HEAP при вставке/чтение

Это отставание недопустимо.

Как вообще можно синхронизировать две таблицы в MySQL, находящиеся в одной базе?

Неактивен

 

#6 16.12.2011 19:52:29

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Торможение HEAP при вставке/чтение

Значит, Вам нужна одна таблица, никуда не денешься. Смотрите в сторону PS
первого сообщения — увеличение мощности процессора, переход на HandlerSocket.

Неактивен

 

#7 16.12.2011 20:35:11

beast
Участник
Зарегистрирован: 15.12.2011
Сообщений: 6

Re: Торможение HEAP при вставке/чтение

paulus написал:

Смотрите в сторону PS первого сообщения — увеличение мощности процессора

А что такое PS ?

Неактивен

 

#8 16.12.2011 20:36:22

beast
Участник
Зарегистрирован: 15.12.2011
Сообщений: 6

Re: Торможение HEAP при вставке/чтение

оппппссс...ступил, все понятно smile

А иных предложений нет?

Неактивен

 

#9 03.01.2012 19:55:27

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Торможение HEAP при вставке/чтение

в эту таблицу много записывается/удаляется, но еще больше из нее читается данных, порядка 3-4 зап./сек(один процесс в нее пишет) и 6-8 чтен./сек(читают много процессов), т.е таблицу все время насилуют с разных сторон.

4 записи на 8 чтения , это совсем немного.
Возможно сами запросы не оптимальны.

Неактивен

 

#10 04.01.2012 11:40:38

beast
Участник
Зарегистрирован: 15.12.2011
Сообщений: 6

Re: Торможение HEAP при вставке/чтение

Сами запросы, проще некуда.
С количеством запросов в секунду я конечно же ошибся. Смысл был в том, что в один и тот же период времени производятся разные операции с таблицей. Например, вставка-чтение, апдейт-вставка, адейт-чтение и т.п.
Как то так.

Неактивен

 

#11 04.01.2012 23:31:00

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Торможение HEAP при вставке/чтение

beast написал:

Сами запросы, проще некуда.
С количеством запросов в секунду я конечно же ошибся. Смысл был в том, что в один и тот же период времени производятся разные операции с таблицей. Например, вставка-чтение, апдейт-вставка, адейт-чтение и т.п.
Как то так.

Ну так а каком же количестве запросов идёт речь ?
Какое количество записей в таблице ?
Что за запись ? Апдейты по множеству полей что ли ?
У меня в одном проекте, запись в HEAP по 100 записей в секунду, и блокировок при этом вообще не видно.
Приведите пример запросов и время ихнего выполнения.

Ну а если говорить а космических скоростях, то вот почитайте про хвалёный HandlerSocket
История о том, как достичь 750,000 запросов в секунду

Неактивен

 

Board footer

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