SQL Server提高并发查询效率

系统 1809 0

同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查。当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过游标全部读取到本地需要大概30秒。单个线程可能就一两秒。这是由于数据库锁导致的。

同样的程序在我的机子上运行性能提高了1倍。主要原因由于我连接的sql server是企业版的,而同事那个连接的数据库是开发版的,企业版的sql server对并发访问做了一定的优化。

但是这个性能还是不够高。于是我尝试去去除数据库锁。可以通过在查询语句前面增加SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,或者在查询语句的表名后面加上(nolock)。根据msdn的解释,这两种方式是一样的,就是通过不加锁的方式提高查询效率,而导致的后果就是会查询到未提交的事务的数据。不过由于所查询的表格都是插入操作,所以不会有影响。第一种方式是针对整个查询事务,而nolock是针对查询的表格,所以如果使用nolock方式需要对每个表后面都加上(nolock)。但是实际测试的情况确实执行SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED方式查询效率有较大的改善,而使用nolock方式查询效率基本不变。在网上找了很久还是没有结果,希望有高手知道原因留个言,不胜感激。

再说说以上两种方式,测试中第一种能够提高查询效率,但是由于程序使用的是ado的方式访问数据库,使用第一种方式会导致游标无法移动到特定位置,而只能向前移动。所以无法使用第一种方式。坑爹的ado,看来要尽快找到另一种数据库访问方式来替代ado,不然老是需要根据ado来更改数据库设计。

SQL Server提高并发查询效率


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论