|
Иногда можно услышать жалобы, что
медленно происходит соединение клиентов с
сервером. Важно, на мой взгляд понять, где
проблема. Бывают случаи, когда из-за неверно
настроенного сетевого окружения слишком
долго определяются ip адреса по имени хоста.
И тому подобные вещи. Надеюсь после
прочтения этой статьи, будет ясно, как
локализовать проблему.
Конфигурация: Windows client 9.2, Oracle DB 9.2 on Linux
sqlnet.ora на клиенте (см. также Где
и в каком порядке ищутся файлы сетевой
конфигурации клиента sqlnet.ora и tnsnames.ora ?):
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
TRACE_LEVEL_CLIENT = 16
TRACE_DIRECTORY_CLIENT = c:\tmp
LOG_DIRECTORY_CLIENT = c:\tmp
TRACE_TIMESTAMP_<CLIENT/LISTENER/SERVER> = ON
В качестве клиентского приложения используем
sqlplus, будем выполнять запрос:
select 'x' from dual;
Общий формат trace файла примерно такой:
[21-APR-2004 19:39:12:984] nigini: entry
Для нас важно, что бы было проставлено
время. Даже просто просматривая по времени
trace файл, можно обнаружить скачок. Например,
я указал у себя заведомо несуществующий
хост. Получил понятное дело
ERROR:
ORA-12535: TNS:operation timed out
Но только благодаря trace файлу я узнал, что
при моих настройках на определение этого
факта требуется более 30 сек.
[22-APR-2004 15:13:27:984] nttcni: trying to connect to socket 668.
...
[22-APR-2004 15:13:50:937] ntt2err: soc 668 error - operation=1, ntresnt[0]=505, ntresnt[1]=60, ntresnt[2]=0
Итак, рассмотрим, что же мы можем увидеть в
trace файле. Процесс подсоединения можно
представить себе так:

Рассмотрим что же реально происходит (мой trace
файл)
| Обращаем внимание на те
конфигурационные файлы что реально
используются при соединении |
|
| [21-APR-2004 19:39:13:015] nigini: entry |
Точка входа |
| [21-APR-2004 19:39:13:015] nttbnd2addr: looking up IP addr for host: rac2pub |
Определяем IP адрес |
| [21-APR-2004 19:39:13:046] nttcni: connected on ipaddr 192.168.10.227
[21-APR-2004 19:39:13:046] nsopen: transport is open |
Соединяемся с сервером |
| [21-APR-2004 19:39:13:046] nsnainit: entry |
Выбираем протокол шифрования |
| [21-APR-2004 19:39:13:171] nscon: sending NSPTCN packet |
Посылаем Connect packet database
listener'у. |
| [21-APR-2004 19:39:13:187] nscon: got NSPTRS packet |
Получаем Resend packet |
| [21-APR-2004 19:39:13:187] nscon: sending NSPTCN packet |
Отправляем Connect packet
серверному процессу |
| [21-APR-2004 19:39:13:187] nscon: got NSPTAC packet |
получаем Accept packet |
| [21-APR-2004 19:39:13:203] nsdofls: sending NSPTDA packet |
Посылаем пакет Data (не знаю зачем) |
| [21-APR-2004 19:39:13:312] nioqsn: entry |
Точка входа процедуры логина |
| [21-APR-2004 19:39:13:312] nsdofls: sending NSPTDA packet |
Посылаем пакет Data c информацией
про себя
.%......
........
..IBMPC/
WIN_NT-8
.1.0.
Получаем в ответ пакет и информацией
от сервера
|........
|.....Lin
|uxi386/L
|inux-2.0
|.34-8.1.
|0....... |
| [21-APR-2004 19:39:13:312] nsrdr: got NSPTDA packet |
Получаем пакет Data (не знаю зачем) |
| [21-APR-2004 19:39:13:500] nsrdr: got NSPTDA packet |
Посылаем пакет Data с
дополнительной информацией:
..system
.....AUT
H_TERMIN
AL.....D
SVOLK...
......AU
TH_PROGR
AM_NM...
..sqlplu
s.exe...
......AU
TH_MACHI
NE.....D
SGROUP\D
SVOLK...
.......A
UTH_PID.
....3057
6:29944.
Получаем session key:
..AUTH_S
ESSKEY..
...E561B
8F27A56B
D2DAE917
EB926DEC
8DA..... |
| [21-APR-2004 19:39:13:531] nsrdr: got NSPTDA packet |
Посылаем пароль в зашифрованном
виде
..system
.....AUT
H_PASSWO
RD.....6
а также посылаем все NLS настройки
|
| [21-APR-2004 19:39:13:687] nsrdr: got NSPTDA packet |
Получаем пакет Data (не знаю зачем) |
| [21-APR-2004 19:39:13:734] nsdofls: sending NSPTDA packet |
Отправляем пакет Data (не знаю
зачем) |
[21-APR-2004 19:39:13:687] nassky: exit
[21-APR-2004 19:39:13:687] nszssk: exit
[21-APR-2004 19:39:13:734] nsdofls: sending NSPTDA packet |
На этом этапе мы уже точно
подключены к северу, приылается banner для
SQLplus
......Or|
acle9i.E|
nterpris|
e.Editio|
n.Releas|
e.9.2.0.|
4.0.-.Pr|
oduction|
.With.th|
e.Partit|
ioning,.|
Real.App|
lication|
.Cluster|
s,.OLAP.| |
Список аббревиатур пакетов в trace
файле:
NSPTCN Connect 0x01
NSPTAC Accept 0x02
NSPTRF Refuse 0x04
NSPTRD Redirect 0x05
NSPTDA Data 0x06
NSPTNL Null - empty data, no flags 0x07
NSPTAB Abort 0x09
NSPTRS Resend packet 0x0B
NSPTMK Marker packet 0x0C
NSPTAT Attention 0x0D
NSPTCNL Control information 0x0E
NSPTHI Highest legal packet type 0x13
Ссылки:
Examining Oracle Net
Trace Files
Если Вы используете .ODBC Driver, OLE DB Provider, Oracle
Objects for OLE (OO4O), Oracle Data Provider for .Net (ODP.Net), Oracle
Service for Microsoft Transaction Server (ORAMTS) читайте
Note:216912.1 How to Perform Client-Side Tracing of Programmatic Interfaces on
Windows Platforms
|