【发布时间】:2009-05-10 10:41:33
【问题描述】:
我有一个客户端/服务器应用程序,它依赖于 MS SQL 数据库进行后端存储,服务器应用程序是一个 WCF TCP 服务,它通过从数据库信息集中进行选择来处理客户端请求。
服务配置为 PerSession 并支持 500 个会话。 在客户端,用户可以打开不同的视图,每个视图都有一个我的服务对象(代理对象),所以每个视图都是一个会话;每个视图都有一个线程计时器,每秒使用代理对象从服务器请求数据。
该应用程序对于具有 8 个视图的少量用户运行良好,但是当我增加数量时,SqlConnection.Open 中出现超时异常,因为连接池中没有可用的连接。
每个视图都有会话/对象,因为 WCF 服务不是线程安全的;它依赖于使用 SqlDataReaders 和 SqlAdapters 的单线程数据库访问层。
有没有办法增加数据库连接数?好像800是最高的!!从您的角度来看,我怎样才能增加用户数量?
我是否应该更改 DB 层并使其成为多线程并使 WCF 服务单一? 我认为这是设计中的瓶颈(您能推荐一篇关于 ADO.net 中的多线程的文章吗)
PS:
我可以用内存数据库或更快的存储替换数据库吗?
根据答案:
我更改了后端服务以关闭每个方法调用的连接,但我面临同样的问题,因为用户数量增加延迟增加(超过一秒),这是否意味着我必须更改数据库解决方案?什么是替代解决方案?。
之后:
我尝试了两种解决方案
- 每个方法调用打开和关闭 sql 连接
- 增加连接字符串中连接池的大小
但是如果我增加用户数量,两者都会给我带来延迟,同时我会监控 sql porfiler 中的查询,似乎每个查询不会超过 20 毫秒。
【问题讨论】:
-
如果您已经实施了提供的解决方案,但问题仍未解决,则可能是连接池实施不正确,或者是 WCF 服务本身的体系结构存在问题。 Sql Server 绝对可以处理连接数,而且非常好。或者,问题出在服务器规格上。
标签: .net sql-server wcf client-server