![]() |
|
Модераторы: skyboy |
![]()
|
|
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Подскажите настройки MySQL, и в обще буду благодарен любым советам как увеличить скорость выполнения вставок в таблицу.
Единственное улучшение которое использую это многострочная вставка. |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 8 Всего: 31 |
Ну как бы стандартный вопрос - MyISAM vs InnoDB - что используете ?
|
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Использую MyISAM
|
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 8 Всего: 31 |
попробуйте использовать insert delayed.
|
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
sir_nuf_nuf, мне кажется это не решит проблемы, сейчас запросы собираются в очередь в программе, из за этого она сжирает всю память и умирает, если я правильно понял то insert delayed только переведёт эту очередь на сторону mysqld, то есть будет умирать mysql ...
Есть вариант увеличения работоспособности , но это затратно RAID 0+1 есть ещё идеи ? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Что Вы скрыли под термином "многострочная вставка"? пример плиз... скажем сборки трёх простеньких запросов (2 поля хватит). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| nIkTo |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Таблица :
В клиентской части (Perl скрипт) формируется очередь из данных на вставку, отдельный поток берёт из очереди данные и постепенно формирует запрос из 2000 записей, а потом отправляет на выполнение mysql ....
|
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Кто Вас научил ТАК писать запросы???
1) Список полей следует перечислять ЯВНО. 2) Автоинкрементное ключевое поле в набор полей НЕ включается.
Добавлено через 2 минуты и 32 секунды Кстати... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Akina, прибавки в скорости это не дало никакой.
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
А я как бы и не ожидал...
А с чего ты решил, что он будет умирать? Он будет сливать записи в таблицу по мере возможности. Кстати, каково соотношение запросов запись/чтение в таблицу? С дугой стороны - объясни, почему ты не хочешь сливать записи по мере их появления? зачем тебе непременно хочется набрать большую пачку? чем это оправдано? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| nIkTo |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Akina,
так как запросы будут Mysql по мере возможности будет сливать записи, а остальные будут оставаться в очереди и хранится в оперативной памяти, а памяти на сервере всего 1gb, если mysql и не упадёт, то и работоспособной система оставаться не будет.
не думаю что 2000 запросов выполнится быстрее чем 1 но с большим количеством данных |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
На потолке подсмотрел? Может вполне быть, что 2000 запросов отработают быстрее. У тебя перл и мускул - на одной машине или на разных? если на разных - выделенный ли меж ними сегмент и какой пропускной способности? если на одной - то откуда берутся вообще эти 2000 записей? а дисковая подсистема на машине с мускулом - нормальная? А какие задачи на сервере? сколько остаётся собственно серверу БД? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| IgorIV |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: нет Всего: 8 |
nIkTo, конкретные цифры назови, сколько занимает вставка этих 2000 строк.
Как я понимаю, это вдс-сервер и при превышении лимита памяти убивается процесс с наибольшей памятью. Так? |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 8 Всего: 31 |
nIkTo, заместо извращения со склейкой данных в одну пачку могу порекомендовать делать insert как prepared statement.
Т.е. один раз подготовить statement а потом вставлять данные. |
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
sir_nuf_nuf, если правильна вас понял, сделал так :
но опять же тут будет выполнятся 2000 запросов вместо 1. Итог: через минуту в очереди $insert 122129 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |