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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автокоммит 1/0 и скорость вставки, Чудеса да и только в производительности 
:(
    Опции темы
d_k
Дата 18.3.2016, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Коллеги, столкнулся с интересной ситуаций. Есть ХП которая переливает данные из одних таблиц (extracted data) в другие (нормализованная структура).
Структура такова, есть основная сущность, идет вставка, потом начитываются связанные сущности и вставляются в связанные таблицы с использованием идентификатора полученного от 1-й вставки.  Все это обернуто в курсор.

Так вот, при выключенном автокоммите и оборачивании вызова ХП в транзакцию скорость вставки порядка 6000 записей в минуту, если включить автокоммит, то скорость вставки вырастает в 3 раза. С чем такое поведение может быть связано? Мне казалось все должно быть как раз наоборот!

Если поможет: Записей много, счет на 100-ни миллионов в связанных таблицах (но скорость низкая при выключенном автокоммите и стартанутой транзакции буквально на 1-й сотне тысяч).

Это сообщение отредактировал(а) d_k - 18.3.2016, 15:38
PM MAIL   Вверх
Akina
Дата 18.3.2016, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(d_k @  18.3.2016,  16:37 Найти цитируемый пост)
Мне казалось все должно быть как раз наоборот!

Гм... а можно полюбопытствовать, почему тебе так казалось? ну просто интересно, каким путём шла мысль человеческая.

Как по мне, то записать результат сразу быстрее, чем сперва где-то сохранить, а потом по команде записать, пусть и всё сразу...


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

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


Шустрый
*


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

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



Гм. Ну вроде как по доке все
тынц
причем все так и есть при балк инсертах, но вот ХП с курсором внутри вкорне меняет положение дел

Это сообщение отредактировал(а) d_k - 18.3.2016, 16:18
PM MAIL   Вверх
Akina
Дата 18.3.2016, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(d_k @  18.3.2016,  17:16 Найти цитируемый пост)
вроде как по доке все

Там общие соображения. А тут мы имеем вполне конкретную ситуацию. Вот мне и интересно, какие именно соображения мануала были отображены на неё, и как именно.

Ну и схема ХП не помешала бы - а то не очень ясно, в какие моменты там коммиттятся изменения (более того, создаётся впечатление, что в более быстром варианте транзакций нет вообще).


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

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


Шустрый
*


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

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



Цитата(Akina @  18.3.2016,  16:56 Найти цитируемый пост)
Там общие соображения. А тут мы имеем вполне конкретную ситуацию.

В  чем разница? Соображения просты, фиксация делается не после каждого инсерта а некоторыми чанками, что по сути снижает дисковое IO. Нет оверхэда на создание неявных транзакций для каждого инсерта.

Схема? Ну суть проста. Открывается курсор внутри ХП. Инсерт в таблицу основной сущности данных курсора (переливка), начитка дочерних записей и их инсерт.  И так поциклу до тех пор пока не кончатся записи возвращаемые курсором. Полный код не вижу смысла приводить.

ЗЫ: нигде не указал ранее, мой косяк - engine = InnoDb
PM MAIL   Вверх
Zloxa
Дата 21.3.2016, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(d_k @  21.3.2016,  09:23 Найти цитируемый пост)
Соображения просты, фиксация делается не после каждого инсерта а некоторыми чанками, что по сути снижает дисковое IO

Добавлю к сказанному.  Незакоммиченное может отлеживаться в различного рода кэшах. Коммит же, прежде чем вернуть управление, обязан дожидаться физического сброса на диск. 

На версионниках (Oracle, PG, FB) частый коммит очень накладен. InnoDB же, афайк, блокировочник с элементами версионности. Блокировочники изоляцию транзакций обеспечивает созданием дополнительных объектов - блокировок. Для них длинная транзакция (редкий коммит)  влечет дополнительные издержки.

Это сообщение отредактировал(а) Zloxa - 21.3.2016, 10:38


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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