powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
9 сообщений из 9, страница 1 из 1
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39834174
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выборка работает по 4-5 секунд и со временем лишь растёт
Код: 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.
SQL ID: dwd0gfn6u68jc Plan Hash: 2656999297

select count(1) 
from
 v$db_pipes t where t.NAME = 'MY_PIPE'


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      4.75       4.75          0          0          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      4.75       4.75          0          0          0           1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 79  
Number of plan statistics captured: 1

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         1          1          1  SORT AGGREGATE (cr=0 pr=0 pw=0 time=4755472 us)
         0          0          0   FIXED TABLE FULL X$KGLOB (cr=0 pr=0 pw=0 time=4755379 us cost=450 size=92 card=1)



Есть ли какая-та возможность либо ускорить данный запрос, либо как-то по другому узнать существует ли пайпа с указанным именем?
...
Рейтинг: 0 / 0
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39834176
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE	11.2.0.4.0	Production"
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
...
Рейтинг: 0 / 0
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39834196
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagorузнать существует ли пайпа с указанным именем?Зачем?
...
Рейтинг: 0 / 0
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39834269
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

Если пайпа существует, необходимо вычитывать её
Код: plsql
1.
2.
3.
4.
5.
declare
  t int;
begin
  t:= dbms_pipe.receive_message('MY_PIPE',300);
end;



Oracle docIf the pipe that you specify when you call RECEIVE_MESSAGE does not already exist, then Oracle implicitly creates the pipe and waits to receive the message. If the message does not arrive within a designated timeout interval, then the call returns and the pipe is removed
...
Рейтинг: 0 / 0
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39835915
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
feagor,

up, актуально
...
Рейтинг: 0 / 0
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39835931
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagorактуальноПодход с произвольносоздаваемыми пайпами равносилен произвольному DDL. Неподходящее решение для оракла, отсюда и проблемы с временем доступа к v$db_pipes.
...
Рейтинг: 0 / 0
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39835953
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай свое представление, которое будет обращаться не к X$KGLOB, а к обычной табличке, которую ты будешь время от времени заполнять из X$KGLOB.
Не каждую же минуту новые каналы создаются
...
Рейтинг: 0 / 0
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39839423
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kglobt03 (sql_id) не заполняется для pipe, соответственно, в X$KGLOB остается KGLNAHSH для быстрой идентификации:
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select index_number, column_name from v$indexed_fixed_column where table_name='X$KGLOB';

INDEX_NUMBER COLUMN_NAME
------------ ------------
           1 KGLNAHSH
           2 KGLOBT03


kglnahsh это 4 последних байта kglnahsv:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select kglnaobj, kglnahsv, kglnahsh, to_char(kglnahsh, 'fm0xxxxxxx') hex_hash, kglhdnsp from x$kglob where kglnaobj in ('MY_PIPE',  'MY_PIPE1', 'MY_PIPE2');

KGLNAOBJ                       KGLNAHSV                           KGLNAHSH HEX_HASH    KGLHDNSP
------------------------------ -------------------------------- ---------- --------- ----------
MY_PIPE2                       53e58fa645a35847070108600b3043ce  187712462 0b3043ce           7
MY_PIPE1                       1bb0749b381c19f0dd4d47413a125cc1  974281921 3a125cc1           7
MY_PIPE                        cdff652a7449f169da313e5685b962d8 2243519192 85b962d8           7


Чтобы понять, как Oracle считает хэш, я использовал debugtrace из Intel Pintools. Я искал 85b962d8:
Код: 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.
 | | | | | | | | | | | | | | | | | | | | | | | | | > kglComputeHash(0x7fc81c58c9a0, 0x7ffc8fb43090, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | > kggmd5Update(0x7ffc8fb42860, 0x7fc81c46ffe0, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | > _intel_fast_memcpy(0x7ffc8fb42868, 0x7fc81c46ffe0, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | <> _intel_fast_memcpy.P(0x7ffc8fb42868, 0x7fc81c46ffe0, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | <> __intel_ssse3_rep_memcpy(0x7ffc8fb42868, 0x7fc81c46ffe0, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | < __intel_ssse3_rep_memcpy+0x0000000020cc returns: 0x7ffc8fb42868
 | | | | | | | | | | | | | | | | | | | | | | | | | | < kggmd5Update+0x0000000000ac returns: 0x7ffc8fb42868
 | | | | | | | | | | | | | | | | | | | | | | | | | | > kggmd5Update(0x7ffc8fb42860, 0x1115e880, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | > _intel_fast_memcpy(0x7ffc8fb4286f, 0x1115e880, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | <> _intel_fast_memcpy.P(0x7ffc8fb4286f, 0x1115e880, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | <> __intel_ssse3_rep_memcpy(0x7ffc8fb4286f, 0x1115e880, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | < __intel_ssse3_rep_memcpy+0x0000000023d7 returns: 0x7ffc8fb4286f
 | | | | | | | | | | | | | | | | | | | | | | | | | | < kggmd5Update+0x0000000000ac returns: 0x7ffc8fb4286f
 | | | | | | | | | | | | | | | | | | | | | | | | | | > kggmd5Update(0x7ffc8fb42860, 0xa0b1ed9c, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | > _intel_fast_memcpy(0x7ffc8fb42870, 0xa0b1ed9c, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | <> _intel_fast_memcpy.P(0x7ffc8fb42870, 0xa0b1ed9c, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | <> __intel_ssse3_rep_memcpy(0x7ffc8fb42870, 0xa0b1ed9c, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | < __intel_ssse3_rep_memcpy+0x000000002048 returns: 0x7ffc8fb42870
 | | | | | | | | | | | | | | | | | | | | | | | | | | < kggmd5Update+0x0000000000ac returns: 0x7ffc8fb42870
 | | | | | | | | | | | | | | | | | | | | | | | | | | > kggmd5Update(0x7ffc8fb42860, 0x7ffc8fb428f8, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | > _intel_fast_memcpy(0x7ffc8fb42878, 0x7ffc8fb428f8, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | <> _intel_fast_memcpy.P(0x7ffc8fb42878, 0x7ffc8fb428f8, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | <> __intel_ssse3_rep_memcpy(0x7ffc8fb42878, 0x7ffc8fb428f8, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | < __intel_ssse3_rep_memcpy+0x000000002246 returns: 0x7ffc8fb42878
 | | | | | | | | | | | | | | | | | | | | | | | | | | < kggmd5Update+0x0000000000ac returns: 0x7ffc8fb42878
 | | | | | | | | | | | | | | | | | | | | | | | | | | > kggmd5Finish(0x7ffc8fb42860, 0, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | > kggmd5Update(0x7ffc8fb42860, 0x12f19600, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | > _intel_fast_memcpy(0x7ffc8fb4287c, 0x12f19600, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | <> _intel_fast_memcpy.P(0x7ffc8fb4287c, 0x12f19600, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | <> __intel_ssse3_rep_memcpy(0x7ffc8fb4287c, 0x12f19600, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | < __intel_ssse3_rep_memcpy+0x000000002958 returns: 0x7ffc8fb4287c
 | | | | | | | | | | | | | | | | | | | | | | | | | | | < kggmd5Update+0x0000000000ac returns: 0x7ffc8fb4287c
 | | | | | | | | | | | | | | | | | | | | | | | | | | | > kggmd5Update(0x7ffc8fb42860, 0x7ffc8fb42830, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | > _intel_fast_memcpy(0x7ffc8fb428a0, 0x7ffc8fb42830, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | <> _intel_fast_memcpy.P(0x7ffc8fb428a0, 0x7ffc8fb42830, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | <> __intel_ssse3_rep_memcpy(0x7ffc8fb428a0, 0x7ffc8fb42830, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | < __intel_ssse3_rep_memcpy+0x0000000027a6 returns: 0x7ffc8fb428a0
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | > kggmd5Process(0x7ffc8fb42d40, 0x7ffc8fb42868, ...)
 | | | | | | | | | | | | | | | | | | | | | | | | | | | | < kggmd5Process+0x000000000a57 returns: 0xda313e56
 | | | | | | | | | | | | | | | | | | | | | | | | | | | < kggmd5Update+0x0000000000ac returns: 0xda313e56
 | | | | | | | | | | | | | | | | | | | | | | | | | | < kggmd5Finish+0x0000000000a3 returns: 0xda313e56
 | | | | | | | | | | | | | | | | | | | | | | | | | < kglComputeHash+0x0000000001b8 returns: 0x85b962d8


Соответственно, в основе алгоритм md5. Задача нахождения хэша сводится к нахождению входных параметров md5.
Вывод gdb для MY_PIPE2:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
(gdb) info break
Num     Type           Disp Enb Address            What
9       breakpoint     keep y   0x0000000010fc72f0 <kggmd5Update>
        breakpoint already hit 210 times
        print $rdx
        x/8xc $rsi
        print $rdi
        c
10      breakpoint     keep y   0x0000000011006ff0 <kglComputeHash>
        breakpoint already hit 2 times
        c
11      breakpoint     keep y   0x0000000010fc7400 <kggmd5Process>
        breakpoint already hit 3 times
        c
12      breakpoint     keep y   0x0000000010fc7170 <kggmd5Finish>
        breakpoint already hit 3 times
        c


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Breakpoint 10, 0x0000000011006ff0 in kglComputeHash ()

Breakpoint 9, 0x0000000010fc72f0 in kggmd5Update ()
$751 = 8
0x7f7d1a42ffe0: 77 'M'  89 'Y'  95 '_'  80 'P'  73 'I'  80 'P'  69 'E'  50 '2'
$752 = 140733063125472

Breakpoint 9, 0x0000000010fc72f0 in kggmd5Update ()
$753 = 1
0x1115e880:     46 '.'  0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'      0 '\000'
$754 = 140733063125472

Breakpoint 9, 0x0000000010fc72f0 in kggmd5Update ()
$755 = 8
0xa07d2e4c:     67 'C'  68 'D'  66 'B'  36 '$'  82 'R'  79 'O'  79 'O'  84 'T'
$756 = 140733063125472

Breakpoint 9, 0x0000000010fc72f0 in kggmd5Update ()
$757 = 4
0x7ffef83c5a78: 7 '\a'  0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'        0 '\000'      0 '\000'
$758 = 140733063125472

Breakpoint 12, 0x0000000010fc7170 in kggmd5Finish ()


В соответствии с http://refspecs.linuxfoundation.org/elf/x86_64-abi-0.99.pdf (page 21):
мной была выдвинута гипотеза, что:
rdi - context
rsi - message
rdx - length(message)
в kggmd5Update (См., например: https://dev.w3.org/libwww/modules/md5/)
На основании гипотезы, я вычислял хэш:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> select dbms_crypto.hash(rawtohex('MY_PIPE1.CDB$ROOT'||chr(7)||chr(0)||chr(0)||chr(0)) ,2) md5 from dual;

MD5
--------------------------------
9B74B01BF0191C3841474DDDC15C123A

SQL> select dbms_crypto.hash(rawtohex('MY_PIPE2.CDB$ROOT'||chr(7)||chr(0)||chr(0)||chr(0)) ,2) md5 from dual;

MD5
--------------------------------
A68FE5534758A34560080107CE43300B

SQL> select dbms_crypto.hash(rawtohex('MY_PIPE.CDB$ROOT'||chr(7)||chr(0)||chr(0)||chr(0)) ,2) md5 from dual;

MD5
--------------------------------
2A65FFCD69F14974563E31DAD862B985


Порядок байтов перевернут также как и для sql_id ( https://carlos-sierra.net/2013/09/12/function-to-compute-sql_id-out-of-sql_text/).
7, вероятно, KGLHDNSP.
Соответственно, можно создать расширенную v$db_pipes с kglnahsh и использовать ее на свой страх и риск, до тех пор, пока Oracle не поменяет алгоритм. Тестировал на 12.2.
...
Рейтинг: 0 / 0
Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
    #39839455
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeaGate,
Жесть, чел, это было круто!
Я только в дань уважения такой работе сделаю расширенную копию v$db_pipes с kglnahsh
Спасибо!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Медленнно отрабатывает запрос к v$db_pipes, в частности к X$KGLOB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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