使用oracle data provider的连接池功能,实现比较高效的服务器,文档来源: Oracle data provider for DotNet developer guide
Connection Pooling ODP.NET connection pooling is enabled and disabled using the Pooling connection string attribute. By default, connection pooling is enabled. The following are ConnectionString attributes that control the behavior of the connection pooling service: ■ Connection Lifetime ■ Connection Timeout ■ Decr Pool Size ■ HA Events ■ Incr Pool Size ■ Load Balancing ■ Max Pool Size ■ Min Pool Size ■ Pooling ■ Validate Connection Connection Pooling Example The following example opens a connection using ConnectionString attributes related to connection pooling. // C# using System; using Oracle.DataAccess.Client; class ConnectionPoolingSample { static void Main() { OracleConnection con = new OracleConnection(); //Open a connection using ConnectionString attributes //related to connection pooling. con.ConnectionString = "User Id=scott;Password=tiger;Data Source=oracle;" + "Min Pool Size=10;Connection Lifetime=120;Connection Timeout=60;" + "Incr Pool Size=5; Decr Pool Size=2"; con.Open(); Console.WriteLine("Connection pool successfully created"); // Close and Dispose OracleConnection object con.Close(); con.Dispose(); Console.WriteLine("Connection is placed back into the pool."); } } Using Connection Pooling When connection pooling is enabled (the default), the Open and Close methods of the OracleConnection object implicitly use the connection pooling service, which is responsible for pooling and returning connections to the application. The connection pooling service creates connection pools by using the ConnectionString property as a signature, to uniquely identify a pool. If there is no existing pool with the exact attribute values as the ConnectionString property, the connection pooling service creates a new connection pool. If a pool already exists with the requested signature, a connection is returned to the application from that pool. When a connection pool is created, the connection pooling service initially creates the number of connections defined by the Min Pool Size attribute of theConnectionString property. This number of connections is always maintained by the connection pooling service for the connection pool. At any given time, these connections are in use by the application or are available in the pool. The Incr Pool Size attribute of the ConnectionString property defines the number of new connections to be created by the connection pooling service when more connections are needed in the connection pool. When the application closes a connection, the connection pooling service determines whether or not the connection lifetime has exceeded the value of the Connection Lifetime attribute. If so, the connection pooling service closes the connection; otherwise, the connection goes back to the connection pool. The connection pooling service enforces the Connection Lifetime only when a connection is going back to the connection pool. The Max Pool Size attribute of the ConnectionString property sets the maximum number of connections for a connection pool. If a new connection is requested, but no connections are available and the limit for Max Pool Size has been reached, then the connection pooling service waits for the time defined by the Connection Timeout attribute. If the Connection Timeout time has been reached, and there are still no connections available in the pool, the connection pooling service raises an exception indicating that the connection pool request has timed-out. The Validate Connection attribute validates connections coming out of the pool. This attribute should be used only when absolutely necessary, because it causes a round-trip to the database to validate each connection immediately before it is provided to the application. If invalid connections are uncommon, developers can create their own event handler to retrieve and validate a new connection, rather than using the Validate Connection attribute. This generally provides better performance. The connection pooling service closes connections when they are not used; connections are closed every 3 minutes. The Decr Pool Size attribute of the ConnectionString property provides connection pooling service for the maximum number of connections that can be closed every 3 minutes. Connection Pool Management Not Supported in a .NET Stored Procedure ODP.NET connection pool management provides explicit connection pool control to ODP.NET applications. Applications can explicitly clear connections in a connection pool. Using connection pool management, applications can do the following: ■ Clear connections from connection pools using the ClearPool method. ■ Clear connections in all the connection pools in an application domain, using the ClearAllPools method. Connection Pooling for a Real Application Clusters (RAC) Database This section discusses optimization and other aspects of connection pooling for a Real Application Clusters (RAC) database. RAC is the technology that makes grids possible for Oracle database by providing the ability to access the database from multiple instances, each running on nodes in a cluster. Connection Pool Optimizations for RAC Oracle Data Provider for .NET optimizes connection pooling for RAC database by balancing work requests across RAC instances, based on the load balancing advisory and service goal. Furthermore, the ODP.NET connection pool can be enabled to proactively free resources associated with connections that have been severed due to a down RAC service, service member, or node. Oracle Data Provider for .NET uses the following features to optimize connection pooling for RAC: ■ Runtime Connection Load Balancing When Runtime Connection Load Balancing is enabled: – The ODP.NET connection pool dispenses connections based on the load balancing advisory and service goal. – The ODP.NET connection pool also balances the number of connections to each service member providing the service, based on the load balancing advisory and service goal. By default, this feature is disabled. To enable runtime connection load balancing, include "Load Balancing=true" in the connection string. This feature can only be used against a RAC database and only if "pooling=true". In order to use Runtime Connection Load Balancing, specific RAC configurations must be set. For further information, see Oracle Database Oracle Clusterware and Oracle Real Application Clusters Administration and Deployment Guide. Oracle Net Services should also be configured for load balancing. See Oracle Net Services Administrator's Guide for further details. The following connection string example enables Runtime Connection Load Balancing: "user id=scott;password=tiger;data source=erp;load balancing=true;" ■ HA events When HA events is enabled: ■ ODP.NET connection pool proactively removes connections from the pool when a RAC service, service member, or node goes down. ■ ODP.NET establishes connections to existing RAC instances if the removal of severed connections bring the total number of connections below the "min pool size". By default this feature is disabled. To enable HA events, include "HA Events=true" in the connection string. This feature can only be used against a RAC database and only if "pooling=true". The following connection string example enables HA Events: "user id=scott;password=tiger;data source=erp;HA events=true;" Pool Size Attributes in a RAC Database When connection pools are created for a non-RAC database, pool size attributes are applied to the single service. Similarly, when connection pools are created for a RAC database, the pool size attributes are applied to a service and not to service members. For example, if "Min Pool Size" is set to N, ODP.NET does not create N connections for each service member. Instead, it creates, at minimum, N connections for the entire service, where N connections are distributed among the service members. The following pool size connection string attributes are applied to a service. ■ Min Pool Size ■ Max Pool Size ■ Incr Pool Size ■ Decr Pool Size
原文:http://thinkdollar.blog.ccidnet.com/blog-htm-itemid-155086-do-showone-type-blog-uid-52739.html |