Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Настройки MySQL, большое количество insert'ов 
:(
    Опции темы
sir_nuf_nuf
Дата 30.9.2010, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 8
Всего: 31



nIkTo, Да, но очередь будет на стороне MySQL. 

И вообще, если у вас данные поступаю с такой частотой, что MySQL (на данной машине) не успевает их писать в таблицу - вас ничто не спасет от переполнения очереди.

Теперь техническая сторона вопроса: как сделать так что бы MySQL успевал ?
1) проверьте что это вообще возможно на вашей машине:
1.1) пишите в самую простую таблицу без доп. UNIQUE индексов, можно  вообще без индексов.
1.2) почитайте документацию и оптимизируйте буфера MyISAM
1.3) посмотрите (top, iostat, systat) во что упирается система при записи (по идее должна в диск)
1.4) Akina наверняка еще добавит что-то

Если все сделали и все равно очередь растет - у вас слабая машина. 

Кстати та часть скрипта которая пишет в очередь ($insert->enqueue) должна проверять ее наполнение и приостанавливаться если очередь полна.



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
nIkTo
Дата 30.9.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Цитата

key buffer size    8,384,512


Это много или мало ?
PM   Вверх
Akina
Дата 30.9.2010, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



8 мегабайт? при гектаре на сервере?
Сам-то как думаешь... кстати, по дефолту 16М


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
muzer
Дата 5.10.2010, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



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

Цитата(Akina @  30.9.2010,  00:14 Найти цитируемый пост)
На потолке подсмотрел? Может вполне быть, что 2000 запросов отработают быстрее. 

Не может, увы. И не вижу причин упоминания потолка, даже если у вас нет практического опыта, представьте весь процесс вставки и посчитайте накладные расходы.

2) Основная проблема в ключе по varchar. Вы можете оптимизровать структуру таблицы, завести числовое поле равное какой-нибудь функции от row_name (например, crc32 (int) или половинке от md5 (bigint)), и уникальный ключ строить по ниму. Есть небольшая вероятность коллизий, но оно того стоит.

3) Есть такая фишка - delay_key_write. Если его включить, для данной таблицы или для всех, это в зависимости от значения key_buffer_size снизит вам нагрузку на диск при записи в таблицы. Есть минус - умирание mysql'я приведёт к порче индексов всех таблиц, для которых была включенна отложенная запись ключей. Но это решается myisamchck'ом перед стартом. Работает оно просто - пока есть свободный key_buffer - пишет ключи в момент выполнения запроса в память. Чтобы получить какой-то значимый эффект нужно увеличить key_buffer_size соразмерно кол-ву данных или возможностям хоста. Следить за наполнением буффера ключей можно через show global status like 'key_b%';
PM WWW   Вверх
Akina
Дата 5.10.2010, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(muzer @  5.10.2010,  06:49 Найти цитируемый пост)
Не может, увы. И не вижу причин упоминания потолка, даже если у вас нет практического опыта, представьте весь процесс вставки и посчитайте накладные расходы.

Простейший пример - неустойчивый канал связи с большим процентом потерь.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
muzer
Дата 5.10.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Цитата(Akina @  5.10.2010,  10:17 Найти цитируемый пост)
Простейший пример - неустойчивый канал связи с большим процентом потерь. 

Замечательный пример. Возьмите tcpdump и посчитайте кол-во пакетов в случае с одним запросом из 2000 строк и 2000 запросов. А теперь умножьте разницу на процент потерь и получится кол-во ретрансмитов, умножьте на задержку в сети и получите время, на которое 2000 запросов дольше одного запроса только лишь из-за сетевых проблем.

Это сообщение отредактировал(а) muzer - 5.10.2010, 12:43
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.