powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ограничить выборку по таймауту?
14 сообщений из 64, страница 3 из 3
Ограничить выборку по таймауту?
    #40024392
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoр
Но зачем получать :p_id и подставлять его в log_id > :p_id, если уже rownum < 1e7

Наверное чтобы каждый раз не выполнять rownum < 1e7, не?
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40024954
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,

Если каждый раз не выполнять, то по любому будет читаться 1e7 записей минимум.
Каждый раз кол-во записей будет не меньше предыдущего.
То есть, прочитано будет не меньше записей, чем в моем варианте.
Значит и выигрыша не будет.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40025361
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoр,

Не надо фантазировать.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40025402
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode, у вас есть гипотеза?
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40025544
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoр

Есть протокол. Есть некое внешнее неформализуемое событие.
Нужно просмотреть последние записи протокола, которые могут иметь отношение к этому событию.
Сколько этих записей - не известно.
Начинаю с двухсот. Если не хватает, то увеличиваю, 500, 1000, 5000 ...


Прикольная задача. Типа результат нужен ASAP?

Чтобы был честный таймаут, пропусти запрос

select * from t_log order by log_id desc

через PIPELINE функцию, в которой следи за тайматом.

Через переменную в глобальном контексте можно будет даже завершать сканирование лога по требованию из отдельной сессии, если результат запроса уже нужен.

И немного практической теории.

Нужно установить оптимизатору SQL запросов цель FIRS_ROWS (OPTIMIZER_MODE). И избегать операций, которые для выполнения требуют полного набора данных.

Поскольку приложение клиента может тянуть записи сервера блоками, нужно ограничить размер такого блока 1 по крайней мере для выборки записей, которые нужны ASAP. Тогда система не будет ждать наполнения маршрутки большого блока (которое может и не случиться), а сразу вернёт первые записи. А дальше по желанию, можно будет выбирать оставшиеся записи.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40026104
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Just for fun решение с помощью параллельного concurrent union-all, где в одной части реальный запрос, а во-второй тупо таймаут:
3 seconds
Код: 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.
SQL> ho cat tests/stop/stop1.sql
with
function f_raise return int as
begin
   raise NO_DATA_NEEDED;
end;

v(start_hsecs, delta, flag) as (
  select
    hsecs as start_hsecs,
    0 as delta,
    1 as flag
  from v$timer
  union all
  select
    v.start_hsecs,
    (t.hsecs-v.start_hsecs)/100 as delta,
    case when (t.hsecs-v.start_hsecs)/100 > 3 /* seconds */
           then
             --v.flag*-1 -- return last row
             --v.flag/0 -- raise ORA-01447: divisor is equal to zero
             f_raise()
           else v.flag+1
    end as flag
  from v, v$timer t
  where v.flag>0
   and t.hsecs>=v.start_hsecs
)
select --+ pq_concurrent_union
*
from (
   select
     a
   from (select level a from dual connect by level<15) o2
     union all
   select
     flag
   from v
   where flag<=0
);
/
SQL> set arrays 5
SQL> @tests/stop/stop1.sql

         A
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
ERROR:
ORA-06548: no more rows needed
ORA-06512: at line 5

10 rows selected.

Elapsed: 00:00:03.14



зы. спасибо, SeaGate за фикс с TTT
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40026107
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
стоп, правка - предыдущее еще не работает так как надо из-за PX SELECTOR (он выполняется в координаторе)
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40026120
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
хотя не, все ок - все вроде работает:
Код: 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.
with
function f_raise return int as
begin
   raise NO_DATA_NEEDED;
end;

v(start_hsecs, delta, flag) as (
  select
    hsecs as start_hsecs,
    0 as delta,
    1 as flag
  from v$timer
  union all
  select
    v.start_hsecs,
    (t.hsecs-v.start_hsecs)/100 as delta,
    case when (t.hsecs-v.start_hsecs)/100 > 3 /* seconds */
           then
             --v.flag*-1 -- return last row
             --v.flag/0 -- raise ORA-01447: divisor is equal to zero
             f_raise()
           else v.flag+1
    end as flag
  from v, v$timer t
  where v.flag>0
   and t.hsecs>=v.start_hsecs
)
select --+ pq_concurrent_union
*
from (
   select 
     a
   from (select level a from dual connect by level<1e7) o2
     union all
   select
     flag
   from v
   where flag<=0
);
/

          A
-----------
           1
           2
           3
...skipped...
      6397
      6398
      6399
      6400
ERROR:
ORA-12801: error signaled in parallel query server P001
ORA-06548: no more rows needed
ORA-06512: at line 5



6400 rows selected.

Elapsed: 00:00:04.73

plan
Код: 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.
Plan hash value: 2762812321

--------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                      | Name     | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |    TQ  |IN-OUT| PQ Distrib |  OMem |  1Mem | Used-Mem |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                               |          |        |       |     2 (100)|          |        |      |            |       |       |          |
|   1 |  PX COORDINATOR                                |          |        |       |            |          |        |      |            | 73728 | 73728 |          |
|   2 |   PX SEND QC (RANDOM)                          | :TQ10000 |      3 |    39 |     2   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |       |       |          |
|   3 |    VIEW                                        |          |      3 |    39 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |       |       |          |
|   4 |     UNION-ALL                                  |          |        |       |            |          |  Q1,00 | PCWP |            |       |       |          |
|   5 |      PX SELECTOR                               |          |        |       |            |          |  Q1,00 | PCWP |            |       |       |          |
|   6 |       VIEW                                     |          |      1 |    13 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |       |       |          |
|   7 |        CONNECT BY WITHOUT FILTERING            |          |        |       |            |          |  Q1,00 | PCWP |            | 73728 | 73728 |          |
|   8 |         FAST DUAL                              |          |      1 |       |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |       |       |          |
|   9 |      PX SELECTOR                               |          |        |       |            |          |  Q1,00 | PCWP |            |       |       |          |
|* 10 |       VIEW                                     |          |      2 |    26 |     0   (0)|          |  Q1,00 | PCWP |            |       |       |          |
|  11 |        UNION ALL (RECURSIVE WITH) BREADTH FIRST|          |        |       |            |          |  Q1,00 | PCWP |            |  2048 |  2048 | 2048  (0)|
|* 12 |         FIXED TABLE FULL                       | X$KSUTM  |      1 |    12 |     0   (0)|          |  Q1,00 | PCWP |            |       |       |          |
|  13 |         NESTED LOOPS                           |          |      1 |    38 |     0   (0)|          |  Q1,00 | PCWP |            |       |       |          |
|  14 |          RECURSIVE WITH PUMP                   |          |        |       |            |          |  Q1,00 | PCWP |            |       |       |          |
|* 15 |          FIXED TABLE FULL                      | X$KSUTM  |      1 |    12 |     0   (0)|          |  Q1,00 | PCWP |            |       |       |          |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$9
   3 - SET$2        / from$_subquery$_004@SEL$9
   4 - SET$2
   6 - SEL$11       / O2@SEL$10
   7 - SEL$11
   8 - SEL$11       / DUAL@SEL$11
  10 - SET$1        / V@SEL$12
  11 - SET$1
  12 - SEL$88122447 / X$KSUTM@SEL$4
  13 - SEL$314B0EE1
  15 - SEL$314B0EE1 / X$KSUTM@SEL$8

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

  10 - filter("FLAG"<=0)
  12 - filter((INTERNAL_FUNCTION("CON_ID") AND "INST_ID"=USERENV('INSTANCE')))
  15 - filter(("KSUTMTIM">="V"."START_HSECS" AND INTERNAL_FUNCTION("CON_ID") AND "INST_ID"=USERENV('INSTANCE')))


RTSM report
Код: 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.
SQL Monitoring Report

SQL Text
------------------------------
with function f_raise return int as begin raise NO_DATA_NEEDED; end; v(start_hsecs, delta, flag) as ( select hsecs as start_hsecs, 0 as delta, 1 as flag from v$timer union all select v.start_hsecs, (t.hsecs-v.start_hsecs)/100 as delta, case when (t.hsecs-v.start_hsecs)/100 > 3 /* seconds */ then --v
.flag*-1 -- return last row --v.flag/0 -- raise ORA-01447: divisor is equal to zero f_raise() else v.flag+1 end as flag from v, v$timer t where v.flag>0 and t.hsecs>=v.start_hsecs ) select --+
pq_concurrent_union * from ( select a from (select level a from dual connect by level<1e7) o2 union all select flag from v where flag<=0 )

Error: ORA-12801
------------------------------
ORA-12801: error signaled in parallel query server P001
ORA-06548: no more rows needed
ORA-06512: at line 5


Global Information
------------------------------
 Status              :  DONE (ERROR)
 Instance ID         :  1
 Session             :  SYS (507:8917)
 SQL ID              :  2zcsk1c02wd7z
 SQL Execution ID    :  16777216
 Execution Started   :  12/09/2020 17:26:49
 First Refresh Time  :  12/09/2020 17:26:49
 Last Refresh Time   :  12/09/2020 17:26:53
 Duration            :  4s
 Module/Action       :  SQL*Plus/-
 Service             :  pdb1
 Program             :  sqlplus.exe
 Fetch Calls         :  66

Global Stats
=================================================================
| Elapsed |   Cpu   |    IO    | Fetch | Buffer | Write | Write |
| Time(s) | Time(s) | Waits(s) | Calls |  Gets  | Reqs  | Bytes |
=================================================================
|    4.39 |    4.26 |     0.12 |    66 |     4M |    76 |  15MB |
=================================================================

Parallel Execution Details (DOP=2 , Servers Allocated=2)
==========================================================================================================
|      Name      | Type  | Server# | Elapsed |   Cpu   |    IO    | Buffer | Write | Write | Wait Events |
|                |       |         | Time(s) | Time(s) | Waits(s) |  Gets  | Reqs  | Bytes | (sample #)  |
==========================================================================================================
| PX Coordinator | QC    |         |    0.00 |    0.00 |          |        |       |     . |             |
| p000           | Set 1 |       1 |    0.00 |    0.00 |          |        |       |     . |             |
| p001           | Set 1 |       2 |    4.38 |    4.26 |     0.12 |     4M |    76 |  15MB |             |
==========================================================================================================

SQL Plan Monitoring Details (Plan Hash Value=2762812321)
==========================================================================================================================================================================================
| Id |                    Operation                     |   Name   |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Write | Write |  Mem  | Temp  | Activity | Activity Detail |
|    |                                                  |          | (Estim) |      | Active(s) | Active |       | (Actual) | Reqs  | Bytes | (Max) | (Max) |   (%)    |   (# samples)   |
==========================================================================================================================================================================================
|  0 | SELECT STATEMENT                                 |          |         |      |         5 |     +0 |     3 |     6455 |       |       |     . |     . |          |                 |
|  1 |   PX COORDINATOR                                 |          |         |      |         5 |     +0 |     3 |     6455 |       |       |     . |     . |          |                 |
|  2 |    PX SEND QC (RANDOM)                           | :TQ10000 |       3 |    2 |         3 |     +2 |     2 |    12409 |       |       |     . |     . |          |                 |
|  3 |     VIEW                                         |          |       3 |    2 |         3 |     +2 |     2 |    12409 |       |       |     . |     . |          |                 |
|  4 |      UNION-ALL                                   |          |         |      |         3 |     +2 |     2 |    12409 |       |       |     . |     . |          |                 |
|  5 |       PX SELECTOR                                |          |         |      |         3 |     +2 |     2 |    12409 |       |       |     . |     . |          |                 |
|  6 |        VIEW                                      |          |       1 |    2 |         3 |     +2 |     1 |    12409 |       |       |     . |     . |          |                 |
|  7 |         CONNECT BY WITHOUT FILTERING             |          |         |      |         3 |     +2 |     1 |    12409 |       |       |     . |     . |          |                 |
|  8 |          FAST DUAL                               |          |       1 |    2 |         1 |     +2 |     1 |        1 |       |       |     . |     . |          |                 |
|  9 |       PX SELECTOR                                |          |         |      |           |        |     1 |          |       |       |     . |     . |          |                 |
| 10 |        VIEW                                      |          |       2 |      |         3 |     +2 |     1 |        0 |       |       |     . |     . |          |                 |
| 11 |         UNION ALL (RECURSIVE WITH) BREADTH FIRST |          |         |      |         4 |     +1 |     1 |     566K |    76 |  15MB |  31MB |  16MB |   100.00 | Cpu (4)         |
| 12 |          FIXED TABLE FULL                        | X$KSUTM  |       1 |      |         1 |     +2 |     1 |        1 |       |       |     . |     . |          |                 |
| 13 |          NESTED LOOPS                            |          |       1 |      |         3 |     +2 |  566K |     566K |       |       |     . |     . |          |                 |
| 14 |           RECURSIVE WITH PUMP                    |          |         |      |         3 |     +2 |  566K |     566K |       |       |     . |     . |          |                 |
| 15 |           FIXED TABLE FULL                       | X$KSUTM  |       1 |      |         3 |     +2 |  566K |     566K |       |       |     . |     . |          |                 |
==========================================================================================================================================================================================


1 row selected.

...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40026157
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
Код: plsql
1.
2.
3.
4.
5.
6.
      6399
      6400
ERROR:
ORA-12801: error signaled in parallel query server P001
ORA-06548: no more rows needed
ORA-06512: at line 5


Ну говорил жеж - из pipelined швырять ее надо, а не разбрасывать где попало :)
Воспроизвести аналогичный предложенному эффект при этом можно посредством parallel pipelined.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40026221
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey_anonymous,

pipeline слишком просто и скучно, к тому же требует создания объектов, жесткой привязки к запросу, да и одним чистым pipeline без какого-нибудь трюка типа этого не получится - если внутри pipeline функции у тебя будет "бесконечный" запрос, который "уйдет в себя", то в pl/sql управление не вернется. С PTF (polymorphic table functions) было бы чуточку интереснее, но все равно в-основном скучный кодинг...
а тут все в одном простом запросе. Изначально вообще была более простая идея для хохмы: написать pure sql запрос, который сам закончится по таймауту - это оказалось совсем легко:

Код: 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.
with v(start_hsecs, delta, flag) as (
  select
    hsecs as start_hsecs,
    0 as delta,
    1 as flag
  from v$timer
  union all
  select
    v.start_hsecs,
    (t.hsecs-v.start_hsecs)/100 as delta,
    case when (t.hsecs-v.start_hsecs)/100 > 3 /* seconds */
           then
             v.flag*-1 -- return last row
             --v.flag/0 -- raise ORA-01447: divisor is equal to zero
             --f_raise()
           else v.flag+1
    end as flag
  from v, v$timer t
  where v.flag>0
   and t.hsecs>=v.start_hsecs
)
select *
from v
where flag<0;

START_HSECS      DELTA       FLAG
----------- ---------- ----------
   73402666       3.01    -479586

Elapsed: 00:00:03.01


оказалось слишком просто, поэтому добавил "типа реальный запрос с данными"
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40026223
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В целом, если уж решать такое в реальной задаче для продуктива, то совершенно логично, что делалось бы стандартными средствами (в порядке убывания распространнености решений):
1. обычный запрос + клиентское прерыванием запроса ("ORA-01013: user requested cancel of current operation");
2. Resource manager с лимитами (со своими общеизвестными нюансами);
3. запуск запроса в отдельном процессе/джобе и передача результатов через стандартные же средства межпроцессорного взаимодействия, типа dbms_pipe, с стандартными же вариантами прерывания этого процесса, типа cancel sql
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40027662
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxмож в следующих версиях добавят SAMPLE TIME (шучу конечно)


Есть недокументированный _query_execution_time_limit. Трассируется через oradebug component time_limit. В описании указано "Query execution time limit in seconds". Тесты в 19.3 для определенного класса запросов с разным значением параметра:

Код: 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.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
SQL> @time_limit
SQL> set echo on
SQL>
SQL> conn tc/tc@localhost/pdb
Connected.
SQL>
SQL> set timing on
SQL>
SQL> select count(*) from sys.obj$, sys.obj$;

  COUNT(*)
----------
 529690225

Elapsed: 00:00:11.72
SQL>
SQL> alter session set events 'trace[time_limit]';

Session altered.

Elapsed: 00:00:00.00
SQL>
SQL> alter session set "_query_execution_time_limit"=1;

Session altered.

Elapsed: 00:00:00.00
SQL> select count(*) from sys.obj$, sys.obj$;

  COUNT(*)
----------
   8968150

Elapsed: 00:00:00.80
SQL> select count(*) from sys.obj$, sys.obj$, sys.obj$;

  COUNT(*)
----------
   9604309

Elapsed: 00:00:00.88
SQL> select count(*) from sys.obj$, sys.obj$, sys.obj$, sys.obj$;

  COUNT(*)
----------
   9686108

Elapsed: 00:00:00.91
SQL> alter session set "_query_execution_time_limit"=2;

Session altered.

Elapsed: 00:00:00.00
SQL> select count(*) from sys.obj$, sys.obj$;

  COUNT(*)
----------
  16994136

Elapsed: 00:00:01.60
SQL> select count(*) from sys.obj$, sys.obj$, sys.obj$;

  COUNT(*)
----------
  19177667

Elapsed: 00:00:01.75
SQL> select count(*) from sys.obj$, sys.obj$, sys.obj$, sys.obj$;

  COUNT(*)
----------
  19247635

Elapsed: 00:00:01.82
SQL> alter session set "_query_execution_time_limit"=4;

Session altered.

Elapsed: 00:00:00.00
SQL> select count(*) from sys.obj$, sys.obj$;

  COUNT(*)
----------
  36334656

Elapsed: 00:00:03.20
SQL> select count(*) from sys.obj$, sys.obj$, sys.obj$;

  COUNT(*)
----------
  38554782

Elapsed: 00:00:03.50
SQL> select count(*) from sys.obj$, sys.obj$, sys.obj$, sys.obj$;

  COUNT(*)
----------
  39392890

Elapsed: 00:00:03.64
SQL> alter session set "_query_execution_time_limit"=8;

Session altered.

Elapsed: 00:00:00.00
SQL> select count(*) from sys.obj$, sys.obj$;

  COUNT(*)
----------
  72226768

Elapsed: 00:00:06.40
SQL> select count(*) from sys.obj$, sys.obj$, sys.obj$;

  COUNT(*)
----------
  75848093

Elapsed: 00:00:07.00
SQL> select count(*) from sys.obj$, sys.obj$, sys.obj$, sys.obj$;

  COUNT(*)
----------
  78749244

Elapsed: 00:00:07.28
SQL> alter session set "_query_execution_time_limit"=0;

Session altered.

Elapsed: 00:00:00.00
SQL> select count(*) from sys.obj$, sys.obj$;

  COUNT(*)
----------
 529690225

Elapsed: 00:00:11.72
SQL>
SQL> alter session set events 'trace[time_limit] off';

Session altered.

Elapsed: 00:00:00.00


Наблюдается определенный паттерн в том, через какое время прерывается этот класс запросов:
Код: 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.
[oracle@myhostname trace]$ grep --no-group-separator -A1 opiSetupTimeLimitCtx orcl_ora_2737.trc
        opiSetupTimeLimitCtx(): Row source stop times (current = 2336498755.0000
        00, limitPerNode = 200000.000000, timelimt = 1000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2337299841.0000
        00, limitPerNode = 125000.000000, timelimt = 1000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2338175746.0000
        00, limitPerNode = 90909.090909, timelimt = 1000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2339085960.0000
        00, limitPerNode = 400000.000000, timelimt = 2000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2340686668.0000
        00, limitPerNode = 250000.000000, timelimt = 2000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2342437536.0000
        00, limitPerNode = 181818.181818, timelimt = 2000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2344256865.0000
        00, limitPerNode = 800000.000000, timelimt = 4000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2347457649.0000
        00, limitPerNode = 500000.000000, timelimt = 4000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2350958501.0000
        00, limitPerNode = 363636.363636, timelimt = 4000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2354595996.0000
        00, limitPerNode = 1600000.000000, timelimt = 8000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2360996788.0000
        00, limitPerNode = 1000000.000000, timelimt = 8000000)
        opiSetupTimeLimitCtx(): Row source stop times (current = 2367997594.0000
        00, limitPerNode = 727272.727273, timelimt = 8000000)


Судя по всему, limitPerNode = timelimt / (execution_plan_lines-1) (исключаем SELECT STATEMENT). Если так, то это можно использовать, чтобы получить окончание запроса в точное время.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40027669
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SeaGate
Есть недокументированный _query_execution_time_limit.

хах, забыл про него за 5 с половиной лет
появился в 12.1.0.2: https://www.freelists.org/post/oracle-l/query-execution-time-limit,1
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40027673
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeaGate,

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

тут недавно ссылку давали, так там подсмотрел что в новых версияях отличную команду открылы для дба

ALTER SYSTEM CANCEL SQL

мож из дебагера вытащили наружу

.....
stax
...
Рейтинг: 0 / 0
14 сообщений из 64, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ограничить выборку по таймауту?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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