[freetds] About "initial block Size"

ZIGLIO, Frediano, VF-IT Frediano.Ziglio at vodafone.com
Fri Aug 18 03:43:20 EDT 2006

> Hi,
>             When I am trying to make a query from a Solaris 
> Client using
> FreeTDS (tsql) to a SQL Server in production, I met the following
> problem:
> 1.       Query string: Select * from account
> 2.       The table "account" have 36,000+ rows
> 3.       If I set in freetds.conf the "initial block Size" to 
> 512, I can
> get back about 80 rows and then the freetds hangs on the select() call
> in net.c/tds_good_read(), if I set it to 1024 I can get back about 70
> rows and then freetds hangs on the select() call in
> net.c/tds_good_read(), if I set it to anything more than 2048 the
> freetds hangs on the select() call before it returns anything.
> 4.       There is a firewall between the Solaris Client and 
> SQL Server,
> and is it possible because someone has set up some rules that if the
> packet size is too large then drop the packet, if the "block Size"
> decides the packet size from SQL Server?

Do you think is possible to make good tcp connections with such a rule?
ip stack (which is part of any kernel OS) try to maximixe tcp packets to
MTU, if you discard large packets connections just hang! Your system
administrator can restrict packets using MSS but it can only raise
bandwidth usage... It should drop some large ip packets like icmp echo
request but is not good to discard any large ip packets!!

> 5.       Anyway, what is this "block size" for?

TDS protocol is a packet protocol. Every request/response is split into
packets trasmitted in a tcp connection. block size decide the initial
packet size however kernel pack packets and also mssql raise packet to
4k asap so you can't use block size to limit tcp packets.

> Regards
> Ou


More information about the FreeTDS mailing list