|
90К партиций
|
|||
---|---|---|---|
#18+
Всем добрый день, имеется таблица с количеством строк максимально 800М. Количество полей 20. Нужно партиционировать таблицу по одному полю, для которого максимально может быть создано 90К партиций. Данные распределены по партициям примерно равномерно. Может ли такое количество партиций иметь негативное влияние на скорость запроса по выше указанной таблицы? В Where Clause всегда присутствует поле, по которому буду партиционировать. Версия базы данных: Oracle 12c, Version 12.2.0.1 P.S. Создал в PostgreSQL 40К партиций с общим количеством данных 1000 строчек. Обычный запрос длится заметно дольше, чем на такую же таблицу с индексом. Заранее спасибо. Женя Ташкенский. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 03:13 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen P.S. Создал в PostgreSQL 40К партиций с общим количеством данных 1000 строчек. … длится заметно … Hans Christian Andersen Женя Ташкенский. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 07:39 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen имеется таблица с количеством строк максимально 800М. Количество полей 20. Нужно партиционировать таблицу по одному полю, для которого максимально может быть создано 90К партиций. Деньги на приобретение опции Partitioning уже накопили? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 14:27 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen В Where Clause всегда присутствует поле, по которому буду партиционировать. Hans Christian Andersen Обычный запрос ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 14:43 |
|
90К партиций
|
|||
---|---|---|---|
#18+
оффтоп Hans Christian Andersen Женя Ташкенский. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 14:45 |
|
90К партиций
|
|||
---|---|---|---|
#18+
SQL*Plus, Да в курсе я, что денег стоит ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 19:48 |
|
90К партиций
|
|||
---|---|---|---|
#18+
xtender, С какого района и где сейчас? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 19:49 |
|
90К партиций
|
|||
---|---|---|---|
#18+
xtender, Партиции по id Селекты будут в основном такого рода: Код: sql 1. 2. 3.
По полю Way имеется b-tree индекс. Значения поля повторяются редко. Поле Way имеет следующий тип number(4,3). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 20:08 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen Значения поля повторяются редко. Поле Way имеет следующий тип number(4,3). Впрочем, для заведомо ложного условия "way between 50 and 130" ни индексы, ни партиции не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2019, 20:25 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen And way between 50 and 130 [/src] Поле Way имеет следующий тип number(4,3). 50 and 130 и number(4,3) очепятка (неудачный пример)? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 09:47 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Stax, привет! Опечатка... поле way имеет тип double precision( в Postgres 8 bytes). Данные могут в этом поле повторяться. where выглядит так: Код: plsql 1.
P.S. Select вызывается из Tableau ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 11:28 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen Нужно партиционировать таблицу ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 11:42 |
|
90К партиций
|
|||
---|---|---|---|
#18+
-2-, Цель, чтобы запросы по полю "id" работали быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 12:15 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen Цель, чтобы запросы по полю "id" работали быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 12:46 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen -2-, Цель, чтобы запросы по полю "id" работали быстро. если по ид есть индекс (и селективность не млн-ы), то должно быть быстро ("мгновенно") ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2019, 12:48 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Stax, Дело все в том, что селективность до 8 Mio по одному id ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 01:40 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen селективность до 8 Mio по одному id ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 06:41 |
|
90К партиций
|
|||
---|---|---|---|
#18+
-2-, Данные анализируются всегда только те, которые принадлежат одному id. Потом могут данные из id еще селектироваться по way. Вопрос был, будет ли проблема у оптимайзера с 90 000 партицый? Есть у кого то опыт с таким количеством партиций? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2019, 20:07 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen Вопрос был, будет ли проблема у оптимайзера с 90 000 партицый? Есть у кого то опыт с таким количеством партиций? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 07:52 |
|
90К партиций
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 10:16 |
|
90К партиций
|
|||
---|---|---|---|
#18+
Hans Christian Andersen -2-, Данные анализируются всегда только те, которые принадлежат одному id. Потом могут данные из id еще селектироваться по way. Вопрос был, будет ли проблема у оптимайзера с 90 000 партицый? Есть у кого то опыт с таким количеством партиций? мож проще создать индекс по way (FBI от way), или даже id+way? зи сначала меня насторжил миллиард строк, глянул у нас совсем не последняя табличка (с которой постоянно работают) уже миллиард 200 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 11:18 |
|
90К партиций
|
|||
---|---|---|---|
#18+
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 раз. То есть по сути всё просто. Регламент сбора статистики, регламент архивирования, минимизация занимаемого места, минимизация числа секций, тщательное тестирование и взвешивание за и простив. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:17 |
|
90К партиций
|
|||
---|---|---|---|
#18+
dbms_photoshop 1. Становится весьма важной кляуза storage (initial … next …). Например, если секция занимает мегабайт, а в ней небольшое число строк, то это весьма затратно. Умножь занимаемый размер на 90к. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 20:26 |
|
90К партиций
|
|||
---|---|---|---|
#18+
-2- dbms_photoshop 1. Становится весьма важной кляуза storage (initial … next …). Например, если секция занимает мегабайт, а в ней небольшое число строк, то это весьма затратно. Умножь занимаемый размер на 90к. Я вел речь про то, что если таблица состоит не из одного сегмента а из дестков тысяч, то озвученные параметры могут играть очень существенную роль. С этим несогласие? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2019, 01:23 |
|
90К партиций
|
|||
---|---|---|---|
#18+
dbms_photoshop Hans Christian Andersen Есть у кого то опыт с таким количеством партиций? Говорят, insert all помогает) Ну в смысле при insert BF действительно не работает, а про insert all - работает. [/quot] Только мало кто задумывается насколько наличие индекса влияет на эту самую вставку. Если без индекса порция данных грузится меньше 20 мин, а с индексом более часа, то это уже вызывает определеннное желание лишний раз подумать как от него отказаться. [/quot] А это уже странно - никогда такого не видел. Как может добавление одного индекса увеличить время вставки втрое? Я видел как добавление 50 индексов делало такое, но чтобы одного? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2019, 15:29 |
|
|
start [/forum/topic.php?fid=52&msg=39894936&tid=1881793]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 162ms |
0 / 0 |