Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / 90К партиций / 25 сообщений из 28, страница 1 из 2
26.11.2019, 03:13
    #39894232
90К партиций
Всем добрый день,

имеется таблица с количеством строк максимально 800М. Количество полей 20.
Нужно партиционировать таблицу по одному полю, для которого максимально может быть создано 90К партиций. Данные распределены по партициям примерно равномерно.
Может ли такое количество партиций иметь негативное влияние на скорость запроса по выше указанной таблицы? В Where Clause всегда присутствует поле, по которому буду партиционировать.
Версия базы данных:
Oracle 12c, Version 12.2.0.1

P.S. Создал в PostgreSQL 40К партиций с общим количеством данных 1000 строчек. Обычный запрос длится заметно дольше, чем на такую же таблицу с индексом.

Заранее спасибо.
Женя Ташкенский.
...
Рейтинг: 0 / 0
26.11.2019, 07:39
    #39894250
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
P.S. Создал в PostgreSQL 40К партиций с общим количеством данных 1000 строчек. … длится заметно …
А в Oracle-е создавалка погнулась?
Hans Christian Andersen
Женя Ташкенский.
Пи$д@чий ящик было бы ближе к действительности.
...
Рейтинг: 0 / 0
26.11.2019, 14:27
    #39894496
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
имеется таблица с количеством строк максимально 800М. Количество полей 20.
Нужно партиционировать таблицу по одному полю, для которого максимально может быть создано 90К партиций.
800 000 000 / 90 000 ~= 9 000 строк на секцию.

Деньги на приобретение опции Partitioning уже накопили?
...
Рейтинг: 0 / 0
26.11.2019, 14:43
    #39894510
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
В Where Clause всегда присутствует поле, по которому буду партиционировать.
одного присутствия мало, может там key in (1..90k), вообще нужно знать все предикаты и ккие индексы есть и какие будут


Hans Christian Andersen
Обычный запрос
каков он "обычный" запрос?
...
Рейтинг: 0 / 0
26.11.2019, 14:45
    #39894511
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
оффтоп
Hans Christian Andersen
Женя Ташкенский.
Я тоже ташкентский
...
Рейтинг: 0 / 0
26.11.2019, 19:48
    #39894697
90К партиций
SQL*Plus,


Да в курсе я, что денег стоит
...
Рейтинг: 0 / 0
26.11.2019, 19:49
    #39894698
90К партиций
xtender,

С какого района и где сейчас?
...
Рейтинг: 0 / 0
26.11.2019, 20:08
    #39894709
90К партиций
xtender,

Партиции по id
Селекты будут в основном такого рода:

Код: sql
1.
2.
3.
Select * from table_partition
Where id =154455565
And way between 50 and 130



По полю Way имеется b-tree индекс. Значения поля повторяются редко.
Поле Way имеет следующий тип number(4,3).
...
Рейтинг: 0 / 0
26.11.2019, 20:25
    #39894716
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
Значения поля повторяются редко.
Поле Way имеет следующий тип number(4,3).
Если 19999 значений повторяются редко, то либо поле заполнено в три тысячных процента строк (трактуя null в парадигме unique), либо заявление "строк максимально 800М" имеет погрешность в 40 тысяч раз.
Впрочем, для заведомо ложного условия "way between 50 and 130" ни индексы, ни партиции не нужны.
...
Рейтинг: 0 / 0
27.11.2019, 09:47
    #39894857
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen

And way between 50 and 130
[/src]
Поле Way имеет следующий тип number(4,3).


50 and 130 и number(4,3)

очепятка (неудачный пример)?

....
stax
...
Рейтинг: 0 / 0
27.11.2019, 11:28
    #39894936
90К партиций
Stax,


привет!
Опечатка...
поле way имеет тип double precision( в Postgres 8 bytes).
Данные могут в этом поле повторяться.
where выглядит так:
Код: plsql
1.
WHERE ((way <= 124.785) AND (way >= 121.785) AND (id = 123456423));



P.S. Select вызывается из Tableau
...
Рейтинг: 0 / 0
27.11.2019, 11:42
    #39894950
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
Нужно партиционировать таблицу
Цель?
...
Рейтинг: 0 / 0
27.11.2019, 12:15
    #39894976
90К партиций
-2-,

Цель, чтобы запросы по полю "id" работали быстро.
...
Рейтинг: 0 / 0
27.11.2019, 12:46
    #39894997
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
Цель, чтобы запросы по полю "id" работали быстро.
Индекс.
...
Рейтинг: 0 / 0
27.11.2019, 12:48
    #39895000
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
-2-,

Цель, чтобы запросы по полю "id" работали быстро.

если по ид есть индекс (и селективность не млн-ы), то должно быть быстро ("мгновенно")

.....
stax
...
Рейтинг: 0 / 0
28.11.2019, 01:40
    #39895317
90К партиций
Stax,

Дело все в том, что селективность до 8 Mio по одному id
...
Рейтинг: 0 / 0
28.11.2019, 06:41
    #39895334
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
селективность до 8 Mio по одному id
В условии "в основном такого рода" не только id.
...
Рейтинг: 0 / 0
28.11.2019, 20:07
    #39895923
90К партиций
-2-,

Данные анализируются всегда только те, которые принадлежат одному id.
Потом могут данные из id еще селектироваться по way.
Вопрос был, будет ли проблема у оптимайзера с 90 000 партицый? Есть у кого то опыт с таким количеством партиций?
...
Рейтинг: 0 / 0
29.11.2019, 07:52
    #39896047
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
Вопрос был, будет ли проблема у оптимайзера с 90 000 партицый? Есть у кого то опыт с таким количеством партиций?
Не ссы быть первым, получившим опыт. Отгребёшь и расскажешь.
...
Рейтинг: 0 / 0
29.11.2019, 10:16
    #39896120
Sal
Sal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Elic
Hans Christian Andersen
Вопрос был, будет ли проблема у оптимайзера с 90 000 партицый? Есть у кого то опыт с таким количеством партиций?
Не ссы быть первым, получившим опыт. Отгребёшь и расскажешь.


The One Million Table Partitions Challenge in ATLAS @CERN Gancho Dimitrov

https://www.doag.org/formes/pubfiles/11860623/2019-db-gancho_dimitrov-the_one_million_table_partitions_challenge_in_atlas_cern-praesentation.pdf
...
Рейтинг: 0 / 0
29.11.2019, 11:18
    #39896189
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
-2-,

Данные анализируются всегда только те, которые принадлежат одному id.
Потом могут данные из id еще селектироваться по way.
Вопрос был, будет ли проблема у оптимайзера с 90 000 партицый? Есть у кого то опыт с таким количеством партиций?

мож проще создать индекс по way (FBI от way), или даже id+way?

зи
сначала меня насторжил миллиард строк,
глянул у нас совсем не последняя табличка (с которой постоянно работают) уже миллиард 200

.....
stax
...
Рейтинг: 0 / 0
29.11.2019, 19:17
    #39896582
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
Hans Christian Andersen
Есть у кого то опыт с таким количеством партиций?
Ну у меня был.

Твои опасения понятны и даже если вендор гарантирует какие-то лимиты, в реальности система может становится нерабочей при приближении к ним. К примеру, Оракл хоть и допускает до тыщи колонок, но по факту даже если у тебя будет их 500, то это будет полный треш. Во-вторых абсолютно нормальны сомнения когда приходит идея что-то делать против общепринятых практик.

В моем случае решение было еще более «извращаенным» - была таблица фактов секционированная interval под дням и 1024 hash subpartitions. При этом было еще и измерение, которое изначально было секционировано только по дням, но потом его тоже прекроили interval * 1024 hash. Единственная причина для этого - измерение было ведущим при заходе в таблицу фактов и таким образом задействовался partition wise join. В partition wise join не было бы необходимости, если б в Oracle bloom filter был идеально реализован и при соединениях при заходе в факт нужные подсекции отсекались бы благодаря bloom filter, но на практике возникал ряд проблем, а при DML bloom filter на 11-й версии вообще не задействовался из-за бага.

Так что была таблица фактов в которой около 300 дней по 1к секций, то есть примерно 300к секций и столько же в измерении. Более того, в измерении одна секция это одна строка. В факте на каждый день боле 100М строк, соответственно данных на два порядка больше чем у тебя.

Один парень который был против таких выкрутасов говорил, что измерение фактически используется как альтернатива индекса при доступе в факт. Я вполне могу согласиться с такой формулировкой. И хорошо, когда есть кто-то кто может конструктивно покритиковать или попыться проверить на прочность когда ты предлагаешь что-то нестандертное. Еще очень важно, чтоб был кто-то твоего уровня или выше, кто может критически подойти к твоему решению а сдругой стороны поддержать его, если убедится в целесообразности. Важно когда это кто-то работающий с тобой и несущий ответственность. А что толку если кто-то в инетрнетах тебе даст зеленый свет? Тебе ж вред ли поможет аргумент на работе, что тебя кто-то на форуме поддержал.

В идеях подобно этой нет никакой оригинальной мысли, любой человек который хочет сделать хорошую систему думает над тем как быстрее из нее извлекать данные. Просто надо пробовать, еще раз пробовать и критически анализировать.

Теперь больше к технической части. Понятное дело плюс subpartitions перед индексом – скорость вставки. Только мало кто задумывается насколько наличие индекса влияет на эту самую вставку. Если без индекса порция данных грузится меньше 20 мин, а с индексом более часа, то это уже вызывает определеннное желание лишний раз подумать как от него отказаться. Во-вторых различные DDL на таблице могут требовать перестройки индекса или его части – как тривиальный пример – сжатие секции. Это дополнительное время на maintenance, иногда весьма значительное.

С большим числом секций свои проблемы. Даже тривиальный truncate может занимать значительное время, если затрагивает тыщи секций. Если захочется перестроить таблицу, скажем добавив и заполнив новую колонку это может быть заметно дольше чем пересоздание таблицы просто с индексом и без огромного числа subpartitions.

Что следует учесть.
1. Становится весьма важной кляуза storage (initial … next …) . Например, если секция занимает мегабайт, а в ней небольшое число строк, то это весьма затратно. Умножь занимаемый размер на 90к.
2. Оптимизатору крышу не сносит, но стоит придерживаться разумного минимализма. То есть, не собирать гистограммы пока в них нет необходимости. Также в нашем случае НЕ собирали статистику по subpartitions – параметр granularity.
По факту сбор статистики вообще не выполнялся. Она собиралась единоразово. При открытии нового дня статистика копировалась с предыдущего. Ведь данных по дню еще нет, а статистика уже нужна.
3. Важно учесть housekeeping. То есть, архивирование старых данных, компрессию и вообще сопровождение подобных таблиц. Мы напоролись на лимит 1М секций, для того, чтоб этого избегать надо «сдвигать» нижнюю границу интервального секционирования. Лимит возникает не из-за фактического числа партиций а из-за разницы максимальной и минимальной фактической границы для интервального диапазона.
4. Ну и последняя рекомендация в стиле капитана очевидность. Во первых все пробуй и тщательно тестируй, во вторых минимизируй число секций. Может скорость вытягивания нужных данных особо не изменится если ты ументьшиьш число секций в 10 раз.

То есть по сути всё просто. Регламент сбора статистики, регламент архивирования, минимизация занимаемого места, минимизация числа секций, тщательное тестирование и взвешивание за и простив. :)
...
Рейтинг: 0 / 0
29.11.2019, 20:26
    #39896607
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
dbms_photoshop
1. Становится весьма важной кляуза storage (initial … next …). Например, если секция занимает мегабайт, а в ней небольшое число строк, то это весьма затратно. Умножь занимаемый размер на 90к.
В таком смысле, занимать поменьше места, важность initial в том, что его указывать становится незачем. А next и при других смыслах, если таковые найдутся.
...
Рейтинг: 0 / 0
30.11.2019, 01:23
    #39896638
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
-2-
dbms_photoshop
1. Становится весьма важной кляуза storage (initial … next …). Например, если секция занимает мегабайт, а в ней небольшое число строк, то это весьма затратно. Умножь занимаемый размер на 90к.
В таком смысле, занимать поменьше места, важность initial в том, что его указывать становится незачем. А next и при других смыслах, если таковые найдутся.
Прочитал три раза - так и не понял мысли.
Я вел речь про то, что если таблица состоит не из одного сегмента а из дестков тысяч, то озвученные параметры могут играть очень существенную роль.
С этим несогласие?
...
Рейтинг: 0 / 0
30.11.2019, 15:29
    #39896696
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
90К партиций
dbms_photoshop
Hans Christian Andersen
Есть у кого то опыт с таким количеством партиций?
при DML bloom filter на 11-й версии вообще не задействовался из-за бага.


Говорят, insert all помогает) Ну в смысле при insert BF действительно не работает, а про insert all - работает.

[/quot]
Только мало кто задумывается насколько наличие индекса влияет на эту самую вставку. Если без индекса порция данных грузится меньше 20 мин, а с индексом более часа, то это уже вызывает определеннное желание лишний раз подумать как от него отказаться. [/quot]

А это уже странно - никогда такого не видел. Как может добавление одного индекса увеличить время вставки втрое? Я видел как добавление 50 индексов делало такое, но чтобы одного?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / 90К партиций / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]