FB2.1 почему и прирос в скорости, что кучу мелких пакетиков, собирает в один
TCPпакет.
В смысле, что ждет ответа не на каждый пакет размером с MTU, а на одну
большую посылку целиком?

Влад же вроде рассказывал...
Нет, ничего он не ждет, если конечно Nagle algorithm выключен (курить TcpNoNagle = 1 в firebird.conf)

Просто он не отправляет немедленно комманды, которые срочно отправлять ненадо. Например, allocate statement или drop statement. - обе занимают 8 или 12 байт вроде.
(в FB2.0 так и уходят три TCP пакета, по 12 байт в каждом.
Причем после каждого ожидается ответ сервера!)

В FB2.1 такие комманды скапливаются, и уходят серверу пачкой с ближайшей "неотложной" коммандой.

Например, у тебя закрылись три стеймента. При этом клиент ничего не отправил серверу FB.
Потом ты стартуешь транзакцию, и вот тут на сервер уходит один TCP пакет,
в котором в начале - три твоих стейтмента на закрытие, а за ними - комманда на старт тр-ции.

Думаю, Влад меня поправит, если я где приврал.


Ответить