数据库连接池有多好 请使用数据库连接池

时间:2016-04-14
简介:数据库|那看上去也许是一个即简单又很明显的规则,然而,确保你的数据库连接被以适时的方式关闭对保护你的数据库性能和可利用性有很大帮助。在下面这些技巧的帮助下你可以很好地关

那看上去也许是一个即简单又很明显的规则,然而,确保你的数据库连接被以适时的方式关闭对保护你的数据库性能和可利用性有很大帮助。在下面这些技巧的帮助下你可以很好地关闭你的数据库连接。

一个智者曾对我说,“如果你打开了一个资源使用时,请在你使用好的时候确保你关上了它”。

注意,他没这样说,“当你打开一个资源使用时,请在你使用好时确保你关上了它,如果你不关上它,一点问题也没有,你正在使用的库/驱动/运行时间最终会自动关上它”。

如果每次我看见资源被打开使用而使用完以后又认为它关闭了或最终超时关闭时都有5分钱的话,我会成为一个富有的人。没有比数据库连接更严重的例子了。

我们都会对那样做感到内疚,但是不恰当地关闭数据库连接带来的负面效果会在你没预料到或者意想不到的情况下被强烈的感觉到。在你最新发布的产品系统里恰好一切都会发出嗡嗡的响声直到不久的将来某时你的客户惊慌失措地给你打了个电话,他(她)想知道为什么他们的应用程序或者系统不再工作了。或者,更糟糕的是,这个问题会断断续续地发生,一些用户可以用这个系统,而另一些用户却用不了。

不过,还是有好消息的。这些各种各样的问题可以用一点预见和纪律来解决。

连接池的规则

只要有可能,不要依靠你数据库本身的初始连接资源。这些初始连接资源通常是在数据库本身配置好的,不要为不同的客户端去很好地扩展它们或者很好地配置它们,在多企业架构的状况下这种做法很痛苦。

数据库连接池最大的优点在于它能合理安排数据库连接(这样一来数据库连接资源就可以来做更重要的事情像查询和提供数据)和它能设置一个你的应用程序可以获得的可配置的数据库最大连接数。

你没理由不使用一个数据库连接池。

当你写完打开的数据库资源时请关上它

数据库连接池有多好 请使用数据库连接池(图1)

当你第一次写数据库对象打开命令时,干脆直接在connection.open()代码下面几行写上connection.close()(这有点好笑),然后再在connection.open()和connection.close()之间写其他的代码。这样,你就会被迫去看到connection.close()和记得关闭数据库连接。

异常的时候

当处理资源时,使用try/catch异常处理块是常用的模式。数据库连接就不同了。你不可能总是知道什么时候或者什么地方你的代码就出现了问题,但是你仍然应该为它做好准备。

确保在恰当的catch代码块里释放你任何潜在地打开的连接。在你想关闭连接之前首先去检查一下你是否有一个有效的连接被打开也是一个好主意,这样以免引起其他的异常!

测试,诊断,故障排除

大多数的关系型数据库系统都有帮助你检查它正在使用的连接是否被你的代码正确关闭的能力。例如,在MySQL数据库里,你需要做的是以管理员的身份(或者有适合权限的用户)通过在命令行(或者你喜欢的数据库客户端)输入命令的方式来连接到数据库服务器,

SHOW PROCESSLIST;

…通过在命令行输入SHOW PROCESSLIST显示如下的信息:

+----+------+-----------------+--------+---------+------+-------+------------------+
| Id | User | Host            | db     | Command | Time | State | Info             |
+----+------+-----------------+--------+---------+------+-------+------------------+
|  4 | root | localhost       | webapp | Query   |    0 | NULL  | show processlist | 
|  6 | root | localhost:3306  | webapp | Sleep   |  208 |       | NULL             | 
|  8 | root | localhost:3307  | webapp | Sleep   |  208 |       | NULL             | 
|  9 | root | localhost:3309  | webapp | Sleep   |  208 |       | NULL             | 
+----+------+-----------------+--------+---------+------+-------+------------------+
4 rows in set (0.00 sec)

从这个信息列表里,我们可以快速地知道并不是所有的连接都被恰当地关闭了。

我常常惊讶我所遇到的很多开发人员没有意识到这个命令,或者至少知道这个命令的。我们要知道它,我们要使用它,并且我们要爱上它!

结论

虽然数据库在管理这些数据库连接时越来越好也越来越智能,这也许是正确的,但是这不能成为我们变懒的借口,因此不要认为没事就跳过这些技巧。要知道在开发界内存泄漏是重大的灾难。

通过确保总是有足够的连接可以被服务请求所用可以取悦你的客户。并且同时通过保持一个最小的打开连接数,这也有助于改善你数据库的性能。

所以,记住要关闭这些打开的数据库连接!

TAGS:数据库连接池

上一编:SQL 命令集锦

下一编:SQL注入详解-网络安全

New article Hot article