13.01.2013 Views

OpenEdge Data Management: DataServer for Microsoft SQL Server

OpenEdge Data Management: DataServer for Microsoft SQL Server

OpenEdge Data Management: DataServer for Microsoft SQL Server

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Connection pooling<br />

Connection pooling<br />

The <strong>Data</strong><strong>Server</strong> <strong>for</strong> <strong>Microsoft</strong> <strong>SQL</strong> <strong>Server</strong> is enhanced with the ability to <strong>for</strong>m a<br />

connection pool. A connection pool is a set of database connections that are available<br />

<strong>for</strong> an application to use and reuse without having to be reestablished. Connection<br />

pooling significantly improves the cursor management associated with no-lock queries,<br />

particularly multi-table joins. Creating and tearing down connections can be resource<br />

intensive. Using a pooled connection to keep existing connections alive results in<br />

significant per<strong>for</strong>mance gains because the <strong>Data</strong><strong>Server</strong> avoids the overhead of making<br />

a connection <strong>for</strong> each request. ABL applications that open multiple no-lock queries and<br />

handle their results simultaneously experience the best cumulative per<strong>for</strong>mance gains<br />

from connection pooling.<br />

Main components<br />

Connection pooling <strong>for</strong> the <strong>Data</strong><strong>Server</strong> <strong>for</strong> <strong>Microsoft</strong> <strong>SQL</strong> <strong>Server</strong> is a combination of<br />

ODBC connection pooling and <strong>Data</strong><strong>Server</strong> connection management. These<br />

connection components can be used as follows:<br />

• Individually, ODBC connection pooling or <strong>Data</strong><strong>Server</strong> connection management<br />

provides the foundation required <strong>for</strong> firehose cursors, but enabling both provides<br />

the best per<strong>for</strong>mance. For more in<strong>for</strong>mation on firehose cursors, see the “Firehose<br />

and Fast Forward-Only Cursors” section on page 164.<br />

Without a connection pool, firehose cursors would block an application until a full<br />

result set is retrieved. Because of this, when connection pooling is disabled,<br />

firehose cursors are also disabled. By maintaining multiple connections and one<br />

cursor per connection, read-only requests only block the connection on which they<br />

retrieve results, freeing ABL applications to continue processing data on the other<br />

connections.<br />

• ODBC connection pooling and <strong>Data</strong><strong>Server</strong> connection management provide the<br />

highest per<strong>for</strong>mance improvements when enabled together, but they can also be<br />

enabled independent of one another.<br />

For installations where the number of ODBC connections is limited, you might<br />

decide to enable only the <strong>Data</strong><strong>Server</strong> connection management. For deployments<br />

in which memory constraints are a concern, enabling only the ODBC connection<br />

pool provides on-demand connections, with optimized resource efficiency. If both<br />

an ODBC connection pool and managed connections coexist in the same<br />

<strong>Data</strong><strong>Server</strong> process, the managed connections will come from the ODBC<br />

connection pool. The managed connections are distinguished from the connection<br />

pool connections in that they are never released back to the pool <strong>for</strong> the life of an<br />

ABL session.<br />

<strong>OpenEdge</strong> <strong>Data</strong> <strong>Management</strong>: <strong>Data</strong><strong>Server</strong> <strong>for</strong> <strong>Microsoft</strong> <strong>SQL</strong> <strong>Server</strong> 161

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!