扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
sqlserver2008不支持异步模式。
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都网站建设、二连浩特网络推广、小程序制作、二连浩特网络营销、二连浩特企业策划、二连浩特品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供二连浩特建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
2008异步图画失败可能是因为sqlserver2008不支持异步模式,需要升级,所以会出现提示为,此sqlserver版本不支持修改事务安全模式,alterdatabase失败。
首先是针对全文检索,新版建立 Catalog 内容时,扩展(Index
population)的速度较旧版快一倍以上,而查询效率也提升
30%-50%。
另外,全文检索服务支持多实例(multi-instanced)
在后台创建多个线程,访问你对应的数据然后放在一个指定的对象里面。 JSP上异步不断的发送请求向你存放数据的对象,返回数据后,放在JSP页面里面。
尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
使用基于游标的方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。
最好的改进光标性能的技术就是:能避免时就避免使用游标
若有时无法避免使用游标,则可以用如下技巧来优化游标的性能。
(1). 除非必要否则不要使用static/insensitive游标。打开static游标会造成所有的行都被拷贝到临时表。这正是为什么它对变化不敏感的原因——它实际上是指向临时数据库表中的一个备份。很自然,结果集越大,声明其上的static游标就会引起越多的临时数据库的资源争夺问题。
(2). 除非必要否则不要使用keyset游标。和static游标一样,打开keyset游标会创建临时表。虽然这个表只包括基本表的一个关键字列(除非不存在唯一关键字),但是当处理大结果集时还是会相当大的。
(3). 当处理单向的只读结果集时,使用fast_forward代替forward_only。使用fast_forward定义一个forward_only,则read_only游标具有一定的内部性能优化。
(4). 使用read_only关键字定义只读游标。这样可以防止意外的修改,并且让服务器了解游标移动时不会修改行。
(5). 小心事务处理中通过游标进行的大量行修改。根据事务隔离级别,这些行在事务完成或回滚前会保持锁定,这可能造成服务器上的资源争夺。
(6). 小心动态光标的修改,尤其是建在非唯一聚集索引键的表上的游标,因为他们会造成“Halloween”问题——对同一行或同一行的重复的错误的修改。因为SQL Server在内部会把某行的关键字修改成一个已经存在的值,并强迫服务器追加下标,使它以后可以再结果集中移动。当从结果集的剩余项中存取时,又会遇到那一行,然后程序会重复,结果造成死循环。
(7). 对于大结果集要考虑使用异步游标,尽可能地把控制权交给调用者。当返回相当大的结果集到可移动的表格时,异步游标特别有用,因为它们允许应用程序几乎马上就可以显示行
这种问题我早就碰过了,使用
多线程
是一种非常不好的选择,你的系统随时都会崩溃。
办法其实非常简单,你只要使用ADO异步操作就可以了,完全不必建立多线程,当然这涉及ADO的高级应用,今天心情好,教你几招!(下面是我在VB中使用过的方法,DELPHI中同样也能使用ADO异步操作访问SQLSERVER)
之前先与SQL
SERVER建立一个CONNECTION对象,将其CURSORLOCATION属性设置为adUseClient
然后用ADO
CONNECTION的Execute方法异步执行
存储过程
即可
例如:con.CursorLocation
=
adUseClient
dim
strSQL
as
String
strSQL="SQL语句或存储过程名及其参数"
'语法必须正确
con.Execute
strSQL,
,
adAsyncExecute
'adAsyncExecute指令异步操作
这样你的
应用程序
就不用等待存储过程执行完毕后才可执行后续
代码
了。
你还可以使用ADO
CONNECTION对象的ExecuteComplete事件在执行完存储过程后
通知你的应用程序执行相应的动作,例如MSGBOX等之类的东西,具体的实现代码你自己去查ADO联机手册。
另外顺便提一下,如果对于一个执行了很长时间都未能完成的查询,你别指望使用貌似很行的ADO的CANCEL方法,立即取消一个正在执行的ADO异步操作,即使在更新版本的ADO.net
3.5也是如此(非要等到超时后才能生效),真不明白微软的工程师们是如何想的!谁要是能给出
解决方法
,我奖他300分,外加现金若干。
答复补充问题:
“四楼的大哥
我还想问一下
如果我在这个存储过程还没有执行完成的时候
其他客户端又调用了这个存储过程
会不会出错呢???我不太清楚一个存储过程还没有执行完的时候
是否可以再次调用
请指教
谢谢!!!!”
不会的,因为SQLSERVER
引擎
会处理这些并发问题(自动使用事务处理,微软的工程师们早就想到这些问题了,请放心使用)
SQL Server Service Broker 你可以理解为一种 数据库队列的 东西.
异步处理的.
例如我要执行一个耗时比较长的存储过程.
普通的执行方法, 是我 执行了, 然后我等着服务器处理完了, 才能继续干别的事情.
SQL Server Service Broker 则是以一种队列异步处理的机制来完成.
我需要执行一个很耗时的处理.
那么可能就是向某个 队列, 发送一个消息, 然后立即就返回了.
这个时候, 我可以做其他的查询处理.
等服务器执行完毕后, 再向我发一个消息, 告诉我 执行的结果.
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流