![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
d_k |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 20.7.2004 Репутация: нет Всего: 1 |
Коллеги, столкнулся с интересной ситуаций. Есть ХП которая переливает данные из одних таблиц (extracted data) в другие (нормализованная структура).
Структура такова, есть основная сущность, идет вставка, потом начитываются связанные сущности и вставляются в связанные таблицы с использованием идентификатора полученного от 1-й вставки. Все это обернуто в курсор. Так вот, при выключенном автокоммите и оборачивании вызова ХП в транзакцию скорость вставки порядка 6000 записей в минуту, если включить автокоммит, то скорость вставки вырастает в 3 раза. С чем такое поведение может быть связано? Мне казалось все должно быть как раз наоборот! Если поможет: Записей много, счет на 100-ни миллионов в связанных таблицах (но скорость низкая при выключенном автокоммите и стартанутой транзакции буквально на 1-й сотне тысяч). Это сообщение отредактировал(а) d_k - 18.3.2016, 15:38 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Гм... а можно полюбопытствовать, почему тебе так казалось? ну просто интересно, каким путём шла мысль человеческая. Как по мне, то записать результат сразу быстрее, чем сперва где-то сохранить, а потом по команде записать, пусть и всё сразу... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
d_k |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 20.7.2004 Репутация: нет Всего: 1 |
Гм. Ну вроде как по доке все
тынц причем все так и есть при балк инсертах, но вот ХП с курсором внутри вкорне меняет положение дел Это сообщение отредактировал(а) d_k - 18.3.2016, 16:18 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Там общие соображения. А тут мы имеем вполне конкретную ситуацию. Вот мне и интересно, какие именно соображения мануала были отображены на неё, и как именно. Ну и схема ХП не помешала бы - а то не очень ясно, в какие моменты там коммиттятся изменения (более того, создаётся впечатление, что в более быстром варианте транзакций нет вообще). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
d_k |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 20.7.2004 Репутация: нет Всего: 1 |
В чем разница? Соображения просты, фиксация делается не после каждого инсерта а некоторыми чанками, что по сути снижает дисковое IO. Нет оверхэда на создание неявных транзакций для каждого инсерта. Схема? Ну суть проста. Открывается курсор внутри ХП. Инсерт в таблицу основной сущности данных курсора (переливка), начитка дочерних записей и их инсерт. И так поциклу до тех пор пока не кончатся записи возвращаемые курсором. Полный код не вижу смысла приводить. ЗЫ: нигде не указал ранее, мой косяк - engine = InnoDb |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Добавлю к сказанному. Незакоммиченное может отлеживаться в различного рода кэшах. Коммит же, прежде чем вернуть управление, обязан дожидаться физического сброса на диск. На версионниках (Oracle, PG, FB) частый коммит очень накладен. InnoDB же, афайк, блокировочник с элементами версионности. Блокировочники изоляцию транзакций обеспечивает созданием дополнительных объектов - блокировок. Для них длинная транзакция (редкий коммит) влечет дополнительные издержки. Это сообщение отредактировал(а) Zloxa - 21.3.2016, 10:38 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |