TDS Connection Pooling
Prev | Chapter 5. Advanced Configurations | Next

## TDS Connection Pooling

The Connection Pooling server swims in the `src/pool` directory.

The FreeTDS connection pool is a server process; it emulates a SQL Server. Any program that can attach to a real SQL Server may instead elect to attach to the pool server. The pool in turn connects to the SQL Server and database you specify, and attempts to share these connections. See the `src/pool/README` for a more detailed description of its inner workings.

To configure the pool server, first make sure FreeTDS has a working entry for the real SQL Server by connecting to it with tsql or another program.

| Note
The FreeTDS connection pool currently does not supports TDS version 5.0 (Sybase) and encrypted connections. This restriction applies to both the client-to-pool and pool-to-server connections!

After FreeTDS has been installed, you will find an executable named tdspool in the `/usr/local/bin` directory (or whatever directory was specified with the configure `--with-prefix flag` option).

Edit `pool.conf` in the FreeTDS's `etc` directory. The `pool.conf` file is formatted like `freetds.conf`, with a section name in brackets and options for each section in key/value pairs.

Just as in `freetds.conf` there are two types of sections, a `[global]` section whose options affect all pools, and a section with the name of the pool for pool-specific options. The following options are supported and may appear in either section.

Table 5.1. pool.conf settings

Name | Possible Values | Default | Meaning
--- | --- | --- | ---
user | Any valid user | none | The username used to connect to the pool server.
password | Any | none | The password of the user at the pool server.
server user | Any valid user | user field | The username used to connect to the servername.
server password | Any | password field | The password of the user at the servername.
server | Any entry in the freetds.conf file | none | The alias from the freetds.conf file representing the servername that will be connected to.
database | Any valid database | User's default database | The database on the servername to use.
port | Any TCP port | none | Port on which tdspool will listen.
min pool conn | 0 or more | none | Minimum number of open connections to maintain to the servername. 0 will cause pool server to not open any initial connection.
max pool conn | 1 or more | none | Maximum number of open connections to open against the servername.
max member age | 0 (no limit) or a number of seconds | 0 | Maximum age of idle members before connection is closed.

Now, let's put this into practice.

Example 5.7. pool.conf

    	[global]
    	min pool conn = 5
    	max pool conn = 10
    	max member age = 120

    	[mypool]
    	user = webuser
    	password = secret
    	database = ebiz
    	server = fooserv
    	max pool conn = 7
    	port = 5000

The `[global]` section defines that we will open 5 connections against the server initially, and will increase up to 10 as demand requires. These connections will be closed after being idle for 2 minutes (120 seconds), but only until there are 5 remaining open.

The `[mypool]` section defines a pool named `mypool` that will listen on port 5000. It will login to a SQL Server named `fooserv` using the user `webuser` and the ever so clever password of `secret`. Once logged in, the connections will use the database `ebiz` instead of webuser's default database. Also, since this SQL Server has a limited number of CALs (Client Access Licenses), we are restricting the maximum number of connections to 7, which overrides the `global` setting of 10.

Run tdspool with the name of the pool you are serving.

    	$  tdspool mypool

Before your clients connect to the pool, you must edit your `freetds.conf` to include the host and port of the pooling server, and point your clients at it.

Prev | Up | Next
Appending Dump Files | Home | Chapter 6. Use FreeTDS