powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / partition pruning при условии только на subpartition
25 сообщений из 39, страница 1 из 2
partition pruning при условии только на subpartition
    #39591172
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бодрого всем!
Oracle 12.1, есть фактовая таблица:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  CREATE TABLE LOG
   (          
                "RUN_ID" NUMBER(38,0) NOT NULL ENABLE, 
                "CREATE_TS" TIMESTAMP (0) DEFAULT CURRENT_TIMESTAMP(0) NOT NULL ENABLE, 
                куча прочих полей

   ) PCTFREE 0 PCTUSED 92 INITRANS 1 MAXTRANS 255 
  STORAGE(INITIAL 16384 NEXT 106496
)
  PARTITION BY RANGE ("CREATE_TS") INTERVAL (INTERVAL '1' DAY) 
  SUBPARTITION BY HASH ("RUN_ID") 
  SUBPARTITIONS 128




логика заполнения:
RUN_ID - монотонно возрастающее число, идентифицирующее набор строк
CREATE_TS - монотонно возрастающее дата/время
удалений/правок в таблице нет

расчетное наполнение - 2,5 млрд строк в год,
ILM - 3 года хранения, т.е. пик наполнения ожидается на уровне 7,5 млрд строк

Для эффективного отбора из нее (чтобы сработал partition pruning по обоим уровням) необходимо в запросе указывать условия на оба поля - "CREATE_TS" и "RUN_ID"

При этом уже существуют запросы, отбирающие только по "RUN_ID",
план в этом случае выглядит как
Код: plsql
1.
2.
partition range ALL - CREATE_TS
partition range SINGLE - RUN_ID



- т.е. просматривается 1024К-2 субпартиций RUN_ID партиций ("CREATE_TS"), в которых в принципе искомого RUN_ID нет

вопрос: можно ли как-то ускорить эти запросы (в 1024К раз) без переписывания?

Спасибо!
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591194
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка - ускорить не в 1024К раз, а всего в 365*3 - 1 раз (столько лишних партиций накопится за 3 года)
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591234
Alexus12,

Я правильно понял суть вопроса: нужно чтобы оракл отсек ненужные партиции и читал только одну нужную, и при этом в запросе не фильтровать по полю партиционирования, и не менять исходный запрос?

=)
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591236
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alexus12
Код: plsql
1.
partition range SINGLE - RUN_ID

это и означает, что в секции просматривается только одна подсекция. Если было бы RUN_ID in (...), был бы PARTITION HASH INLIST , а полный - это PARTITION HASH ALL . Количество же просмотренных подсекций можно увидеть в STARTS.


Alexus12т.е. просматривается 1024К-2 субпартиций RUN_ID партиций ("CREATE_TS"), в которых в принципе искомого RUN_ID неткак такой вывод вообще был сделан? и считали-то как?
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591239
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Мимо крокодилAlexus12,

Я правильно понял суть вопроса: нужно чтобы оракл отсек ненужные партиции и читал только одну нужную, и при этом в запросе не фильтровать по полю партиционирования, и не менять исходный запрос?

=)ааа, вот теперь понял в чем вопрос


Alexus12,

Alexus12RUN_ID - монотонно возрастающее число, идентифицирующее набор строк

ораклу неоткуда брать информацию, в какой секции лежит какой диапазон RUN_ID (статистика не в счет, т.к. она ничего не гарантирует). В похожих случаях еще чек-контрейнты могли бы помочь, но не в вашем.
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591245
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alexus12,

простейшее решение - это добавить таблицу (CREATE_DAY, RUN_ID_MIN, RUN_ID_MAX) и добавить условия по ней
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591361
Bobby Z.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12вопрос: можно ли как-то ускорить эти запросы (в 1024К раз) без переписывания?
Глобальный индекс на RUN_ID. Он, конечно, создаст хренову кучу проблем в других областях (в частности, как раз ILM, поскольку его придётся каждый раз перестраивать после изменений структуры таблицы, что с Вашими масштабами будет весьма дорого и долго), но зато ускорит выборки по RUN_ID до быстрее некуда. Без переписывания. Это если в лоб отвечать на поставленный вопрос так, как он задан.

А ещё zone map вполне может помочь в данном конкретном случае. Как раз для того и придуманы.
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591383
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Bobby Z.зато ускорит выборки по RUN_IDхм, ТС не говорил ни об уникальности RUN_ID, ни вообще о селективности, может там фулсканы нужны...
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591386
Bobby Z.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderBobby Z.зато ускорит выборки по RUN_IDхм, ТС не говорил ни об уникальности RUN_ID, ни вообще о селективности, может там фулсканы нужны...
Alexus12RUN_ID - монотонно возрастающее число, идентифицирующее набор строк Я сванговал из этого, что селективность достаточно высокая. Да и само название колонки как бы намекает. Хотя может каждый run генерит миллионы строк, тогда индекс, конечно, только хуже сделает.

Кстати, забыл сказать, что Zone Maps доступны только на Exadata и Supercluster, к сожалению, так что могут оказаться неприменимы в силу платформы. К хорошему быстро привыкаешь... :)
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591492
[quot Bobby Z.]xtender
Кстати, забыл сказать, что Zone Maps доступны только на Exadata и Supercluster, к сожалению, так что могут оказаться неприменимы в силу платформы.

Эм... Сейчас читаю про zone maps, не увидел этого ограничения, разве что появилась эта фича только в 12с. Можно ссылочку, где про доступность только на экзе написано? Или вы спутали со storage index?
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591507
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Мимо крокодил,

https://docs.oracle.com/database/121/DBLIC/options.htm#DBLIC152 Zone Maps (Available starting with Oracle Database 12c Release 1 (12.1.0.2); Requires Exadata or Supercluster)
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591512
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Была надежда на что-то типа Zone Maps ... но:

https://docs.oracle.com/database/121/DBLIC/editions.htm#DBLIC109
Zone Maps - Requires the Partitioning option, and Exadata or Supercluster


про селективность:
RUN_ID - монотонно возрастающее число, идентифицирующее набор строк (в общем случае от 1000 строк до разумной бесконечности на один конкретный RUN_ID)
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591519
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alexus12,

В принципе поможет даже локальный индекс по RUN_ID с адекватной статистикой - там где не будет нужного диапазона - будет index range scan, а в нужной подсекции в зависимости от статистики FTS или IRS
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591521
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
IRS по подсекции где нет подходящего диапазона (high value/low value) будет моментальным
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591523
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Читай про трансформацию table expansion
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591525
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перебейте на partition by range (RUN_ID).
Ввиду корреляции между run_id и create_ts subpartitioning не требуется.
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591527
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
правда будет шанс нарваться на ограничение inlist в 1000 элементов при table expansion
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591528
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дополнительное условие по теме можно ли как-то ускорить эти запросы (в 1024К раз) без переписывания:
если известно, что
а) таблица всегда только дописывается, т.е. в старых партициях CREATE_TS не появляются новые run_id
б) под конкретным техн.юзером use case этой таблицы выглядит так:

1) заполнить, вставив набор строк с:
- конкретным run_id
- CREATE_TS, равным CURRENT_TIMESTAMP

2) прочитать (для сбора итогов или иных целей) "только что вставленное" на шаге 1, при этом:
- run_id известен и фильтруется (сейчас так работает тех.запрос)
- CREATE_TS не фильтруется и не известен тех.запросу, но его можно указать не точный, а на сутки назад от CURRENT_TIMESTAMP , т.к. это все равно решит задачу отсечения лишних 365*3 партиций

в этом use case применимым выглядит подклеивание к запросам этого юзера к этой таблице условия во where:
CREATE_TS > systimestamp - 1

сделать это можно, например, навесив vpd policy
https://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#DBSEG98215
Essentially, Oracle Virtual Private Database adds a dynamic WHERE clause to a SQL statement that is issued against the table, view, or synonym to which an Oracle Virtual Private Database security policy was applied.

конечно, это нецелевое ее использование, но - рабочий вариант?
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591532
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

есть adhoc-запросы по таблице, которые отбирают как раз по create_ts, поэтому не хочется...
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591536
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alexus12,

проще и правильнее было бы воспользоваться interval-reference partitioning: создали родительскую таблицу из (CREATE_TS,RUN_ID) секционированную по CREATE_TS, а текущая уже была бы дочерней к ней
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591538
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

table expansion - хороший вариант, но не в нашем случае - читаем записанное почти сразу, см use case выше
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591542
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alexus12xtender,

table expansion - хороший вариант, но не в нашем случае - читаем записанное почти сразу, см use case вышену и что? оверхед-то будет меньше чем в секунду ~1000 логических чтений корня индекса
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591543
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
сейчас то у вас вообще ~1000 фулсканов
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591547
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,
>проще и правильнее было бы воспользоваться interval-reference partitioning

возможно, но:
1) хочется обойтись без изменения таблиц и запросов
2) interval-reference partitioning требует явного неdisabled FK-ключа, на таких объемах очень не хочется...
...
Рейтинг: 0 / 0
partition pruning при условии только на subpartition
    #39591550
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderAlexus12xtender,

table expansion - хороший вариант, но не в нашем случае - читаем записанное почти сразу, см use case вышену и что? оверхед-то будет меньше чем в секунду ~1000 логических чтений корня индекса

да, в такой постановке 1000 логических чтений корня индекса лучше 1000 FTS

насколько это лучше/хуже моего варианта с vpd?
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / partition pruning при условии только на subpartition
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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