Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 Как секционирование влияет на скорость загрузки?  [new]
seadb
Member

Откуда:
Сообщений: 45
Нужно создать БД. Количество записей 2 - 3 миллиона в день. Будет ли загрузка в секционированную таблицу медленнее чем в не секционированную и на сколько? Хотелось бы полуить такую информацию для Oracle и для MySQL
14 апр 08, 17:43    [5544460]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
basker
Member

Откуда: Донецк, УА
Сообщений: 187
чего ей быть медленней?

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

и не в оракле или мсскл тут дело
14 апр 08, 17:58    [5544573]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Yo.!
Guest
seadb
Нужно создать БД. Количество записей 2 - 3 миллиона в день. Будет ли загрузка в секционированную таблицу медленнее чем в не секционированную и на сколько? Хотелось бы полуить такую информацию для Oracle и для MySQL

в оракле есть тулза SQL*Loader, она может мимо субд писать прямо в датафайл, через нее получится на порядок быстрее обычного инсерта. она точно будет быстрее в несекционированую. для сексионированой можно указывать в которую партицию заливаем, наверно если так указывать получится не сильно медленее.
14 апр 08, 18:36    [5544732]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
seadb
Будет ли загрузка в секционированную таблицу медленнее чем в не секционированную

Ну если хорошо подумать, может и удастся добиться такого эффекта, хотя сходу никаких светлых мыслей в голову не приходит.

Yo.!

Друг мой, здорово похоже на то, что кто-то взял себе чужой ник...
15 апр 08, 11:13    [5546607]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Yo.!
Guest
softwarer

Друг мой, здорово похоже на то, что кто-то взял себе чужой ник...

а что вас на толкнуло на такую мысль ? может вы не встречались с вариантом Direct Path, который готовит самостоятельно блоки данных и пишет (через API) по сути напрямую в датафайлы ;)
15 апр 08, 12:46    [5547597]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
seadb
Нужно создать БД. Количество записей 2 - 3 миллиона в день. Будет ли загрузка в секционированную таблицу медленнее чем в не секционированную и на сколько? Хотелось бы полуить такую информацию для Oracle и для MySQL


В Оракле так делаецца:

1. Данные заливаюцца в несколько staging таблиц, через direct path.
2. Данные обрабатываюцца в энтих таблицах. Всякий data cleansing и прочая байда.
3. Данные заливаются insert'ом с APPEND хинтом из staging в специальную таблицу t_exchange имеющую
структуру идентичную главной секционированной (секционивроанная обычно - fact table)
4. Делаецца exchange partition из t_exchange в главную (fact table).

Главное не забыть заранее насоздавать пустых партиций в fact table. В принципе задача стандартная в области Data Warehousing. 2-3 лимона записей в день по оракловым понятиям совсем немного, если БД не на лаптопе стоит.
17 апр 08, 02:55    [5558463]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Позволю себе пару комментариев.

Зл0й
1. Данные заливаюцца в несколько staging таблиц, через direct path.

или быть может другим путем, например через transportable tablespace. Зависит от ситуации.

Зл0й
3. Данные заливаются insert'ом с APPEND хинтом

Комментарий для присутствующих: по сути тот же direct path, вид сбоку.

Зл0й
4. Делаецца exchange partition из t_exchange в главную (fact table).

Предварительно эта t_exchange опять же может быть перенесена на другой сервер через TT - если хранилище и отстойник лежат на разных железках.

Комментарий для присутствующих: польза exchange partition в том, что может быть спокойно "в сторонке" проведен какой угодно долгий итп процесс обработки данных, идти коммиты, процесс может быть остановлен на середине и запущен потом итп. Наконец, наступает час X, и за долю секунды, внутри одной транзакции, новые данные собственно попадают в итоговую таблицу - таким образом, загрузка данных не мешает хранилищу работать 24x7
17 апр 08, 13:50    [5560957]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Yo.!
Guest
softwarer

Зл0й
3. Данные заливаются insert'ом с APPEND хинтом

Комментарий для присутствующих: по сути тот же direct path, вид сбоку.

да ну, ничего общего. инсерт с хинтом это сторона сервера. для него оптимизатор построит план, план поместит в кеш, стартанет транзакцию, запишет в UNDO, запишет в REDO, проведет еще мульон дорогостоющих операций. при direct path левый для сервера энджин минуя всю эту бодягу приготовит уже готовый дата блок.
17 апр 08, 20:42    [5563643]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Yo.!
левый для сервера энджин

Ты бы хоть что ли сам читал то, на что ссылки даешь

по ссылке выше
Instead of filling a bind array buffer and passing it to the Oracle database server with a SQL INSERT statement, a direct path load uses the direct path API to pass the data to be loaded to the load engine in the server. The load engine builds a column array structure from the data passed to it.
17 апр 08, 20:48    [5563657]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Yo.!
Guest
softwarer
Yo.!
левый для сервера энджин

Ты бы хоть что ли сам читал то, на что ссылки даешь

ну, отдельный от rdbms oracle энджин мимо всего oracle rdbms готовит блок, имхо на катртинке чуть выше вполне доступно разрисовано.
17 апр 08, 21:02    [5563696]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Yo.!
ну, .... имхо на катртинке чуть выше вполне доступно разрисовано.

Чтобы интереснее было нукать, напомню другую твою фразу: ничего общего. [с direct path] инсерт с хинтом это сторона сервера [а direct path, видимо, нет]. Видать, недостаточно доступно.

Yo.!
отдельный от rdbms oracle энджин мимо всего oracle rdbms готовит блок,

Если бы ты сказал "мимо sql-движка", это бы имело смысл. Но вот про то, как стрелочка, входящая в квадратик с надписью "Oracle Server", может проходить мимо всего rdbms, было бы весьма интересно услышать.

Да, кстати, совет: забудь про транзакции, undo, redo.... а лучше посмотри в документации. Эти слова не стоит употреблять совсем уж попусту.
17 апр 08, 23:51    [5563982]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Yo.!
Guest
2softwarer

как я понимаю, наконец вьехав о чем речь и чтоб не выглядить совсем уж севшим в лужу вы решили привязатся к словам. хорошо, признаю что до более внимательного прочтения описания считал что direct path движек находится на строне клиента, но сути спора не меняет, ничего общего с SQL командой insert (с хинтом, без хинта - без разницы) этот метод не имеет.
к стате совет приглядется к первой же фразе:
oracle docs
Instead of [scip] passing it to the Oracle database server [scip], a direct path load uses the direct path API


ЗЫ. заниматся дальнейшим лингвистическим меряньем желания не испытываю ;)
18 апр 08, 12:25    [5565804]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Yo.!
признаю что до более внимательного прочтения описания считал что direct path движек находится на строне клиента, но сути спора не меняет, ничего общего с SQL командой insert (с хинтом, без хинта - без разницы) этот метод не имеет.

А вот эта выдержка из Concepts ничем не поможет?
Oracle Database Concepts
You can implement direct-path insert operations by using direct-path INSERT statements or by using Oracle’s direct-path loader utility, SQL*Loader.
Тут прямо сказано, что SQL*Loader и хинт +append - два способа инициировать одну и ту же операцию.
18 апр 08, 12:35    [5565870]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Yo.!
как я понимаю, наконец вьехав о чем речь и чтоб не выглядить совсем уж севшим в лужу вы решили привязатся к словам.

Я бы на твоем месте не выпендривался, в противном случае я снова спрошу тебя, нафига ты украл чужое имя. Yo.!, имея свои недостатки, таки имеет представление об Oracle и подобного твоему бреда не несет.

Yo.!
но сути спора не меняет, ничего общего с SQL командой insert (с хинтом, без хинта - без разницы) этот метод не имеет.

Раз уж умеешь ссылаться на документацию - что хорошо - попробуй сделать следующий шаг: начни ее читать. Например, здесь; ключевые слова:

Документация по ссылке
Inserting Data Into Tables Using Direct-Path INSERT
....
To activate direct-path INSERT in serial mode, you must specify the APPEND hint in each INSERT statement, either immediately after the INSERT keyword, or immediately after the SELECT keyword in the subquery of the INSERT statement.

When you are inserting in parallel DML mode, direct-path INSERT is the default.
....

С интересом выслушаю твой рассказ про то, что direct path insert не имеет ничего общего с direct path.
18 апр 08, 12:38    [5565901]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Yo.!
Guest
softwarer

С интересом выслушаю твой рассказ про то, что direct path insert не имеет ничего общего с direct path.

не буду, т.к. не вижу отличий, ну синтаксис этой команды чуть напоминает SQL Insert, но я не вижу ничего общего с SQL командой Insert. чтоб доказать, что я тот самый Yo! давайте уж вместе полезем в документацию. забавно да, оказалось я был прав даже в том что, что блок формируется на стороне клиента:

К сообщению приложен файл. Размер - 0Kb
18 апр 08, 13:59    [5566563]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Yo.!
Guest
читать "блок формируется на стороне клиента" как "структура блока формируется на стороне клиента"
18 апр 08, 14:02    [5566601]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Yo.!
не буду, т.к. не вижу отличий, ... но я не вижу ничего общего с SQL командой Insert.

OK. Итого, сказанное тобой в https://www.sql.ru/forum/actualthread.aspx?tid=547119#5563643 считаем успешно опровергнутым в части "да ну, ничего общего". Остается разобраться с вопросом формирования блока.

Yo.!
забавно да, оказалось я был прав даже в том что, что блок формируется на стороне клиента: ... читать "блок формируется на стороне клиента" как "структура блока формируется на стороне клиента"

Ну и где ж ты это увидел? Обычная передача массива параметров.
18 апр 08, 14:55    [5567041]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Yo.!
Guest
softwarer
Yo.!
не буду, т.к. не вижу отличий, ... но я не вижу ничего общего с SQL командой Insert.

OK. Итого, сказанное тобой в https://www.sql.ru/forum/actualthread.aspx?tid=547119#5563643 считаем успешно опровергнутым в части "да ну, ничего общего". Остается разобраться с вопросом формирования блока.

ах ты ж блин, я упустил, что Insert с хинтом может быть direct-path Insert'ом. из вашей цитаты мне показалось, что там идет речь о хинте sql*loader'у включающий serial mode.
ладно, признаю Insert с хинтом имеет много общего.
18 апр 08, 17:37    [5568275]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Этанол Эталонович
Member

Откуда: Водкозажопск
Сообщений: 253
Yo.!
ах ты ж блин, я упустил
Ты мозги свои где-то упустил. Картинками взрослых дядей не убедить :)
19 апр 08, 20:12    [5570353]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
Этанол Эталонович
Yo.!
ах ты ж блин, я упустил
Ты мозги свои где-то упустил. Картинками взрослых дядей не убедить :)


Надо говорить,-"Мембер ххх, мне кажется, что в Вашем совете кроются существенные неточности" (c)dmidek
21 апр 08, 10:50    [5572680]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
Николай Кальмарский
Member [заблокирован]

Откуда: Ховрино
Сообщений: 2322
Господа! Два миллиона в день. Ну не пофиг ли во что грузить?
22 апр 08, 20:58    [5582180]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
ditbunau
Member

Откуда: оттуда
Сообщений: 717
По опыту загрузок по 100.000.000 записей в день в секционированную таблицу - начинаются траблы, когда партиция достаточно распухнет. Скорость загрузки падает. А пока пустая партиция - все махом залетает.
28 апр 08, 12:28    [5603538]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
ditbunau
По опыту загрузок по 100.000.000 записей в день в секционированную таблицу - начинаются траблы, когда партиция достаточно распухнет. Скорость загрузки падает.

Я в свое время мерял, и пришел к выводу, что оптимальный размер партиции для Oracle - 20-50 млн. записей. Цифра, конечно, условная, но если выходит за эти границы - стоит проверить, а не теряем ли мы на этом.
28 апр 08, 12:43    [5603620]     Ответить | Цитировать Сообщить модератору
 Re: Как секционирование влияет на скорость загрузки?  [new]
ditbunau
Member

Откуда: оттуда
Сообщений: 717
softwarer
ditbunau
По опыту загрузок по 100.000.000 записей в день в секционированную таблицу - начинаются траблы, когда партиция достаточно распухнет. Скорость загрузки падает.

Я в свое время мерял, и пришел к выводу, что оптимальный размер партиции для Oracle - 20-50 млн. записей. Цифра, конечно, условная, но если выходит за эти границы - стоит проверить, а не теряем ли мы на этом.


Согласен. Можно в конкретных условиях подобрать размер, чтобы и скорость не сильно падала, и поиск был достаточно эффективен.
28 апр 08, 13:32    [5603893]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить