最近有个多线程程序,连接本机SQLServer 2008,大概300个连接,跑一会自己写的日志中就会出现“超时已过期”错误,或者出现“不存在或拒绝访问”错误。奇怪在于,程序开启后肯定有联通过,是在过一会儿才会出现这样的错误。
SQLServer日志中,和windows事件簿中没有看到任何有价值的信息。
首先,不会有多个线程使用到同一个TADOConnection的状况;表的索引也建立了,单个查询不会超过1秒。
继续,发现错误出现在开启程序30秒左右时,于是试着调整TADOCOnnection/TADOCOmmand/TADODataSet的TimeOut值,调成120秒,还是不行,还是在开启程序30秒左右出错。
SQLServer允许连接数是0,无限制,再调整SQLServer本身的连接/命令超时时间,还是一样的无效。郁闷。
程序本身有问题吗?把问题简单化吧,写一个小的测试程序,开300个线程,线程中创建TADOConnection/TADODataSet,对同一个数据库的同一个表查询,新增,没有出错,即使开到600个线程也不会出错。看来也不是SQLServer不够强,再郁闷。
Google了无数资料,有说数据库文件或日志文件增长方式设置问题,导致增长时超时。不限制日志增长,试过还是不行。
SQLServer的客户端,服务器的网络配置中也没有看出问题。
..........
..........
最后,无意中把连接字串中的“Data Source=.”改成了计算机名,居然就可以了。奇怪的是,改成本机IP:192.168.3.33居然连接不上。难道是DNS问题?