• SQL Server提高并发查询效率


    同事写了个程序用创建多个线程使用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来更改数据库设计。

  • 相关阅读:
    快讯:优酷四季度净盈余570万美元
    陈诉称谷歌Apps受大企业欢迎 或对微软构成要挟
    Bus.fm:有颜色的“巴士电台”
    摩根大通预计全球PC市场疲软 中国为主因
    中国联通首批沃Phone终端将于3月上市销售
    酷派将推800元Android智好手机推行3G终端
    谷歌预计将来几年在线告白局限打破1000亿美元
    Facebook与日本电通协作展开告白营销业务
    动静称苹果2日将推出小企业手艺支撑办事
    C# 调用C++生成的dll
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3172169.html
Copyright © 2020-2023  润新知