最近使用ADO.NET与MySQL读取数据。常发现有空的sleeping进程存在。后来查阅资料,有几个原因。
1.没有关闭DataReader,也没有关闭connection。
2.没有关闭连接池
今天只测试第二种情况,
在连接字符串中加入"Pooling=false;"则不启用连接池。微软默认是启用连接池的。并且默认最大连接数为100。超过100刚会报错!
现在来说明我的测试。
服务器环境:
数据库:
MS SQL Server 2005
MySQL 5.5
测试端情况:
初始用户5人并发
每5秒增5人
上限30人并发。每种情况持续时间5分钟
//连接池关闭语句
Pooling=false;
一、MS SQL Server 2005 未关闭连接池 Pooling=true;
二、MS SQL Server 2005 关闭连接池 Pooling=false;
三、MySQL 5.5未关闭连接池 Pooling=true;
四、MySQL5.5 关闭连接池 Pooling=false;
统计图:
结论:
1. MS SQLServer与ADO.NET连接的性能比MySQL与ADO.NET快10倍
2. MySQL启用连接池比不启用连接池快4倍