Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ключ партишена в DB2 и Oracle
|
|||
|---|---|---|---|
|
#18+
Добрый день всем. Признаюсь честно, что я ораклист и сейчас столкнулся с DB2, поэтому заранее прошу прощения, если что-то не так объясняю. Итак, есть хранилище данных, в которых фактовые таблицы партицированны по полю "id заказа" (а-ля hash partitioning). Если рассматривать, что пользователи будут оперировать с большим количеством строк, а не отдельными заказами, и в большинстве случаев агрегация будет по какой-то определённой дате, то я бы предпочёл партицировать таблицу по дате. Мне объяснили, что поскольку таблицы партицированы по коду заказа, то при обработке нескольких заказов одновременно это будет оптимальнее, если они разнесены по разным партишенам. Это немного не сопоставимо с моим "заточенным под оракл" понятием. В оракле вычитка данных идёт поблочно, поэтому если все заказы будут размещены в одном партишене (а соответственно, несколько записей могут быть в одном блоке) за какой-то день, то только этот партишен будет просканен и дальше только записи из этого партишена будут дальше джоинится, агрегироваться и т.д. Расскажите пожалуйста, почему подход для DB2 другой, где я чего недопонимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 18:27 |
|
||
|
Ключ партишена в DB2 и Oracle
|
|||
|---|---|---|---|
|
#18+
emctl, тут речь о других партишенах идёт. О кластере shared nothing, каждый участник которого (обычно отдельный физический сервер) называется partition. Чтобы они работали одновременно, данные желательно распределить по ним равномерно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 19:02 |
|
||
|
Ключ партишена в DB2 и Oracle
|
|||
|---|---|---|---|
|
#18+
Т.е., если две таблицы, которые джоинятся, будут партицированны по одному полю, то они будут джоинится на отдельном сервере, а результат будет передаваться "мастер серверу", который будет уже собирать всё в кучу и выдавать результат? Я правильно понимаю работу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 19:07 |
|
||
|
Ключ партишена в DB2 и Oracle
|
|||
|---|---|---|---|
|
#18+
emctlТ.е., если две таблицы, которые джоинятся, будут партицированны по одному полю, то они будут джоинится на отдельном сервере, а результат будет передаваться "мастер серверу", который будет уже собирать всё в кучу и выдавать результат? Я правильно понимаю работу? В принципе да, но есть ньюансы ... :) Почитай здесь: 1. Database Partitioning, Table Partitioning, and MDC for DB2 9 - http://www.redbooks.ibm.com/abstracts/sg247467.html?Open 2. Dimensional Modeling: In a Business Intelligence Environment - http://publib-b.boulder.ibm.com/abstracts/sg247138.html?Open 3. DB2 9 for Linux, UNIX, and Windows Advanced Database Administration Certification Study Guide - http://my.safaribooksonline.com/book/databases/db2/9781583470800 4. Data Modeling Techniques for Data Warehousing - http://publib-b.boulder.ibm.com/abstracts/sg242238.html?Open С уважением, Вадим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2012, 21:38 |
|
||
|
Ключ партишена в DB2 и Oracle
|
|||
|---|---|---|---|
|
#18+
Я думаю что товарищу ТС надо вовсе не партиционирование таблицы по разным серверам db2 а именно разделение таблицы по отдельным tablespace. Вот здесь об этом написано Table partitioning в частности цитата: Table partitioning is a data organization scheme in which table data is divided across multiple storage objects called data partitions or ranges according to values in one or more table columns. Each data partition is stored separately. These storage objects can be in different table spaces , in the same table space, or a combination of both. там же есть пример: Код: plsql 1. 2. 3. 4. ну и конечно бенефиты от разделения таблицы по фрагментам Improved performance for business intelligence style queries Query processing is enhanced to automatically eliminate data partitions based on predicates of the query. This is known as data partition elimination, and can benefit many decision support queries. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2012, 08:29 |
|
||
|
Ключ партишена в DB2 и Oracle
|
|||
|---|---|---|---|
|
#18+
emctl, В двух словах, без отсылки к первоисточникам :) У DB2-хи есть два вида партиционирования. 1. размазывание таблицы по разным узлам кластера (требуется DB2 Partitioning Feature) с тем, что каждый обрабатывает свой кусок (при объединении двух таких таблиц обработка происходит распределённо, общение узлов - "каждый с каждым", хотя и есть координирующий "мастер" узел, который для разных коннектов может быть различен; тут главная задача - равномерно размазать и по возможности обеспечить collocation данных). Видимо речь не о нём. 2. Разделение таблицы на партиции в рамках одной ноды/stand-alone сервера (в общем то же, что и у Оракла). Что даёт: 1. Ну, простое удобство по частям добавлять/откусывать партиции (в архив там данные отправлять, прочий maintenance осуществлять). 2. Возможность на массовых вставках работать с индексами значительно меньшего размера (sic!) 3. В определённых случаях получать table scan'ы не по всей таблице, а по небольшим частям, т.е. получать пользу от частично отсортированных данных (join'ить по кусочкам при join'е по партиционному ключу и т.д.) 4. При включённом внутри-партиционном параллелизме возможность параллельно выполнять подзапросы (выполняющиеся в рамках одного запроса) на разных частях таблицы (которые в свою очередь можно распихать по разным физическим stotage'ам, впрочем, как и одну партицию). На самом деле сомнительное удовольствие, но можно, к примеру, отправить "архивную" часть таблицы на "медленные" диски и вообще по-разному извращаться. Наверное всё. Работа (update) с некоторым заданным set'ом заказов (пусть и большим) вообще партиционированности таблицы ортогональна. Партиционированность - на уровень выше уровня физического хранения, по сему может быть абсолютно не влияющей на указанную ситуацию (а при должном старании может оказаться влияющей отрицательно). Если выборка идёт прямо по индексу, то нам абсолютно наплевать на партиционированность. Если по диапазону значений (дат, ID), то скан части большого индекса может быть ничуть не не хуже скана индекса индивидуальной партиции. Выигрыш, когда партиционирование даёт реальный прирост в скорости - ситуация, когда table scan по партиции эффективней чего-либо другого (нужно перебрать достаточно большое количество записей, но есть предикат, указывающий, что нужна только такая-то (такие-то) партиция(и)). Далее, уже на физическом уровне, можно постараться физически положить совместно используемые записи близко друг к другу. См. пара картинок про кластерные индексы и про prefetch . Что, впрочем, тоже может никак не помогать, если нужные записи расположены достаточно далеко друг от друга. Ну, про Multi-Dimentional Clustering уже упоминалось. В итоге, вcё зависит от того как выбираются требуемые записи (по одной/скопом), общего их количества, процента выбираемых и т.п. Partitioning по дате как правило один из самых естественных, при этом даже если они вместе с ID монотонно возрастают, partitioning по ID выглядит сомнительным, если только у нас нет запросов на выборку по диапазону ID. Т.е. по-моему никакого недопонимания нет. Возможно недопонимание возникло у советчиков - партиционирование таблицы внутри ноды (как замена стандартному паттерну "сделать множество таблиц и объединить их одним вью") появилось в DB2 заметно позднее партиционирования на кластере (которому уже ну не менее 15 лет). Тонкие отличия с Ораклом начинаются в обработке параметризованных запросов и Bind Variable Peeking, где параметр является партиционным ключом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2012, 15:13 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=37652340&tid=1601938]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 168ms |

| 0 / 0 |
