f your application uses MFC in a shared DLL, and your application is
in a language other than the
源代码在线查看: hnxxcxg数据库池.txt
如何加快数据库连接速度?
这个问题在分布式,多层的环境中更为重要。因为在网络频宽不是很好的环境中,或是服务器需要服务不
定数目客户端的环境中,加快数据库连接速度以及控制数据库连接数目是很重要的考虑因素。
请考虑以下数个情形:
1。当许多的客户端都需要连接后端的数据库进行资料的处理,但是每一个客户端连接,处理的时间都不
长而且是在一个缓慢的广域网络环境中。
2。客户端有上千个用户。
以上两种情形,对于数据库和系统的能力都有严格的考验。当有大量的客户端需要连接数据库,或是在缓
慢的广域网络环境中要有合理的连接速度,这都需要程序员小心的规划系统和数据库的构建。
当一个客户端连接数据库时,数据库引擎必须为这个连接配置许多的系统资源,例如内存,数据库对象以
及全域SQL空间等。当这个客户端执行完毕之后,它会关闭数据库的连接,数据库就会释放所有为它配置
的资源。如果这个时候有另外一个客户端连接进来而且也是连接到相同的数据库,那么数据库引擎又要重
复配置相同的资源,造成连接时间的延迟。如果能够有一种机制可以让数据库不释放第一个客户端配置的
资源而把它移转到第二个客户端使用的话,那么就可以大幅降低第二个客户端连接的时间。
database pooling能够让企业对象分享数据库连接。这可以大幅加快客户端连接数据库的速度,尤其是在
分布式的环境中,此外也可以让服务端的资源获得较好的使用效率。还可以减少应用程序服务连接到数据
库的数目。这样可以降低数据库服务器的负荷,进而加快数据库的响应速度。
目前的关系型数据库在实现客户端的连接上有不同的做法。分为以进程为导向和线程为导向二种。例如
ORACLE对于每一个连接的客户端是产生一个进程来服务客户端,而SYSBASE,MS SQL SERVER则是产生一个
线程来服务每个连接的客户端。以一个进程来服务客户端需要较多的系统资源,执行速度也比较缓慢,而
使用线程服务客户端则需要较少的资源,执行速度比起使用进程的方式较为快速。使用进程为导向是比使
用线程为导向的关系型数据库来得稳定,因为每一个进程是独立的执行空间,而线程是和其它的线程共同
执行于一个相同的进程空间。所以大部分的人都认为ORACLE是一个比较稳定的关系型数据库,我想这是原
因之一。此外使用线程为导向也会受到操作系统对于线程管理方式的影响。例如在WINDOWS NT中,当一个
进程的线程超过16个时,执行效率便会开始下降。不过目前的趋势是使用线程为连接的导向,例如
INTERBASE在4.X版是使用进程为连接导向,但是到了5版之后便使用线程的连接方式,所以执行效率立刻
的大幅提高。