Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Замедление выборки из базы по сети  [new]
Visermoz
Member

Откуда: Омск
Сообщений: 128
Доброго времени суток. Столкнулся с проблемой: запрос на 100 записей, выполняемый на сервере занимает несколько милисекунд, а тот же самый запрос с другого клиента в сети 5 секунд.
трассировка на сервере:
SQL ID: gc4b808j3q1hp Plan Hash: 170811180

select * 
from
 myscheme.mytable where rownum<:"SYS_B_0"


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      0.00       0.00          0        193          0          99
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.00       0.00          0        193          0          99

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

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
        99         99         99  COUNT STOPKEY (cr=193 pr=0 pw=0 time=4176 us)
        99         99         99   NESTED LOOPS  (cr=193 pr=0 pw=0 time=3872 us cost=104 size=49600 card=100)
        99         99         99    TABLE ACCESS FULL mytable (cr=27 pr=0 pw=0 time=549 us cost=4 size=21681408 card=64528)
        99         99         99    TABLE ACCESS BY INDEX ROWID mytable2 (cr=166 pr=0 pw=0 time=1613 us cost=1 size=160 card=1)
        99         99         99     INDEX UNIQUE SCAN mytable2_PK (cr=67 pr=0 pw=0 time=606 us cost=0 size=0 card=1)(object id 109057)


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       2        0.00          0.00
  SQL*Net message from client                     2        0.00          0.00
  SQL*Net more data to client                     5        0.00          0.00
********************************************************************************


тот же запрос с клиента

SQL ID: 3t519dc08vxu9 Plan Hash: 170811180

select * 
from
 myscheme.mytable where rownum<:"SYS_B_0"


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.01       0.00          0          0          0           0
Fetch        1      0.00       5.00          0        193          0          99
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.01       5.00          0        193          0          99

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

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
        99         99         99  COUNT STOPKEY (cr=193 pr=0 pw=0 time=4105 us)
        99         99         99   NESTED LOOPS  (cr=193 pr=0 pw=0 time=3900 us cost=12 size=4960 card=10)
        99         99         99    TABLE ACCESS FULL mytable (cr=27 pr=0 pw=0 time=677 us cost=2 size=21132384 card=62894)
        99         99         99    TABLE ACCESS BY INDEX ROWID mytable2 (cr=166 pr=0 pw=0 time=1812 us cost=1 size=160 card=1)
        99         99         99     INDEX UNIQUE SCAN mytable2_PK (cr=67 pr=0 pw=0 time=665 us cost=0 size=0 card=1)(object id 109057)


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       1        0.00          0.00
  SQL*Net more data to client                     5        5.00          5.00
  SQL*Net message from client                     1        5.00          5.00
********************************************************************************


Причем, копирование файла по сети происходит с отличной скоростью ~100мб/c
Возможно, какие-то особенности настройки sql*net нужно применить для этой сети?
Или возможно кто-то сталкивался с подобным.
Заранее спасибо
12 ноя 14, 06:45    [16832049]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Visermoz
Member

Откуда: Омск
Сообщений: 128
Интересно, что такая проблема только с таблицами, содержащими пространственные данные mdsys.sdo_geometry
12 ноя 14, 09:01    [16832174]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Elic
Member

Откуда:
Сообщений: 29989
А чему равняется "bytes sent via SQL*Net to client"?j
+
SQL> set autotrace traceonly statistics
12 ноя 14, 09:40    [16832333]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Visermoz
Member

Откуда: Омск
Сообщений: 128
Elic, получаю вот такой результат

SQL> set autotrace traceonly statistics
SQL> select * from myscheme.mytable where rownum<100;

99 rows selected.

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        227  consistent gets
          0  physical reads
          0  redo size
      47903  bytes sent via SQL*Net to client
        931  bytes received via SQL*Net from client
         15  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         99  rows processed
12 ноя 14, 10:07    [16832508]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
KoTTT
Member

Откуда: Екб
Сообщений: 1511
Версии клиента и сервера?
12 ноя 14, 10:30    [16832622]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Visermoz
Member

Откуда: Омск
Сообщений: 128
KoTTT,

Сервер
SQL> select * from sys.v_$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for 64-bit Windows: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production


Клиент 11.2.0.1 win32
12 ноя 14, 10:47    [16832744]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
KoTTT
Member

Откуда: Екб
Сообщений: 1511
Visermoz
Клиент 11.2.0.1 win32

Попробуйте пропатчить до 11.2.0.2 как минимум, но лучше и выше.
12 ноя 14, 11:00    [16832859]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Rb-Sr
Member

Откуда:
Сообщений: 296
Visermoz,
В вашем случае можно попробовать подкорректировать SDU параметры, чтобы минимизировать это ожидание. Но вообще большие выборки объектных полей (spatial в частности) изрядно тормозят, видимо зависит от способносетй клиента
12 ноя 14, 11:04    [16832878]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Visermoz
Member

Откуда: Омск
Сообщений: 128
Большое спасибо за советы. попробую 11.2.0.3 клиент и подобрать SDU у листенера
12 ноя 14, 12:36    [16833677]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9253
Rb-Sr
Visermoz,
В вашем случае можно попробовать подкорректировать SDU параметры, чтобы минимизировать это ожидание. Но вообще большие выборки объектных полей (spatial в частности) изрядно тормозят, видимо зависит от способносетй клиента

1.
11g должно уметь array fetch для лобов. Убедится, что используется

2. Посмотреть на сетевой карте параметр

interrupt moderation / interrupt throttling

Выключить нафиг

3. Можно увеличить SDU, но на 11g он и так по умолчанию уже нормальный. AFAIK
Там еще всякие сенд буффер, ресивер буффер. Можно тоже увеличить, как рекомендуют Oracle note. Но, мне кажется, мертвому припарка

4. Найти нормального студента аникуйшика с горящими глазами или реально опытного сетевика. Постараться включить Jumbo Frames на сетевой карте и в сети. Должно пропорционально (в разы) уменьшить кол-во прерываний от сетевой и поднять скорость. Но х.з. как проверить, что они включились. У меня не получилось.

5. Прерывание зло. Ethernet зло. Выкинуть нафиг Ethernet и взять Infiniband от Мулинет и выключать нафиг прерывания и желательно 12g Oracle. Но я в глаза Infiniband не видел. Ethernet 10 G - дорогая подделка под Мулинет, выкинутые деньги на ветер. Скорость, что 100 Mb, что 1G, что 10 G не растет, AFAIK все стоит колом на обработке прерываниях.

Все остальное жесткий хардкор и мертвому припарка (((
=====
Какая OS на клиенте ?

Статистика изумляет. 1) кол-во пакетов локально и удаленно разное (должно быть одинаковое) 2) вроде всего 5-7 пакетов, т.е. Array fetch для lob включен и/или не тут статистику смотрим 3) 5 Секунд на 7 пакетов - это явный перебор

Возможно interrupt moderation / interrupt throttling на сетевой карте запредельный.

Вообще, IMHO, если Windows, мне кажется так какой-то баг MS на стыке сетевых драйверов и планировщика процессов. Можно попытаться клиенту affinity на процессор задать, прибить его к своему процессору. Но это уже хардкор.
(https://www.sql.ru/forum/1083427-1/kto-nibud-nastraival-tcp-ip-windows-special-dlya-oracle)
12 ноя 14, 12:37    [16833687]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9253
Visermoz
Интересно, что такая проблема только с таблицами, содержащими пространственные данные mdsys.sdo_geometry

мода что ли на пространнственные данные пошла?

я в БД только позавчера пару десятков лямов полигонов заливал, аж база упала ))) вопросы по спашиалу на форуме периодически задаются, Вы вот тоже геометрией интересуетесь... тенденция однако
12 ноя 14, 13:04    [16833888]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Leonid Kudryavtsev
11g должно уметь array fetch для лобов. Убедится, что используется
Оно и выполняется
Из-за него и лезет затык на SQL*Net more data to client -- данные тупо не влазят в одну посылку. Можно, конечно, как посоветовали, выкрутить в максимум SDU (и это должно помочь), но лучше таки доставать только то, что надо
13 ноя 14, 02:39    [16837531]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Visermoz
Member

Откуда: Омск
Сообщений: 128
Спасибо за подсказки и советы. много открыл нового для себя.
Проблему решили изменением топологии сети. соединили через openvpn узлы и всё залетало
13 ноя 14, 06:53    [16837665]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Rb-Sr
Member

Откуда:
Сообщений: 296
Вячеслав Любомудров,

Справедливости ради отмечу, что нужно выкручивать не в максимум, а относительно MSS сети. Цель параметра уменьшить фрагментацию, т.е. кол-во передаваемых tcp пакетов.
Как-то так:
+
To calculate the MSS:
MSS = MTU - TCP header size - IP header size
For TCP over Ethernet:
MTU (or TDU) - 1500 bytes for Ethernet
         TCP - 20 bytes

          IP - 20 byte


В это значение SDU и ставить.
13 ноя 14, 17:53    [16842058]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Leonid Kudryavtsev
1.
11g должно уметь array fetch для лобов. Убедится, что используется
sql*plus не умеет даже в 12.1.0.1:
SQL*Plus: Release 12.1.0.1.0 Production on Thu Nov 13 19:52:56 2014

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

=======  DB_VERSION    11.2.0.4.0
======================================================================
SQL> create table xt_clob as select to_clob(1) c from dual connect by level<=100;

Table created.

SQL> set autot trace stat
SQL> set arrays 150;
SQL> select c from xt_clob;

100 rows selected.


Statistics
----------------------------------------------------------
          6  recursive calls
          0  db block gets
        108  consistent gets
          1  physical reads
          0  redo size
      37815  bytes sent via SQL*Net to client
      17559  bytes received via SQL*Net from client
        202  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        100  rows processed
13 ноя 14, 18:59    [16842414]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
к слову, Oracle SQL Developer умеет, а PL/SQL developer - нет.
тестировал на SQL Developer 4.0.3.16.84 и PL/SQL developer 10.0.5.1710 все с тем же клиентом с OCI - 12.1.0.1
13 ноя 14, 22:37    [16843179]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Rb-Sr
Вячеслав Любомудров,

Справедливости ради отмечу, что нужно выкручивать не в максимум, а относительно MSS сети. Цель параметра уменьшить фрагментацию, т.е. кол-во передаваемых tcp пакетов.
Как-то так:
+
To calculate the MSS:
MSS = MTU - TCP header size - IP header size
For TCP over Ethernet:
MTU (or TDU) - 1500 bytes for Ethernet
         TCP - 20 bytes

          IP - 20 byte


В это значение SDU и ставить.
В какое, 1460? Или таки кратно 1460?
Вот только при максимуме (32k/64k) это практически безразлично. Вот поставлю я 32768. Тогда я смогу отослать 22 полных пакета и последний 648 байт. Т.е. предлагаешь выставлять 32120? Экономия на спичках, а красоты никакой

Да и сам оракл не парится при размере дефолтового SDU: 4k в 7-ке, 2k в 8-ке и 8k в 11.2
14 ноя 14, 02:23    [16843651]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Rb-Sr
Member

Откуда:
Сообщений: 296
Вячеслав Любомудров
Rb-Sr
Вячеслав Любомудров,

Справедливости ради отмечу, что нужно выкручивать не в максимум, а относительно MSS сети. Цель параметра уменьшить фрагментацию, т.е. кол-во передаваемых tcp пакетов.
Как-то так:
+
To calculate the MSS:
MSS = MTU - TCP header size - IP header size
For TCP over Ethernet:
MTU (or TDU) - 1500 bytes for Ethernet
         TCP - 20 bytes

          IP - 20 byte


В это значение SDU и ставить.
В какое, 1460? Или таки кратно 1460?
Вот только при максимуме (32k/64k) это практически безразлично. Вот поставлю я 32768. Тогда я смогу отослать 22 полных пакета и последний 648 байт. Т.е. предлагаешь выставлять 32120? Экономия на спичках, а красоты никакой

Да и сам оракл не парится при размере дефолтового SDU: 4k в 7-ке, 2k в 8-ке и 8k в 11.2

Я согласен с этим сообщением 3928236. По моим тестам 1460 оптимально.
14 ноя 14, 11:21    [16844804]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Там Равниныч умолчал именно про ожидание подтверждение ACK. А это в данном случае (more data to client) и есть самая жопа
Ну и не забывай, при SDU=1460 30 байт будет заголовок SQL*Net, а самих полезных данных только 1430.
А при, например, 5*1460 заголовок будет все теже 30 байт, а полезных данных 1430+4*1460 (если, конечно, их столько будет предоставленно за 1 вызов (call))
14 ноя 14, 12:39    [16845471]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9253
Rb-Sr
....Да и сам оракл не парится при размере дефолтового SDU: 4k в 7-ке, 2k в 8-ке и 8k в 11.2

????
1. Уверены? У меня совершенно другие впечатления от прочтения док.
2. Кроме пакета Ethernet (MTU), есть еще _окно_ (TCP window). Окно может в себя несколько пакетов. Контроль ошибок, перезапросы и передача данных на уровень выше (из драйверов на прикладной уровень) пойдет именно при заполнении _окна_ (упрошенно!!!).
Точно не знаю, но IMHO

Поэтому SDU нужно скорее выставлять не в размер MTU, а в размер TCP window. Т.е., чем больше, тем лучше. Но У МЕНЯ ОЩУЩЕНИЕ, что в 11.2 для BLOB оно уже ДОСТАТОЧНОЕ (и совсем не 8k!). Но сейчас цитату из доки не приведу (((
14 ноя 14, 15:23    [16847076]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9253
Сорри, цитату не так порезал.

Вячеслав Любомудров, согласен. При 32/64 экономия на спичках. И _точно_ не подсчитать. Изменится версия windows, Oracle, какие нибудь фичи сетевые или Net80 и все... +/- пара байт в заголовке и "оптимизация" превратилась в "деоптимизацию".
14 ноя 14, 15:26    [16847102]     Ответить | Цитировать Сообщить модератору
 Re: Замедление выборки из базы по сети  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Leonid Kudryavtsev
Rb-Sr
....Да и сам оракл не парится при размере дефолтового SDU: 4k в 7-ке, 2k в 8-ке и 8k в 11.2

????
1. Уверены? У меня совершенно другие впечатления от прочтения док.
2. Кроме пакета Ethernet (MTU), есть еще _окно_ (TCP window). Окно может в себя несколько пакетов. Контроль ошибок, перезапросы и передача данных на уровень выше (из драйверов на прикладной уровень) пойдет именно при заполнении _окна_ (упрошенно!!!).
Точно не знаю, но IMHO

Поэтому SDU нужно скорее выставлять не в размер MTU, а в размер TCP window. Т.е., чем больше, тем лучше. Но У МЕНЯ ОЩУЩЕНИЕ, что в 11.2 для BLOB оно уже ДОСТАТОЧНОЕ (и совсем не 8k!). Но сейчас цитату из доки не приведу (((
ID 67983.1
15 ноя 14, 07:50    [16850341]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить