十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
--申明一个游标
十余年的峰峰矿网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整峰峰矿建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“峰峰矿网站设计”,“峰峰矿网站推广”以来,每个客户项目都认真落实执行。
DECLARE MyCursor CURSOR
FOR SELECT TOP 5 FBookName,FBookCoding FROM TBookInfo
--打开一个游标
OPEN MyCursor
--循环一个游标
DECLARE @BookName nvarchar(2000),@BookCoding nvarchar(2000)
FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding
WHILE @@FETCH_STATUS =0
BEGIN
print 'name'+@BookName
FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding
END
--关闭游标
CLOSE MyCursor
--释放资源
DEALLOCATE MyCursor
游标属于行级操作 消耗很大
SQL查询是基于数据集的
所以一般查询能有 能用数据集 就用数据集 别用游标
数据量大 是性能杀手
指的是在SSMS里面执行么?如果是文件的话,直接用导入操作。如果是编程方式的而且刚好是.net的话,用SqlBulkCopy试试,批量插入数据非常快
在安装有SQLServer数据库的计算机上,我们在使用数据库的过程中,有时候会在任务管理器里发现sqlservr.exe这个进程的内存和CPU占用率较高。
接下来我们来看一下,如何解决上面这个问题,需要设置SQLServer数据库的内存配置。登录数据库,这里使用的是SQLServer2008,右键点击最上方的服务器名,在弹出的菜单中,点击【属性】
打开服务器属性窗口。默认显示的是第一项【常规】内容,点击第二项【内存】进行内存配置。
点击【内存】后,打开服务器内存选项配置界面。这里的【使用AWE分配内存】可以对内存进行扩展支持,我们要做的是更改下方的最大服务器内存。这个数值根据自己服务器内存大小来做适当设置。
5
个人建议设置本机内存的一半或稍微高一点,如机器内存为2G,那么我们这里填写1000。需要注意的是内存设置调小以后,在数据库执行较复杂SQL语句的时候,可能会比较慢,出现这种情况,我们再适当上调最大内存配置大小。
尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过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). 对于大结果集要考虑使用异步游标,尽可能地把控制权交给调用者。当返回相当大的结果集到可移动的表格时,异步游标特别有用,因为它们允许应用程序几乎马上就可以显示行
解决方案
服务包信息
要解决此问题, 获取用于 Microsoft SQL Server 2000 最新 ServicePack。 有关其他信息, 请单击下列文章编号以查看 Microsoft 知识库中相应:
290211 () 如何获取最新 SQL Server 2000 服务包
回到顶端
修复信息
英文版的此修补程序具有文件属性如下表中列出 (或更高版本)。 协调通用时间 (UTC) 中列出的这些文件日期和时间。 当您查看文件信息, 将转换为本地时间。 要查找 UTC 与本地时间, 区别控制面板中日期和时间工具中使用 时区 选项卡。 Date Time Version Size File name
----------------------------------------------------------------------------
26-Feb-2003 03:41 2000.80.777.0 29,244 bytes Dbmslpcn.dll
08-Feb-2003 05:43 786,432 bytes Distmdl.ldf
08-Feb-2003 05:43 2,359,296 bytes Distmdl.mdf
30-Jan-2003 01:55 180 bytes Drop_repl_hotfix.sql
01-Feb-2003 00:32 2000.80.763.0 1,557,052 bytes Dtsui.dll
30-Jan-2003 05:18 746,470 bytes Instdist.sql
30-Jan-2003 01:55 1,402 bytes Inst_repl_hotfix.sql
08-Feb-2003 06:40 2000.80.765.0 90,692 bytes Msgprox.dll
01-Apr-2003 02:07 1,873 bytes Odsole.sql
05-Apr-2003 01:46 2000.80.800.0 62,024 bytes Odsole70.dll
02-Apr-2003 21:48 2000.80.796.0 57,904 bytes Osql.exe
02-Apr-2003 23:15 2000.80.797.0 279,104 bytes Pfutil80.dll
04-Apr-2003 21:27 1,083,467 bytes Replmerg.sql
04-Apr-2003 21:53 2000.80.798.0 221,768 bytes Replprov.dll
08-Feb-2003 06:40 2000.80.765.0 307,784 bytes Replrec.dll
01-Apr-2003 02:23 1,084,828 bytes Replsys.sql
03-Apr-2003 18:14 104,868 bytes Sp3_serv_uni.sql
19-Mar-2003 18:20 2000.80.789.0 28,672 bytes Sqlevn70.rll
28-Feb-2003 01:34 2000.80.778.0 176,696 bytes Sqlmap70.dll
08-Feb-2003 06:40 2000.80.765.0 57,920 bytes Sqlrepss.dll
05-Apr-2003 01:47 2000.80.800.0 7,540,817 bytes Sqlservr.exe
08-Feb-2003 06:40 2000.80.765.0 45,644 bytes Sqlvdi.dll
26-Feb-2003 03:41 2000.80.777.0 29,244 bytes Ssmslpcn.dll
26-Feb-2003 03:41 2000.80.777.0 82,492 bytes Ssnetlib.dll
17-Mar-2003 14:49 727,132 bytes Sysmessages.sym
28-Feb-2003 01:34 2000.80.778.0 98,872 bytes Xpweb70.dll
注意 因文件依赖性, 最近修复或包含文件功能还可能包含附加文件。
回到顶端
状态
Microsoft 已确认这是问题早在 Microsoft SQL 服务器 2000 Service Pack 4 得到了已首先解决问题是 " 适用于 " section.This 中列出, Microsoft 产品中。
回到顶端
SQLServer 试图从缓冲池内存用于大多数内部分配, 但大于 8KB 请求路由到操作系统正常 allocators。 默认情况下, SQLServer 保留诸如线程也用于这些类型的分配和有限的地址空间堆栈空间、 COM 对象、 扩展存储过程, 等。 g 命令行参数 - 通过使用您可以修改此区域的大小。 有关详细信息请参阅 SQLServer 联机丛书有关 - g 参数,。
当 SQL Server 尝试为这些大分配, 之一分配虚拟内存, 该操作失败, 它将尝试删除 hopes 是释放一部分这个内存缓存查询计划。 将即使他们已不使用任何此内存在 SQL Server 2000 Service Pack 3 (SP 3), 之前此操作从缓存, 删除所有查询计划。 SQLServer2000SP 引入, 从缓存中删除只查询计划已知在使用此内存的更改。 引入此更改目的问题其中某些查询计划用于游标未被删除。
偶尔即使使用此修复程序, 可能看到错误消息。 随着时间 (分钟) 到小时有可能, 建立额外缓存计划并再次出现该信息。 这可能是正常并通过本身不作为一个符号的问题应采取。
回到顶端
--------------------------------------------------------------------------------
这篇文章中的信息适用于:
• Microsoft SQL Server 2000 Developer Edition
• Microsoft SQL Server 2000 Standard Edition
• Microsoft SQL Server 2000 Enterprise Edition
• Microsoft SQL Server 2000 Personal Edition
• Microsoft SQL Server 2000 Workgroup Edition
• Microsoft SQL Server 2000 Desktop Engine (Windows)
• Microsoft SQL Server 2000 64-bit Edition
回到顶端
关键字: kbhotfixserver kbqfe kbqfe kbfix kbbug kbsqlserv2000presp4fix KB818095 KbMtzh kbmt
回到顶端
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
;sid=1055
可以换个方式重写这些代码。这样循环相信你也快不到哪去。
另外,把你的SQL语句response出来,放到分析器执行一下,看一下时间。
If Rs.Eof and Rs.Bof Then
Do While Not Rs.EOF这个也不用了,不是和前面判断重复了。