Oracle mechanics

27.09.2015

12c: Parallel Statement Queuing при PARALLEL_DEGREE_POLICY = MANUAL (по умолчанию)

Filed under: Oracle,PX — Игорь Усольцев @ 00:10
Tags: ,

К большому сожалению заметил, что механизм Parallel Statement Queuing для случая parallel_degree_policy = MANUAL, так красиво задуманный и описанный, например, в How to Achieve Parallel Statement Queuing for an SQL When PARALLEL_DEGREE_POLICY=MANUAL (Doc ID 1902069.1) в новой версии СУБД по-прежнему не работает надёжно

Собственно, практическое наблюдение:

12.1.0.2.@ SQL> @param parallel_degree_policy
 
NAME                                       VALUE               
------------------------------------------ --------------------
parallel_degree_policy                     MANUAL              

SQL> @param parallel_max
 
NAME                                       VALUE               
------------------------------------------ --------------------
parallel_max_servers                       32                  
 
SQL> select status, count(*) from v$px_process group by status;
 
STATUS     COUNT(*)
-------- ----------
IN USE           32

— все PX процессы заняты, что естественно получается не закрыванием курсора параллельного выполнения, открытого в отдельной сессии

Для получения доп.информации можно выставить трейс из вышеуказанного документа:

SQL> alter session set events 'trace[PX_queuing] disk high';

Session altered.

И попытаться выполнить намеренно параллельный несложный запрос с включённым STATEMENT_QUEUING:

SQL> select/*+ parallel(32) STATEMENT_QUEUING */ * from "BIEE"."MV_SOME_MATVIEW";
...
100500 rows selected.

, который ничтоже сумняшеся выполняется (!), как и при включении механизма через параметр _parallel_statement_queuing = true

Что диссонирует с сообщениями установленного трейса:

2015-09-25 11:45:18.283482*:PX_Queuing:kxfxq.c@406:kxfxqOnOrderQueue(): KXFXQSTMTCHK() is TRUE, KXFXQQUEUABLE() is TRUE, pgadep:0, pgatopsql:1, pgapls 0.
SlaveSQL?:NO, Parallized?:YES, DOP:32, userSQL:NO, dbmsSQL:NO, read-mostly?:NO.
2015-09-25 11:45:18.496727*:PX_Queuing:kxfxq.c@787:kxfxqStmtQueuable():
        Statement is queuable? YES -- *

, согласно которым этот запрос должен был быть поставлен в очередь (*)

Непараллельность выполнения честно подтверждает и SQL Monitor:

SQL Monitoring Report

SQL Text
------------------------------
select/*+ parallel(32) STATEMENT_QUEUING */ * from "BIEE"."MV_SOME_MATVIEW"

Global Information
------------------------------
 Status              :  EXECUTING           
 Instance ID         :  1                   
 Session             :  SYS (836:48839)     
 SQL ID              :  97c8nzrr9zq81       
 SQL Execution ID    :  16777220            
 Execution Started   :  09/25/2015 11:45:17 
 First Refresh Time  :  09/25/2015 11:45:18 
 Last Refresh Time   :  09/25/2015 11:45:18 
 Duration            :  79s                 
 Module/Action       :  sqlplus.exe/-       
 Service             :  first         
 Program             :  sqlplus.exe         
 DOP Downgrade       :  100%                -- вот здесь
 Fetch Calls         :  2                   

Global Stats
=====================================================================================
| Elapsed | Queuing |   Cpu   |    IO    |  Other   | Fetch | Buffer | Read | Read  |
| Time(s) | Time(s) | Time(s) | Waits(s) | Waits(s) | Calls |  Gets  | Reqs | Bytes |
=====================================================================================
|    0.30 |    0.00 |    0.06 |     0.03 |     0.21 |     2 |    776 |    1 | 448KB |
=====================================================================================

SQL Plan Monitoring Details (Plan Hash Value=3921458699)
============================================================================================================================================================
| Id   |         Operation         |        Name     |  Rows   | Cost  |   Time    | Start  | Execs |   Rows   | Read | Read  | Activity | Activity Detail |
|      |                           |                 | (Estim) |       | Active(s) | Active |       | (Actual) | Reqs | Bytes |   (%)    |   (# samples)   |
============================================================================================================================================================
| -> 0 | SELECT STATEMENT          |                 |         |       |         1 |     +1 |     1 |        0 |      |       |   100.00 | Cpu (1)         |
|    1 |   PX COORDINATOR          |                 |         |       |           |        |     1 |          |      |       |          |                 |
| -> 2 |    PX SEND QC (RANDOM)    | :TQ10000        |     96M | 42120 |         1 |     +1 |     1 |        0 |      |       |          |                 |
| -> 3 |     PX BLOCK ITERATOR     |                 |     96M | 42120 |         1 |     +1 |     1 |       16 |      |       |          |                 |
| -> 4 |      MAT_VIEW ACCESS FULL | MV_SOME_MATVIEW |     96M | 42120 |         1 |     +1 |     1 |       16 |    1 | 448KB |          |                 |
============================================================================================================================================================

, и соответствующая системная статистика:

SQL> select value from v$sysstat where name = 'Parallel operations downgraded to serial';
 
VALUE
-----
   25 -- до выполнения
 
SQL> select value from v$sysstat where name = 'Parallel operations downgraded to serial';
 
VALUE
-----
   27 -- и после

В плане решения проблемы (обеспечения гарантированного DOP) можно порыться в хралищах MOS (Bug 17821310 : PARALLEL QUERY GETTING DOWNGRADED TO A DOP 1 INSTEAD OF QUEUING,…), либо вернуться к использованию непростого, но по-прежнему надёжного PARALLEL_MIN_PERCENT

Добавить комментарий »

Комментариев нет.

RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Блог на WordPress.com.

%d такие блоггеры, как: