我有一个大桌子(90K行,大小cca 60mb),里面有大约50家酒店的免费客房容量信息。这个表每小时只有很少的更新/插入。我的应用程序每秒最多发送30次异步请求到这个(和连接的表)。
当我一次启动30个线程(默认AppPool类的SQL3.5 C#) (使用随机有效的.NET查询字符串)时,只有几个线程(CCA4)被异步处理,其他线程等待。为什么?是因为SQL server2008表锁定,还是因为.NET内核?还是别的什么?
如果这是一个SQL问题,如果我将这个大表分成每个酒店模型的一个表,可以有所帮助吗?我的目标是一次至少有10个线程servet。
发布于 2009-11-30 03:39:21
这张桌子很小。它甚至不是一个“中等大小”的桌子。这是微不足道的。
你可以每秒全表扫描它30次,你可以把整个东西复制到ram中,没有服务器会有丝毫的麻烦。
如果你的数据可以放在内存中,那么数据库是很快的。如果你找不到这个,那你就做错了什么。因此,我也认为问题都在客户端。
发布于 2009-11-30 03:15:31
这很可能发生在.NET方面。如果是表锁,则会有更多的线程正在处理,但它们会等待查询返回。如果我没记错的话,线程池有一个属性,可以控制它们一次创建多少实际线程。如果挂起线程的数量超过这个数字,那么它们就会排队等待正在运行的线程完成。看看这个。
发布于 2009-11-30 03:55:00
您是否尝试过更改事务隔离级别?
即使从表中读取数据,Sql Server也会锁定该表
尝试将隔离级别设置为读取未提交,看看这是否会改善情况,
但请注意,如果这是解决方案,请确保您了解其后果,这样做是可行的
这个链接解释了它是什么。
link text
https://stackoverflow.com/questions/1816441
复制相似问题