A: Можно выполнить 2 известные
мне настройки, tcp.nodelay и SDU/TDU
Установить
параметр tcp.nodelay = true в sqlnet.ora на стороне
сервера и клиентов. Это исключит
буферизацию пакетов tcp. Что вероятно
увеличит их число, но также и увеличит
производительность, если сеть у Вас не
загружена. Насколько я понимаю, это
параметр при открытии сокета, и приложение (oracle
client) либо выставляет это параметр либо нет.
SQL*Net
позволяет также установить размер
принимаемых и отсылаемых пакетов с помощью
параметров SDU (session data unit) и TDU (transport data unit).
Значение SDU по умолчанию 2048, значение TDU по
умолчанию 32767.
Какие значения использовать в
реальной жизни? Мне кажется, что чем лучше
сеть тем большие значения имеет смысл
использовать. Надо только помнить, что
длина пакета Ethernet 1500 (минус заголовки). Steev
Adams полагает,
таким образом, что SDU должно быть для Ethernet
1450, metalink что 1460. Точно также, если сеть
плохая, имеет смысл попробовать уменьшить
размер пакетов. Хотя конечно, в первую
очередь нужно обратиться в сетевой отдел,
чтобы выяснить причину плохой связи. Если
маршрутизатор закрывает соединения
никакой размер пакетов не поможет.
Установить
параметры SDU
и TDU для
сервера и клиентов можно как показано ниже:
SID_LIST_LISTENER
=
(SID_LIST
=
(SID_DESC
=
(SDU
= 8192) <<**** Connects to this SID will
(TDU
= 8192) <<**** try to use put 8K into packets.
(SID_NAME
=SPRI)
(ORACLE_HOME
= /oracle/product/8.1.7)
)
)
alias=
(DESCRIPTION=
(SDU=8192)
<<**** service layer buffer size
(TDU=8192)
<<**** transport layer size
(ADDRESS=
(PROTOCOL=tcp) (PORT=1521) (HOST=abc))
Устанавливать нужно одинаковые
значение и на сервере и на клиенте. Если
клиентов несколько типов, и хочется
использовать несколько разных SDU, наверно
нужно запустить несколько листенеров. Но я
не проверял как это будет работать.