如果用户不使用连接池,而是每当线程需要时创建一个新的连接,那么用 户的应用程序的资源使用会产生非常大的浪费并由可能会导致高负载下的异常 发生。
注意:每个连到 GBase 的连接在客户端和服务器端都有花销(内存,CPU, 上下文切换等等)。每个连接均会对应用程序和 GBase 服务器的可用资源带来一 定的限制。不管这些连接是否在做有用的工作,仍将使用这些资源中的相当一 部分。
连接池能够使性能最大化,同时还能将资源利用控制在一定的水平之下, 如果超过该水平,应用程序将崩溃而不仅仅是变慢。
幸运的是,Sun 已经通过 JDBC-2.0 可选的接口,标准化了 JDBC 中的连接 池的概念,并且所有的主流应用服务基本都实现了与 GBase JDBC 一起良好工作 的这类 API。
通常,你可以在应用服务器的配置文件中配置连接池,并通过 Java 命名和 目录接口(JNDI)访问它。在下面的代码中,介绍了在 J2EE 应用服务器上运行 的应用程序中使用连接池的方法:
例:在 J2EE 应用服务器上使用连接池,部分代码如下:
如上面的例子所示,在获得 JNDI InitialContext 并查找 DataSource 之 后,剩下的代码与前面完成的 JDBC 编程看起来类似。
当使用连接池时,要记住的最重要的是确保无论在用户的代码中发生了什 么(意外,控制流等),连接和任何由它们创建的东西(语句,结果集等)都是 需要关闭的,以便于它们可以被再使用,否则的话它们会进退两难,这在最好 的情况下意味着它们代表的 GBase 服务器资源(缓存,锁,套接字等)会在某 时被占用,在最坏的情况下,会被永远占用。
连接池最佳大小是多少,与其它所有配置规则一样,答案是“取决于具体情况”。最佳的大小依赖于预期负载和平均数据库事务时间,最适合的连接池大 小比用户预期的要小。
如果用户以 Sun's Java Petstore Blueprint 应用程序进行测试,测试使 用 GBase 和 Tomcat。在 GBase 中设置 15-20 个连接的连接池为中等规模的负载 (600 用户并发)服务,其响应时间在可接受的范围内。
要想确定用于应用程序的连接池大小,应使用诸如 Apache Jmeter 或 The Grinder 等工具创建负载测试脚本,并对应用程序进行负载测试。
一个决定在连接池中放置的合理连接数的最简单的办法是先将连接池的连 接数设置到极大,然后运行负载测试对并发用户的最大值进行检测,这样用户 就可以得出使用户指定程序得到最佳性能的连接数最大值和最小值。