需求:
由于某些查询消耗的服务器资源很大,严重影响到了各个客户端的请求。
例如:
某个客户端的一个请求(SQL语句查询)提交到中间层,中间层执行时SQLServer自身占用了服务器的大量资源,导致其它应用以及请求执行明显减慢,响应时间过长。
这种情况如何解决?
必须保证:
客户端提交这样的请求,即对某个单表(数据量>1000w)进行较复杂的SQL查询的功能必须提供,但是需要保证其它客户端的请求响应时间正常!——nnd晕了
或者在某个客户端尽进行耗资源操作时,可以提供“取消”功能,即客户端可以取消当前请求,当然不能影响其它正常操作!急呀~~~~~~~~~~~~~~~~~~~~~~~~
在线等~~~~~~~~~~~~~~~~~~~~~~
分不够还可以另开贴~~~~~~~~~~

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4327/4327976.xml?temp=.2134668
      

  2.   

    可以用存储过程来解决这个问题,存储过程是sql server得一部分,在db服务器运行,会减轻ap服务器的负担。
      

  3.   

    某些查询消耗的服务器资源很大,什么查询啊,为什么会消耗的服务器资源很大,我觉得查询消耗的服务器资源大,就说明你的查询没有最优化,建议先优化查询,建议根据情况建立正确的聚集索引,数据量1000w并不算很多,我曾经做过一个近千行的存储过程,存储过程里面用了许多常用的技术,如多个游标、多个临时表、全局表、全局变量、N多动态语句、还动态生成了字段、N多表和视图、N多计算,查询、子查询、添加、删除、批修改等,数据记录接近千万,近千行的存储过程啊,算是个比较复杂的查询了吧,结果该查询都没有超过一秒,所以建议你先优化你的查询
      

  4.   

    存储过程固然是能解决一些问题,可是我做的系统目前的版本中有一些功能是提供个用户可以对任意数据表进行“自由”的查询操作,而且对象数据结构不是已知的也是“任意”的
    主要就是在这个上面郁闷呀~所以想来想去,优化SQL,优化数据库配置,提供增删字段索引...若干功能后,发现还需要提供客户端查询请求的“取消”功能,但是需要准确的取消当前请求,不能影响当前客户端的其它操作更不能影响其它客户端!就这个问题也问过微软的技术支持,直到可以通过SQLServer中的spid来处理,但是由于我使用的开发工具是Delphi,在使用ClientDataSet分包取数时会产生多个?spid?而这个spid在SQLServer的查询分析器中还看不到!?——郁闷~
    ClientDataSet做了什么?
    spid指的到底是什么?
    怎么利用这个来“取消”请求?有没有人用过?
    急~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      

  5.   

    spid的准确意思是什么?用来干什么的?因为怎么产生的?