摘要:我们的数据库操作中,创建数据库连接是最消耗系统资源的,本文向您介绍数据库连接的重要性和原理,并针对数据库连接给出一些设计和效率优化方面的建议。
当你在设计一个数据库应用程序时,有时你可能觉得数据库连接类型并不重要,如果真这样的话你就大错特错了,下面列举出一些原因说明连接类型为什么是如此重要:
◆相对数据库应用程序执行的其它任务而言,创建数据库连接是最消耗系统资源的了
◆打开数据库连接时在服务器端和客户端消耗的内存都是比较多的
◆建立一个连接时需要在服务器和客户端之间往返多次
◆连接打开过多可能造成内存不足,引起从内存中换页转移到磁盘上换页,这样性能就会显著下降
◆以目前流行的架构,大多数应用程序都是使用连接池,这样性能会有所提升,但许多时候连接池调整不好也会引起性能显著下降,连接池的设计、调整和监控难度都比较大
实现连接的步骤如下:
◆从连接池获得一个连接
◆按需要一次只创建一个连接
正确的决策主要依赖于数据库服务器的CPU和内存条件。
为什么连接开销比较大?
开发人员经常认为建立一个数据库是一个简单的要求,不就是在数据库服务器和初始化用户之间的一个网络往返吗,但实际上,一个数据库连接在驱动和数据库服务器之间有多次网络往返,例如,当某个驱动连接到Oracle或Sybase时,这个连接会有7到10和网络往返,执行了一系列的动作:
◆校验用户的身份证书
◆在数据库驱动期望的代码页设置和数据库可用的代码页设置之间进行协商(如果必要的话)
◆获取数据库版本信息
◆确定用于通信的最理想的数据库协议包大小
◆设置会话设置
此外,数据库管理(开发人员承担数据库管理员职责时的最佳做法)系统要确定建立连接使用的资源,包括性能开销较大的磁盘I/O和内存分配,你可能会认为将应用程序部署到数据库服务器上会消除网络往返,在大多数情况下这并不现实,因为现实世界中大部分企业并不会这么干,它们有很多的应用程序,有很多的数据库,此外,数据库服务器都会为数据库系统进行精心的性能调整,一般不会为不同的应用程序进行调整,即使可以在一台机器上安装数据库和应用程序,但这样也会有单点故障的隐患。
使用连接池
连接池是一个和多个可重复使用的物理数据库连接的缓存,连接池可以显著提高性能,因为重复使用连接可以有效减少建立物理连接的系统开销,这里必须要说明的是你的数据库服务器必须要有足够的内存来管理连接池中的连接。
我们讨论的重点是客户端连接池(由数据库驱动和应用程序服务器提供的连接池)而不是服务器端的连接池(由数据库管理系统提供的连接池),有些数据库管理系统提供的连接池要和客户端连接池一起工作,虽然不同的服务器端连接池各有特色,但总体目标都是为了消除建立和移除连接时数据库服务器的系统开销。和客户端连接池不一样,服务器端连接池不会优化到应用程序的网络往返。
正如我们在前面提到的,连接到数据库的系统开销是比较大的,因为数据库驱动的资源分配(在驱动和数据库之间的网络往返)和数据库服务器上的资源分配开销都比较大,客户端连接池只能解决数据库服务器上自由分配的问题。