网上找了写资料:
数据库连接池:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。
一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个“池”里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应该在请求队列中排队等待。并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。 连接池技术尽可能多地重用了消耗内存地资源,大大节省了内存,提高了服务器地服务效率,能够支持更多的客户服务。通过使用连接池,将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费; 2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
线程池
SQL Server 维护一个操作系统线程池,以便执行从客户端送达的成批 SQL 语句。在 Microsoft Windows NT? 上,如果服务器的 lightweight pooling 配置选项设为 1,则 SQL Server 不再维护线程,转而维护一个纤程池;纤程使用比线程更少的资源。使用线程池或纤程池,可以使 SQL Server 在同时执行多个 SQL 语句时优化处理时间分配。该池中的线程或纤程共同作为工作线程。
工作线程数是由服务器配置选项 max worker threads 控制的。默认值为 255 而且几乎不需要更改。
当从客户端收到一批 Transact-SQL 语句时,如果现有的工作线程空闲,就会分配它来执行这个批处理。如果没有空闲的现有工作线程而且工作线程数少于 max worker threads,那么就会分配一个新的工作线程。如果没有空闲的工作线程而且已经达到 max worker threads,那么新的批处理就要一直等到现有工作线程完成其当前批处理任务而空闲为止。当工作线程数达到 max worker threads 时,SQL Server 显示如下消息:工作线程限制 255 已经达到。
对所有工作线程进行分配,并不意味着 SQL Server 的性能会降低。通常,新的批处理等待空闲线程只需要很短的时间。分配更多的线程可能会降低性能,因为增加的工作需要在线程之间协调资源。很多在生产状态运行的 SQL Server 系统都会达到这样的状态,而且以非常高的性能级别运行。
内存池
内存池的思想通过这个"池"字表露无疑,应用程序可以通过系统的内存分配调用预先一次性申请适当大小的内存作为一个内存池,之后应用程序自己对内存的分配和释放则可以通过这个内存池来完成。只有当内存池大小需要动态扩展时,才需要再调用系统的内存分配函数,其他时间对内存的一切操作都在应用程序的掌控之中。