powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Partition + tablespace (table + index)
18 сообщений из 18, страница 1 из 1
Partition + tablespace (table + index)
    #39955280
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Таблицы объемом до 10 мрд. записей
Насколько помню партификация каждой части таблицы и индекса каждой части реализуются в разные tablespace

Прошу подтвердить - верно ли понимаю
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
create table T1						
(						
  date_rep    DATE,						
  data_source NUMBER(2),						
  fil_autokey NUMBER(6),						
  client_id   NUMBER,						
  tobo_id     VARCHAR2(255),						
  mark        VARCHAR2(255),						
  portfolio   VARCHAR2(255),						
  contr_num   VARCHAR2(255),						
  contr_usd   NUMBER,						
  rest_cur    NUMBER,						
  rest_usd    NUMBER,						
  int_rate    NUMBER,						
  account     VARCHAR2(255),						
  code_cur    NUMBER(3),						
  date_open   DATE,						
  date_close  DATE,						
  cards_cnt   NUMBER,						
  sap_bp      VARCHAR2(10),						
  bp_cat      NUMBER,						
partition by range (DATE_REP)(						
          partition MONTH201006	 values less than (To_Date('01/07/2010','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201006,
          partition MONTH201007	 values less than (To_Date('01/08/2010','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201007,
          partition MONTH201008	 values less than (To_Date('01/09/2010','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201008,
          partition MONTH201009	 values less than (To_Date('01/10/2010','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201009,
          partition MONTH201010	 values less than (To_Date('01/11/2010','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201010,
          partition MONTH201011	 values less than (To_Date('01/12/2010','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201011,
          partition MONTH201012	 values less than (To_Date('01/01/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201012,
          partition MONTH201101	 values less than (To_Date('01/02/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201101,
          partition MONTH201102	 values less than (To_Date('01/03/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201102,
          partition MONTH201103	 values less than (To_Date('01/04/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201103,
          partition MONTH201104	 values less than (To_Date('01/05/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201104,
          partition MONTH201105	 values less than (To_Date('01/06/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201105,
          partition MONTH201106	 values less than (To_Date('01/07/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201106,
          partition MONTH201107	 values less than (To_Date('01/08/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201107,
          partition MONTH201108	 values less than (To_Date('01/09/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201108,
          partition MONTH201109	 values less than (To_Date('01/10/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201109,
          partition MONTH201110	 values less than (To_Date('01/11/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201110,
          partition MONTH201111	 values less than (To_Date('01/12/2011','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201111,
          partition MONTH201112	 values less than (To_Date('01/01/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201112,
          partition MONTH201201	 values less than (To_Date('01/02/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201201,
          partition MONTH201202	 values less than (To_Date('01/03/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201202,
          partition MONTH201203	 values less than (To_Date('01/04/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201203,
          partition MONTH201204	 values less than (To_Date('01/05/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201204,
          partition MONTH201205	 values less than (To_Date('01/06/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201205,
          partition MONTH201206	 values less than (To_Date('01/07/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201206,
          partition MONTH201207	 values less than (To_Date('01/08/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201207,
          partition MONTH201208	 values less than (To_Date('01/09/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201208,
          partition MONTH201209	 values less than (To_Date('01/10/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201209,
          partition MONTH201210	 values less than (To_Date('01/11/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201210,
          partition MONTH201211	 values less than (To_Date('01/12/2012','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201211,
          partition MONTH201212	 values less than (To_Date('01/01/2013','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201212,
          partition MONTH201300	 values less than (MaxValue                          ) tablespace DW_DATA_MART_D_201300	
);						
create index I1 on T1(DATE_REP) local (						
          partition MONTH201006	 tablespace DW_DATA_MART_I_201006,		
          partition MONTH201007	 tablespace DW_DATA_MART_I_201007,		
          partition MONTH201008	 tablespace DW_DATA_MART_I_201008,		
          partition MONTH201009	 tablespace DW_DATA_MART_I_201009,		
          partition MONTH201010	 tablespace DW_DATA_MART_I_201010,		
          partition MONTH201011	 tablespace DW_DATA_MART_I_201011,		
          partition MONTH201012	 tablespace DW_DATA_MART_I_201012,		
          partition MONTH201101	 tablespace DW_DATA_MART_I_201101,		
          partition MONTH201102	 tablespace DW_DATA_MART_I_201102,		
          partition MONTH201103	 tablespace DW_DATA_MART_I_201103,		
          partition MONTH201104	 tablespace DW_DATA_MART_I_201104,		
          partition MONTH201105	 tablespace DW_DATA_MART_I_201105,		
          partition MONTH201106	 tablespace DW_DATA_MART_I_201106,		
          partition MONTH201107	 tablespace DW_DATA_MART_I_201107,		
          partition MONTH201108	 tablespace DW_DATA_MART_I_201108,		
          partition MONTH201109	 tablespace DW_DATA_MART_I_201109,		
          partition MONTH201110	 tablespace DW_DATA_MART_I_201110,		
          partition MONTH201111	 tablespace DW_DATA_MART_I_201111,		
          partition MONTH201112	 tablespace DW_DATA_MART_I_201112,		
          partition MONTH201201	 tablespace DW_DATA_MART_I_201201,		
          partition MONTH201202	 tablespace DW_DATA_MART_I_201202,		
          partition MONTH201203	 tablespace DW_DATA_MART_I_201203,		
          partition MONTH201204	 tablespace DW_DATA_MART_I_201204,		
          partition MONTH201205	 tablespace DW_DATA_MART_I_201205,		
          partition MONTH201206	 tablespace DW_DATA_MART_I_201206,		
          partition MONTH201207	 tablespace DW_DATA_MART_I_201207,		
          partition MONTH201208	 tablespace DW_DATA_MART_I_201208,		
          partition MONTH201209	 tablespace DW_DATA_MART_I_201209,		
          partition MONTH201210	 tablespace DW_DATA_MART_I_201210,		
          partition MONTH201211	 tablespace DW_DATA_MART_I_201211,		
          partition MONTH201212	 tablespace DW_DATA_MART_I_201212,		
          partition MONTH201300	 tablespace DW_DATA_MART_I_201300		
);						



Спасибо
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955284
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X

Насколько помню партификация каждой части таблицы и индекса каждой части реализуются в разные tablespace


Как барин пожелает - можно все в разные, можно все в одно, можно часть в разные а часть в одно.

SY.
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955288
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
HOME_X

Насколько помню партификация каждой части таблицы и индекса каждой части реализуются в разные tablespace


Как барин пожелает - можно все в разные, можно все в одно, можно часть в разные а часть в одно.

SY.


Вы хотите сказать что это не сказывается на производительность ?
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955294
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
Вы хотите сказать что это не сказывается на производительность ?

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

Как принималось решение в Вашем случае - мне неизвестно.
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955304
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X

Вы хотите сказать что это не сказывается на производительность ?


И где я это утверждал? Если про производительность, то у тебя число disk controllers = числу tablespaces? И если используется SAN ты можешь гарантировать что все tablespaces на разных LUN? Ну а в общем Oracle дает почти полную свoбоду как задать tablespaces (почему почти - для interval partitioning все что можно это список tablespaces используемых round-robin). А дальше все в руках DBA.

SY.
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955319
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
список tablespaces используемых round-robin

Ну при желании довести тему до абсурда можно, наверное, Робину подкинуть достаточно длинный список, чтобы на несколько лет хватило слоняться :)
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955363
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа andrey_anonymous, SY

Излагаю первопричину
Таблица на 10 млдр. партифицирована по месяцу (tablespace ОДИН = WH_BWARCH_D)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
PARTITION BY RANGE (D_PSTING_DATE)
(  
  PARTITION D_UATOP_ARHIV_20200331 VALUES LESS THAN (TO_DATE(' 2020-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS 
    TABLESPACE WH_BWARCH_D
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (INITIAL          8M 
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  
  PARTITION D_UATOP_ARHIV_20200430 VALUES LESS THAN (TO_DATE(' 2020-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS 
    TABLESPACE WH_BWARCH_D
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          8M
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                BUFFER_POOL      DEFAULT
               ),  



Имею параметрическую таблицу с одной записью
Create table PARAMETERT (dbeg DATE,dend DATE);
Insert into PARAMETERT values (To_Date('01/05/2020','DD/MM/YYYY'),To_Date('31/05/2020','DD/MM/YYYY'));

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Имею обращение 
create or replace view SV_A1 as 
select
        Sum(B.DEB_CRE_LC) F1
   from V_CFA_PAYM B
   where B.PSTNG_DATE between To_Date('01-05-2020','DD-MM-YYYY') and To_Date('31-05-2020','DD-MM-YYYY')

Имею план оптимизации
Plan hash value: 3122804350
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name          | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |               |     1 |    13 |   675K  (1)| 00:00:53 |       |       |
|   1 |  VIEW                     | SV_A1         |     1 |    13 |   675K  (1)| 00:00:53 |       |       |
|*  2 |   FILTER                  |               |       |       |            |          |       |       |
|   3 |    SORT AGGREGATE         |               |     1 |    32 |            |          |       |       |
|   4 |     PARTITION RANGE SINGLE|               |  5873K|   179M|   675K  (1)| 00:00:53 |   112 |   112 |
|*  5 |      TABLE ACCESS FULL    | T_UATOP_ARHIV |  5873K|   179M|   675K  (1)| 00:00:53 |   112 |   112 |
-----------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter(SYS_AUDIT(1,'ADBUS','V_CFA_PAYM','S_CFA_PAYM',3) IS NULL)
   5 - filter(("T"."C_CEEIB_S_UA_DEAL">='CTX00000000000000' AND 
              "T"."C_CEEIB_S_UA_DEAL"<='CTX99999999999999' OR "T"."C_CEEIB_S_UA_DEAL"<='10000099999999999' AND 
              "T"."C_CEEIB_S_UA_DEAL">='10000090000000000') AND "D_PSTING_DATE"<=TO_DATE(' 2020-05-31 00:00:00', 
              'syyyy-mm-dd hh24:mi:ss'))


Производительность устраивает

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Имею обращение 
create or replace view SV_A2 as 
select
        Sum(B.DEB_CRE_LC) f1
   from V_CFA_PAYM B
  where B.PSTNG_DATE between (select DBEG from PARAMETERT) 
                         and (select DEND from PARAMETERT)

Имею план оптимизации
Plan hash value: 2672791175
-------------------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |               |     1 |    13 |    91M  (1)| 01:59:14 |       |       |
|   1 |  VIEW                       | SV_A2         |     1 |    13 |    91M  (1)| 01:59:14 |       |       |
|*  2 |   FILTER                    |               |       |       |            |          |       |       |
|   3 |    SORT AGGREGATE           |               |     1 |    32 |            |          |       |       |
|   4 |     PARTITION RANGE ITERATOR|               |  1864K|    56M|    91M  (1)| 01:59:14 |   KEY |   KEY |
|*  5 |      TABLE ACCESS FULL      | T_UATOP_ARHIV |  1864K|    56M|    91M  (1)| 01:59:14 |   KEY |   KEY |
|   6 |       TABLE ACCESS FULL     | PARAMETERT    |     1 |     8 |     4   (0)| 00:00:01 |       |       |
|   7 |       TABLE ACCESS FULL     | PARAMETERT    |     1 |     8 |     4   (0)| 00:00:01 |       |       |
-------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter(SYS_AUDIT(1,'ADBUS','V_CFA_PAYM','S_CFA_PAYM',3) IS NULL)
   5 - filter(("T"."C_CEEIB_S_UA_DEAL"<='10000099999999999' AND 
              "T"."C_CEEIB_S_UA_DEAL">='10000090000000000' OR "T"."C_CEEIB_S_UA_DEAL">='CTX00000000000000' AND 
              "T"."C_CEEIB_S_UA_DEAL"<='CTX99999999999999') AND "D_PSTING_DATE">= (SELECT "DBEG" FROM 
              "PARAMETERT" "PARAMETERT") AND "D_PSTING_DATE"<= (SELECT "DEND" FROM 
              "PARAMETERT" "PARAMETERT"))

Производительность вдвое втрое дольше первого варианта



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Имею обращение 
create or replace view SV_A3 as 
select
       Sum(B.DEB_CRE_LC) f1
   from V_CFA_PAYM B
  inner join PARAMETERT c 
     on (     B.PSTNG_DATE between c.DBEG and c.DEND 
        )
Имею план оптимизации
Plan hash value: 376747541
 
--------------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name          | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |               |     1 |    13 |    91M  (1)| 01:59:14 |       |       |
|   1 |  VIEW                        | SV_A3         |     1 |    13 |    91M  (1)| 01:59:14 |       |       |
|*  2 |   FILTER                     |               |       |       |            |          |       |       |
|   3 |    SORT AGGREGATE            |               |     1 |    48 |            |          |       |       |
|   4 |     NESTED LOOPS             |               |  4914K|   224M|    91M  (1)| 01:59:14 |       |       |
|   5 |      TABLE ACCESS FULL       | PARAMETERT    |     1 |    16 |     4   (0)| 00:00:01 |       |       |
|   6 |      PARTITION RANGE ITERATOR|               |  4914K|   149M|    91M  (1)| 01:59:14 |   KEY |   KEY |
|*  7 |       TABLE ACCESS FULL      | T_UATOP_ARHIV |  4914K|   149M|    91M  (1)| 01:59:14 |   KEY |   KEY |
--------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter(SYS_AUDIT(1,'ADBUS','V_CFA_PAYM','S_CFA_PAYM',3) IS NULL)
   7 - filter("D_PSTING_DATE">="C"."DBEG" AND ("T"."C_CEEIB_S_UA_DEAL"<='10000099999999999' AND 
              "T"."C_CEEIB_S_UA_DEAL">='10000090000000000' OR "T"."C_CEEIB_S_UA_DEAL">='CTX00000000000000' AND 
              "T"."C_CEEIB_S_UA_DEAL"<='CTX99999999999999') AND "D_PSTING_DATE"<="C"."DEND")



Производительность - нереально долго
иногда оптимизатор включает PARTITION RANGE FULL вместо PARTITION RANGE ITERATOR тогда можно "напокурить" 3-4 дня


Мне необходим вариант с параметрической таблицей (PARAMETERT), константы не применять

Как быть - спасибо
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955369
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откуда берутся фильтры по 5 и 7 операциям?
Это по ходу что-то из области FGAC.
Рассматривать надо в комплексе, а не только "верхушку".
По планам:
- в планах разные оценки мощности datasource.
- третий план не должен отличаться от первого по производительности при условии, что заданные параметры действительно адресуют единственный partition.
- размещение разделов таблицы в различных ТП никак не должно влиять на операции с одним отдельно взятым разделом.
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955416
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous

Откуда берутся фильтры по 5 и 7 операциям?


Имеете в виду это
("T"."C_CEEIB_S_UA_DEAL"<='10000099999999999' AND
"T"."C_CEEIB_S_UA_DEAL">='10000090000000000' OR
"T"."C_CEEIB_S_UA_DEAL">='CTX00000000000000' AND
"T"."C_CEEIB_S_UA_DEAL"<='CTX99999999999999'
)

Суть следующая
SysAdmin - сделал таблицы - пользователю (мне) предоставляется системная view,
в которой реализован СРД и некоторые вторичные фильтры, это какие-то "затычки "
по группе счетов

andrey_anonymous

- в планах разные оценки мощности datasource.

Мне не ясно, что на это повлияло, если можете подсказать - буду благодарен

andrey_anonymous

- третий план не должен отличаться от первого по производительности при условии, что заданные параметры действительно
адресуют единственный partition.


Не сомневайтесь - период един - partition аналогичен
Имею параметрическую таблицу с одной записью
Create table PARAMETERT (dbeg DATE,dend DATE);
Insert into PARAMETERT values (To_Date('01/05/2020','DD/MM/YYYY'),To_Date('31/05/2020','DD/MM/YYYY'));

Обратите внимание - что в первом случае это КОНСТАНТНО - определенный период (partition)
а в третьем варианте - может быть плавающим
Т.е. - возможно нет подключение так называемого динамический плана ?
Полагаю не должно быть циклов = PARTITION RANGE ITERATOR


andrey_anonymous

- размещение разделов таблицы в различных ТП никак не должно влиять на операции с одним отдельно взятым разделом.

Принято - первичный вопрос снят


Спасибо






- размещение разделов таблицы в различных ТП никак не должно влиять на операции с одним отдельно взятым разделом.
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955434
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
SysAdmin - сделал таблицы - пользователю (мне) предоставляется системная view,
в которой реализован СРД и некоторые вторичные фильтры, это какие-то "затычки "
по группе счетов

andrey_anonymous

Мне не ясно, что на это повлияло, если можете подсказать - буду благодарен

На это повлиял итоговый текст запроса после раскрытия view и fgac, который Вы не наблюдаете.
Трасса 10053 должна помочь.

HOME_X
andrey_anonymous
адресуют единственный partition.


Обратите внимание - что в первом случае это КОНСТАНТНО - определенный период (partition)
а в третьем варианте - может быть плавающим
Т.е. - возможно нет подключение так называемого динамический плана ?
Полагаю не должно быть циклов = PARTITION RANGE ITERATOR

Нет. Признаков динамического плана в представленных планах не наблюдаю.

По итераторам:
- Partition range single возможно получить только в том случае, когда на стадии компиляции оптимизатор достоверно определит, что для выполнения запроса потребуется один и только один раздел.
В Вашем случае два константных ключа уложились в один конкретный раздел.
Другой вариант - ограничение на ключ секционирования наложено как строгое равенство.
Ни в какой другой ситуации range single получить нельзя.

- Partition range iterator - основной вариант работы с partitioned table.
Получаете, когда ограничение на ключ секционирования имеет вид between или производные от него. При этом, вообще говоря, следует обращать внимание на pstart и pstop.
Если на фазе компиляции оптимизатор опознает какие конкретно разделы попадают в диапазон поиска - то увидите номера начального и конечного разделов, между которыми идет перебор.
Если раздел по факту требуется один - то pstart=pstop .
Если обе границы диапазона вычисляются в динамике - увидите "Key, Key".
Ну и комбинации, ессно :)

- Partition range ALL получаете в двух ситуациях:
  • ограничения на ключ секционирования не наложены вообще
  • ограничения на ключ секционирования не позволяют свести доступ к одному iterator. Например, это несколько диапазонов, соединенных OR.

А в Вашем случае и текст view неизвестен, и fgac не исключен - заявленное периодическое появление partiton ALL в плане как бы намекает...

Потому исследуйте проблему. Если невозможно добиться содействия DBA, то можно пойти как путем исключения отдельных компонент (view), так и по косвенным - отследить обращения к разделам в v$session_longops, помониторить ожидания, помедитировать на sql_monitor, почитать raw трассу 10046 level 8 или даже 10053 - все, что доступно с Вашим уровнем допуска к системе и способно помочь понять, в чем конкретно затык плана #3 в сравнении с планом #1.

...и да, ограничения на ключ можно наложить через контекст.

...промеждупрочим, для очистки совести попробуйте сравнить объем данных аудита, получаемых при при выполнении (1) и (3)
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955451
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
SQL> --create table dropme_t(pkey, payload) pctfree 0
SQL> --partition by range(pkey) interval (2)  (partition p1 values less than (0) segment creation deferred)
SQL> --as select mod(rownum,5), 'row #'||rownum
SQL> --from dual connect by level < 1e6;
SQL>
SQL> --exec dbms_stats.gather_table_stats(user,'dropme_t',method_opt => 'for all indexed columns size skewonly', granularity => 'ALL');
SQL>
SQL> SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS;
SQL>
SQL> select count(*)
  2    from dropme_t
  3   where pkey > 5
  4  ;

1 row selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 2614479877

------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |          |     1 |    13 |   142   (1)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE           |          |     1 |    13 |            |          |       |       |
|   2 |   PARTITION RANGE ITERATOR|          | 10000 |   126K|   142   (1)| 00:00:01 |     4 |1048575|
|*  3 |    TABLE ACCESS FULL      | DROPME_T | 10000 |   126K|   142   (1)| 00:00:01 |     4 |1048575|
------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("PKEY">5)


Statistics
----------------------------------------------------------
          5  recursive calls
          2  db block gets
        503  consistent gets
...
          1  rows processed

SQL>
SQL> with t(x) as(select 5 from dual)
  2  select count(*)
  3    from t, dropme_t
  4   where pkey > t.x
  5  ;

1 row selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 2286527966

-------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |          |     1 |    13 |   144   (1)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE            |          |     1 |    13 |            |          |       |       |
|   2 |   NESTED LOOPS             |          | 10000 |   126K|   144   (1)| 00:00:01 |       |       |
|   3 |    FAST DUAL               |          |     1 |       |     2   (0)| 00:00:01 |       |       |
|   4 |    PARTITION RANGE ITERATOR|          | 10000 |   126K|   142   (1)| 00:00:01 |     4 |1048575|
|*  5 |     TABLE ACCESS FULL      | DROPME_T | 10000 |   126K|   142   (1)| 00:00:01 |     4 |1048575|
-------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   5 - filter("PKEY">5) -- умная балалайка смержила cte и протащила предикат как литерал.


Statistics
----------------------------------------------------------
          6  recursive calls
          2  db block gets
        505  consistent gets
...
          1  rows processed

SQL>
SQL> with t(x) as(select 5 from dual where rownum = 1) -- поборем умную балалайку
  2  select count(*)
  3    from t, dropme_t
  4   where pkey > t.x
  5  ;

1 row selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 2162797956

-------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |          |     1 |     6 |   688   (1)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE            |          |     1 |     6 |            |          |       |       |
|   2 |   NESTED LOOPS             |          | 50000 |   292K|   688   (1)| 00:00:01 |       |       |
|   3 |    VIEW                    |          |     1 |     3 |     2   (0)| 00:00:01 |       |       |
|*  4 |     COUNT STOPKEY          |          |       |       |            |          |       |       |
|   5 |      FAST DUAL             |          |     1 |       |     2   (0)| 00:00:01 |       |       |
|   6 |    PARTITION RANGE ITERATOR|          | 50000 |   146K|   686   (1)| 00:00:01 |   KEY |1048575| -- нижняя граница будет определена на фазе выполнения
|*  7 |     TABLE ACCESS FULL      | DROPME_T | 50000 |   146K|   686   (1)| 00:00:01 |   KEY |1048575|
-------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - filter(ROWNUM=1)
   7 - filter("PKEY">"T"."X")


Statistics
----------------------------------------------------------
          3  recursive calls
          2  db block gets
        505  consistent gets -- с точки зрения объема работы ничего не поменялось
...
          1  rows processed

SQL>
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955534
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Спасибо за детальное описание и уделенное время
Буду бороться
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955721
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Хотелось бы получить ответ на
- можно ли сделать partition (subpartition) по ПОЛНОМУ логическому условию ?

Т.е. хочу сделать в парт-не subpartition и разнести
логику представления отраженного ранее

Код: plsql
1.
2.
3.
4.
"T"."C_CEEIB_S_UA_DEAL"<='10000099999999999' AND
"T"."C_CEEIB_S_UA_DEAL">='10000090000000000' OR
"T"."C_CEEIB_S_UA_DEAL">='CTX00000000000000' AND
"T"."C_CEEIB_S_UA_DEAL"<='CTX99999999999999'



в отдельные подтаблицы

Эта часть ясна относительно ясна = Range Less
"T"."C_CEEIB_S_UA_DEAL">='10000090000000000'
"T"."C_CEEIB_S_UA_DEAL"<='10000099999999999'

Эта часть под вопросом - получается литерал CTX....
"T"."C_CEEIB_S_UA_DEAL">='CTX00000000000000'
"T"."C_CEEIB_S_UA_DEAL"<='CTX99999999999999'

Хотелось бы иметь в партишине ДВЕ подчасти (не больше !!!!!)
partition by range (DATE_REP)(
partition MONTH201006 values less than (To_Date('01/07/2010','YYYY-MM-DD')) tablespace DW_DATA_MART_D_201006
( subpartition by ??????? - здесь записи по толстому условию
subpartition by ??????? - здесь все остальное
),

Спасибо
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955729
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
HOME_X,

Секционирование по виртуальному столбцу
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39955759
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

А как будет осуществляться select ?
Обыкновенное поле ....
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39956360
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
Хотелось бы иметь в партишине ДВЕ подчасти ( не больше !!!!! )

Мнэээ... А в чем затруднение?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
create table dropme_t(pkey date, skey varchar2(20char), payload varchar2(100char)) pctfree 0
partition by range(pkey) interval (interval '1' month)
subpartition by range(skey)
subpartition template
  ( subpartition p1_1 values less than ('CTX')
  , subpartition p1_2 values less than (maxvalue)
  )
(partition p1 values less than (date'2000-02-01') segment creation deferred)
;
Table created

insert into dropme_t(pkey, skey, payload) values(date'2020-01-01','CTX00000000220000', 'SP_for_2020-01-01_CTX%');
1 row inserted

insert into dropme_t(pkey, skey, payload) values(date'2020-01-01','10000090770000000', 'SP_for_2020-01-01_100%');
1 row inserted

insert into dropme_t(pkey, skey, payload) values(date'2020-02-01','10000090770000000', 'SP_for_2020-02-01_100%');
1 row inserted

insert into dropme_t(pkey, skey, payload) values(date'2020-03-01','CTX00000000220000', 'SP_for_2020-03-01_CTX%');
1 row inserted

select table_name, partition_name, subpartition_name, segment_created, partition_position, subpartition_position 
from user_tab_subpartitions where table_name = 'DROPME_T';

TABLE_NAME PARTITION_ SUBPARTITION_NA SEGMENT_CR PARTITION_ SUBPARTITI
---------- ---------- --------------- ---------- ---------- ----------
DROPME_T   P1         P1_P1_1         NO                  1          1
DROPME_T   P1         P1_P1_2         NO                  1          2
DROPME_T   SYS_P15483 SYS_SUBP15481   YES                 2          1
DROPME_T   SYS_P15483 SYS_SUBP15482   YES                 2          2
DROPME_T   SYS_P15486 SYS_SUBP15484   YES                 3          1
DROPME_T   SYS_P15486 SYS_SUBP15485   NO                  3          2
DROPME_T   SYS_P15489 SYS_SUBP15487   NO                  4          1
DROPME_T   SYS_P15489 SYS_SUBP15488   YES                 4          2
8 rows selected

select * from dropme_t subpartition for(date'2020-01-01','D');

PKEY        SKEY                 PAYLOAD
----------- -------------------- --------------------------------------------------------------------------------
01.01.2020  CTX00000000220000    SP_for_2020-01-01_CTX%

select * from dropme_t subpartition for(date'2020-01-01','A');
PKEY        SKEY                 PAYLOAD
----------- -------------------- --------------------------------------------------------------------------------
01.01.2020  10000090770000000    SP_for_2020-01-01_100%

SQL> 
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39963079
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous

Мнэээ... А в чем затруднение?


Немного потерялся, извините
-- сейчас додумаю Ваше предложение


Еще несколько вопросов

1.В чем существенная разница между Party и SubParty, это отдельные таблицы ?
2.Как строиться LOCAL индекс отдельно по каждому Subparty или один в пределах родительcкого Party
3.Как можно увидеть эти подиндексы
Пример типа
Код: plsql
1.
2.
select table_name, partition_name, subpartition_name, segment_created, partition_position, subpartition_position 
from user_tab_subpartitions where table_name = 'DROPME_T';



4.Если в SubParty до 10-12 млн. записей при этом поисковых ключей (групп) не более 100
и ключи достаточно статичны имеет ли смысл создать bitmap index local

Заранее благодарен !
...
Рейтинг: 0 / 0
Partition + tablespace (table + index)
    #39964683
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
1.В чем существенная разница между Party и SubParty, это отдельные таблицы ?
2.Как строиться LOCAL индекс отдельно по каждому Subparty или один в пределах родительcкого Party
3.Как можно увидеть эти подиндексы
4.Если в SubParty до 10-12 млн. записей при этом поисковых ключей (групп) не более 100
и ключи достаточно статичны имеет ли смысл создать bitmap index local


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

2. Локальный индекс строится по сегменту данных. Соответственно, при использовании subpartitions сегменты локальных индексов будут созданы именно по ним.

3. {dba|all|user}_ind_ partitions, {dba|all|user}_segments
4. Не готов ответить. Зависит от поисковых запросов и методов загрузки данных (последнее особенно критично в старых версиях).
Битмап- индексы при указанном раскладе могут быть выгодны, если запросы хорошо ложатся на операции типа bitmap-or, bitmap_and.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Partition + tablespace (table + index)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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