Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Замена плана запроса на план с Parallel хинтом / 25 сообщений из 26, страница 1 из 2
30.11.2021, 15:29
    #40116177
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Есть приложение с закрытым ядром .
В нем есть генерируемый запрос, который считает данные по одной табличке через count(*).
Данных в табличке собралось очень много (1млрд). И запрос соответственно начал подвисать. А приложуха отваливаться из-за различных таймаутов.

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

А на быстрое решение пытался сделать 2 варианта.

1. Подмена запроса
через
Код: plsql
1.
sys.dbms_advanced_rewrite.declare_rewrite_equivalence

попытался перехватить запрос, и добавить ему условие
Код: plsql
1.
and 1=0



На простых запросах получилось это сделать, но именно на моем запросе, с использованием bind переменных и несколькими подзапросами, данный механизм отказался работать.

2. Добавление хинта PARALLEL(N)
После нескольких экспериментов, получилось сильно ускорить запрос только с помощью хинта parallel(32). Вместо 3-5 минут, выполняется за 10-40 секунд.
Теперь пытаюсь подменить план запроса, baseline создается на этот запрос, но план все равно используется старый.
При удалении родного baseline, он просто пересоздается, и опять использует свой план.

Использую следующий механизм из одного форума:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
-- загрузка плана настроенного запроса
declare
  l_sql_id_src varchar2(13)    :='31w6zb213gdfs';   -- sql_id образца
  l_plan_hash_value_src number := 4059279870;       -- plan_hash_value образца
  l_sql_id_trg  varchar2(13)   :='318dkg1gq87gm';   -- sql_id настраиваемого запроса
  l_sql_text_trg clob;  
  l_res number;  
begin
  -- текст запроса для настройки
  select a.sql_fulltext into l_sql_text_trg
    from v$sqlarea a 
   where a.sql_id = l_sql_id_trg;
  -- загрузка плана и создание SQL plan baseline
  l_res := dbms_spm.load_plans_from_cursor_cache( 
              sql_id => l_sql_id_src, 
              plan_hash_value => l_plan_hash_value_src, 
              sql_text => l_sql_text_trg);
  dbms_output.put_line(l_res);  
end;  



что не хватает ему?
или может есть другие способы заставить не редактируемый запрос работать с параллельностью?
...
Рейтинг: 0 / 0
30.11.2021, 15:31
    #40116178
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Да, версия:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
...
Рейтинг: 0 / 0
30.11.2021, 16:15
    #40116194
Asmodeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz,

У SQL Baseline есть ряд ограничений (DocID: 2308153.1). И есть баги, связанные, в частности, с вызовом из PL/SQL с биндами. Так же есть документ многообещающим названием "How to Diagnose Issues where a SQL Plan Management (SPM) Baseline is Not Used" (DocID: 1663691.1).
...
Рейтинг: 0 / 0
30.11.2021, 16:52
    #40116214
Asmodeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz,

И вообще, что выдает БД после применения "механизма с форума"?
Код: plsql
1.
SQL> select * from DBA_SQL_PLAN_BASELINES;
...
Рейтинг: 0 / 0
30.11.2021, 17:17
    #40116225
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz,

1. вместо подмены запроса, можно просто навесить ивент останавливающий данный запрос через control_c:
https://www.freelists.org/post/oracle-l/sql-text-during-parsing,30
https://twitter.com/dbms_xtender/status/1392499158368624641
Код: plsql
1.
2.
alter system set events 'trace [SQL_Compiler.*][sql: 99g4t6h9kfumw] {callstack: 
fname opiParse} controlc_signal()'  ;



2. вместо сложного бейслайна(еще и требующего купленного пака), лучше бы воспользовались простым и доступным для всех SQL Patch - он чуть надежнее в данном случае, т.к. при парсе просто и безусловно добавляет хинты. Но в целом, все равно вам нужен разрешенный parallel query на уровне сессии.
...
Рейтинг: 0 / 0
30.11.2021, 17:40
    #40116236
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Sayan Malakshinov,

Код: sql
1.
alter system set events 'trace [SQL_Compiler.*][sql: 99g4t6h9kfumw] {callstack: fname opiParse} controlc_signal()'  ;



А что он возвращает в ответ после перехвата?
Потому-что сейчас приложение ругается, что не может выполнить запрос этот.
Но отрабатывает быстро)
...
Рейтинг: 0 / 0
30.11.2021, 17:55
    #40116245
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz,

ORA-01013: user requested cancel of current operation.

К сожалению не подходит, так как в этой сессии это не единственный запрос, и ее не нужно всю грохать.
...
Рейтинг: 0 / 0
30.11.2021, 18:25
    #40116258
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Asmodeus,

SQL_HANDLE SQL_295037bb56d51e83 SQL_TEXT <CLOB> PLAN_NAME SQL_PLAN_2kn1rrdbda7n3a66eba26 CREATOR USERYORIGIN MANUAL-LOAD-FROM-CURSOR-CACHE PARSING_SCHEMA_NAME USERX DESCRIPTION VERSION 12.2.0.1.0 CREATED 30-NOV-21 09.19.42.000000 PM LAST_MODIFIED 30-NOV-21 09.19.42.000000 PM LAST_EXECUTED LAST_VERIFIED ENABLED YES ACCEPTED YES FIXED YES REPRODUCED YES AUTOPURGE YES ADAPTIVE NO OPTIMIZER_COST 83888 MODULE PL/SQL Developer ACTION Command Window - New EXECUTIONS 1 ELAPSED_TIME 73157769 CPU_TIME 59236650 BUFFER_GETS 3064030 DISK_READS 334 DIRECT_WRITES 0 ROWS_PROCESSED 1 FETCHES 1 END_OF_FETCH_COUNT
...
Рейтинг: 0 / 0
30.11.2021, 19:52
    #40116277
Asmodeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz,

А в сесси, в которой работает приложение, разрешено параллельное выполнение (как Саян спрашивал)?
...
Рейтинг: 0 / 0
02.12.2021, 08:27
    #40116609
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Asmodeus
dimyaz,

А в сесси, в которой работает приложение, разрешено параллельное выполнение (как Саян спрашивал)?


namevaluerecovery_parallelism 0fast_start_parallel_rollback FALSEparallel_min_percent 0parallel_min_servers 176parallel_max_servers 1760parallel_instance_group parallel_execution_message_size 16384parallel_degree_policy MANUALparallel_adaptive_multi_user FALSEparallel_threads_per_cpu 2parallel_min_time_threshold AUTOparallel_degree_limit CPUparallel_force_local FALSEparallel_servers_target 704containers_parallel_degree 65535
...
Рейтинг: 0 / 0
02.12.2021, 08:32
    #40116611
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Asmodeus,
Код: sql
1.
2.
select PDML_ENABLED, PDML_STATUS, PDDL_STATUS, PQ_STATUS FROM V$session 
where sid = 3715


PDML_ENABLED PDML_STATUS PDDL_STATUS PQ_STATUSNO DISABLED ENABLED ENABLED
...
Рейтинг: 0 / 0
02.12.2021, 08:34
    #40116612
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz,

Вы хинты бейслайна то проверили? Уверены, что там есть хинт parallel?
...
Рейтинг: 0 / 0
02.12.2021, 08:36
    #40116613
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
А вообще я выше сказал, сделали бы sql патч с хинтом parallel и не парились...
...
Рейтинг: 0 / 0
02.12.2021, 08:37
    #40116614
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz,

parallel_min_servers=176? Жестоко...
...
Рейтинг: 0 / 0
02.12.2021, 08:40
    #40116616
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Sayan Malakshinov
dimyaz,

Вы хинты бейслайна то проверили? Уверены, что там есть хинт parallel?
Код: plsql
1.
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(PLAN_NAME => '...', FORMAT => 'OUTLINE'));
...
Рейтинг: 0 / 0
02.12.2021, 08:45
    #40116617
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz


На простых запросах получилось это сделать, но именно на моем запросе, с использованием bind переменных и
емнип, в таких случаях рерайтить надо часть запроса до биндов (если, конечно, они в конце)
...
Рейтинг: 0 / 0
02.12.2021, 12:06
    #40116680
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Sayan Malakshinov
dimyaz


На простых запросах получилось это сделать, но именно на моем запросе, с использованием bind переменных и
емнип, в таких случаях рерайтить надо часть запроса до биндов (если, конечно, они в конце)


Пробовал, не получается.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
drop table test_t1;
create table test_t1 as 
(
      select level id, 1 + level c2, 1 status, ' ' err   from dual
      connect by level <= 1000
      union all
      select 1000+level id, 1 + level c2, 2 status, ' ' err   from dual
      connect by level <= 500
      union all
      select 999999 id, 999999 c2, 1 status, 'ERROR' err   from dual

);



Пусть это будет наш целевой запрос для перехвата:
Код: sql
1.
2.
3.
4.
select count(*)
from test_t1
where test_t1.status = 1
and err <> ' ';



COUNT(*)1

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
begin

  begin
      sys.DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE ('dy_rewrite_test4');
  exception 
      when others then 
        null;
  end;

  begin
      sys.dbms_advanced_rewrite.declare_rewrite_equivalence
      (
          name             => 'dy_rewrite_test4',
          source_stmt      => 'select count(*) from test_t1 where test_t1.status = 1',
          destination_stmt => 'select 0 from dual',
          validate         => false,
          rewrite_mode     => 'GENERAL'
      );
  end;

end;



Код: plsql
1.
2.
3.
4.
select count(*)
from test_t1
where test_t1.status = 1
;



COUNT(*)0

Код: plsql
1.
2.
3.
4.
5.
select count(*)
from test_t1
where test_t1.status = 1
and err <> ' '
;



COUNT(*)1
...
Рейтинг: 0 / 0
02.12.2021, 12:41
    #40116697
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Sayan Malakshinov
Sayan Malakshinov
dimyaz,

Вы хинты бейслайна то проверили? Уверены, что там есть хинт parallel?
Код: plsql
1.
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(PLAN_NAME => '...', FORMAT => 'OUTLINE'));



Да, план, тот который я ожидаю

и внизу дописан такой нот

Note
-----
- dynamic statistics used: dynamic sampling (level=7)
- Degree of Parallelism is 32 because of hint
...
Рейтинг: 0 / 0
02.12.2021, 13:16
    #40116713
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
А так?
dimyaz
Код: sql
1.
2.
3.
4.
5.
6.
7.
  begin
      sys.dbms_advanced_rewrite.declare_rewrite_equivalence
      (
...
--          rewrite_mode     => 'GENERAL'
rewrite_mode     => 'RECURSIVE'
      );

...
Рейтинг: 0 / 0
02.12.2021, 13:42
    #40116717
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
andrey_anonymous
А так?
dimyaz
Код: sql
1.
2.
3.
4.
5.
6.
7.
  begin
      sys.dbms_advanced_rewrite.declare_rewrite_equivalence
      (
...
--          rewrite_mode     => 'GENERAL'
rewrite_mode     => 'RECURSIVE'
      );



тоже пробовал и RECURSIVE и TEXT_MATCH

не срабатывает, даже на это примере
...
Рейтинг: 0 / 0
02.12.2021, 13:45
    #40116718
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Sayan Malakshinov
А вообще я выше сказал, сделали бы sql патч с хинтом parallel и не парились...


Это помогло

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE
  l_patch_name  VARCHAR2(32767);
BEGIN
  l_patch_name := SYS.DBMS_SQLDIAG.create_sql_patch(
    sql_id    => 'c84nuf4kkb684',
    hint_text => 'PARALLEL(32)',
    name      => 'c84nuf4kkb684_PARALLEL(32)');
END;



Страничка открывает быстро.
но теперь по перформансу пошли конкуренции
...
Рейтинг: 0 / 0
02.12.2021, 15:02
    #40116728
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz
Sayan Malakshinov
пропущено...
Код: plsql
1.
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(PLAN_NAME => '...', FORMAT => 'OUTLINE'));



Да, план, тот который я ожидаю

и внизу дописан такой нот

Note
-----
- dynamic statistics used: dynamic sampling (level=7)
- Degree of Parallelism is 32 because of hint
в секции аутлайн хинт parallel был? Я не план, а хинт спрашивал
...
Рейтинг: 0 / 0
02.12.2021, 15:32
    #40116738
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
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.
Outline Data
-------------
 
  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('12.2.0.1')
      DB_VERSION('12.2.0.1')
      OPT_PARAM('optimizer_dynamic_sampling' 7)
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$8C4C4DD2")
      ELIMINATE_JOIN(@"SEL$44CD65FF" "TABLE1"@"SEL$4")
      OUTLINE_LEAF(@"SEL$6DE12525")
      MERGE(@"SEL$BF82FE11" >"SEL$1")
      OUTLINE(@"SEL$44CD65FF")
      MERGE(@"SEL$54D64B3C" >"SEL$8")
      OUTLINE(@"SEL$1")
      OUTLINE(@"SEL$BF82FE11")
      MERGE(@"SEL$6BD737F4" >"SEL$7")
      OUTLINE(@"SEL$8")
      OUTLINE(@"SEL$54D64B3C")
      MERGE(@"SEL$64EAE176" >"SEL$4")
      OUTLINE(@"SEL$7")
      OUTLINE(@"SEL$6BD737F4")
      MERGE(@"SEL$5" >"SEL$6")
      OUTLINE(@"SEL$4")
      OUTLINE(@"SEL$64EAE176")
      MERGE(@"SEL$2" >"SEL$3")
      OUTLINE(@"SEL$6")
      OUTLINE(@"SEL$5")
      OUTLINE(@"SEL$3")
      OUTLINE(@"SEL$2")
      INDEX_FFS(@"SEL$6DE12525" "TABLE2"@"SEL$6" ("TABLE2"."IS_ACTIVE" "TABLE2"."ID"))
      FULL(@"SEL$6DE12525" "TABLE1"@"SEL$5")
      FULL(@"SEL$6DE12525" "TABLE3"@"SEL$5")
      LEADING(@"SEL$6DE12525" "TABLE2"@"SEL$6" "TABLE1"@"SEL$5" "TABLE3"@"SEL$5")
      USE_HASH(@"SEL$6DE12525" "TABLE1"@"SEL$5")
      USE_HASH(@"SEL$6DE12525" "TABLE3"@"SEL$5")
      PQ_DISTRIBUTE(@"SEL$6DE12525" "TABLE1"@"SEL$5" HASH HASH)
      PX_JOIN_FILTER(@"SEL$6DE12525" "TABLE1"@"SEL$5")
      PQ_DISTRIBUTE(@"SEL$6DE12525" "TABLE3"@"SEL$5" BROADCAST NONE)
      INDEX(@"SEL$8C4C4DD2" "TABLE3"@"SEL$2" ("TABLE3"."STATUS_ID" "TABLE3"."TENANT_ID" 
              "TABLE3"."PROCESS_DEF_ID" "TABLE3"."ID"))
      INDEX(@"SEL$8C4C4DD2" "TABLE4"@"SEL$2" ("TABLE4"."PROCESS_ID"))
      FULL(@"SEL$8C4C4DD2" "TABLE5"@"SEL$3")
      LEADING(@"SEL$8C4C4DD2" "TABLE3"@"SEL$2" "TABLE4"@"SEL$2" "TABLE5"@"SEL$3")
      USE_NL(@"SEL$8C4C4DD2" "TABLE4"@"SEL$2")
      NLJ_BATCHING(@"SEL$8C4C4DD2" "TABLE4"@"SEL$2")
      USE_HASH(@"SEL$8C4C4DD2" "TABLE5"@"SEL$3")
      PQ_DISTRIBUTE(@"SEL$8C4C4DD2" "TABLE4"@"SEL$2" RANDOM NONE)
      PQ_DISTRIBUTE(@"SEL$8C4C4DD2" "TABLE5"@"SEL$3" HASH HASH)
      SWAP_JOIN_INPUTS(@"SEL$8C4C4DD2" "TABLE5"@"SEL$3")
      END_OUTLINE_DATA
  */

...
Рейтинг: 0 / 0
02.12.2021, 16:13
    #40116751
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
dimyaz,

ну, что, собственно, и следовало ожидать - нет хинта - нет параллели. Вместо создание бейслайна через копирование, надо было создавать со своим, вручную созданным списком хинтов...

ну и про переписывание: сейчас этот кривой и ограниченный rewrite equivalence не актуален. Пользуйтесь SQL Translation framework : он поддерживает бинды.

Простой пример:
DBMS_SQL_TRANSLATOR
Код: 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.
/*
drop table test_t1 purge;
*/
set echo on feed on;

create table test_t1 as 
(
      select level id, 1 + level c2, 1 status, ' ' err   from dual
      connect by level <= 1000
      union all
      select 1000+level id, 1 + level c2, 2 status, ' ' err   from dual
      connect by level <= 500
      union all
      select 999999 id, 999999 c2, 1 status, 'ERROR' err   from dual

);

declare
  profile_name varchar2(30):='XT_TRANSLATE_PROFILE';
  PROFILE_DOES_NOT_EXIST exception;
  pragma EXCEPTION_INIT(PROFILE_DOES_NOT_EXIST, -24252);
BEGIN
  begin
       DBMS_SQL_TRANSLATOR.DROP_PROFILE(profile_name);
  exception
      WHEN PROFILE_DOES_NOT_EXIST THEN NULL; /* ignore if non-existant */
  end;

  DBMS_SQL_TRANSLATOR.CREATE_PROFILE (profile_name);
END;
/

BEGIN
DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION (
    profile_name => 'XT_TRANSLATE_PROFILE',
    sql_text => q'[select count(*) from test_t1 where test_t1.status = :B and err <> ' ']',
    translated_text => 'select count(*) from test_t1 where 1=0 and status=:B',
    enable => TRUE);
END;
/
 
--select * from all_sql_translation_profiles;
var B number;
exec :B:=1;

ALTER SESSION SET SQL_TRANSLATION_PROFILE = XT_TRANSLATE_PROFILE;
alter session set events = '10601 trace name context forever, level 32';

select count(*) from test_t1 where status=1;
select count(*) from test_t1 where test_t1.status = :B;
select count(*) from test_t1 where test_t1.status = :B and err <> ' ';


output
Код: 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.
SQL> BEGIN
  2  DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION (
  3      profile_name => 'XT_TRANSLATE_PROFILE',
  4      sql_text => q'[select count(*) from test_t1 where test_t1.status = :B and err <> ' ']',
  5      translated_text => 'select count(*) from test_t1 where 1=0 and status=:B',
  6      enable => TRUE);
  7  END;
  8  /

PL/SQL procedure successfully completed.

SQL> var B number;
SQL> exec :B:=1;

PL/SQL procedure successfully completed.

SQL> ALTER SESSION SET SQL_TRANSLATION_PROFILE = XT_TRANSLATE_PROFILE;

Session altered.

SQL> alter session set events = '10601 trace name context forever, level 32';

Session altered.

SQL> select count(*) from test_t1 where status=1;

  COUNT(*)
----------
      1001

SQL> select count(*) from test_t1 where test_t1.status = :B;

  COUNT(*)
----------
      1001

SQL> select count(*) from test_t1 where test_t1.status = :B and err <> ' ';

  COUNT(*)
----------
         0

...
Рейтинг: 0 / 0
08.12.2021, 13:43
    #40118396
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Замена плана запроса на план с Parallel хинтом
Sayan Malakshinov,

У меня почему-то работает только в SQLPlus это
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Замена плана запроса на план с Parallel хинтом / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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