各位老大,我的问题如下:
我有一套用ASP写的程序,有一个很复杂的查询,用的是存储过程(用邹建老大的分页存储过程改的)这套程序在一台普通PC上面显示出页面的速度是2秒以内,但是同一套程序在一台双CPU HP DL380刀片服务器上运行的速度要20秒以上,客户不能忍受这样的速度我查找了很久,如果说因为SQL语句写得不好,那应该在哪台机器上速度都一样慢才对,我现在怀疑是SQL SERVER设置或者是服务器的系统问题,已经重装了两次SQLSERVER2000,补丁打到SP4了,还是不能解决问题因为要重装服务器很麻烦,涉及很多应用,现在请教各位老大,有啥解决方法
小妹在这里谢谢了
能解决问题的,立即给分,谢谢!
我有一套用ASP写的程序,有一个很复杂的查询,用的是存储过程(用邹建老大的分页存储过程改的)这套程序在一台普通PC上面显示出页面的速度是2秒以内,但是同一套程序在一台双CPU HP DL380刀片服务器上运行的速度要20秒以上,客户不能忍受这样的速度我查找了很久,如果说因为SQL语句写得不好,那应该在哪台机器上速度都一样慢才对,我现在怀疑是SQL SERVER设置或者是服务器的系统问题,已经重装了两次SQLSERVER2000,补丁打到SP4了,还是不能解决问题因为要重装服务器很麻烦,涉及很多应用,现在请教各位老大,有啥解决方法
小妹在这里谢谢了
能解决问题的,立即给分,谢谢!
使用以下语句查询的结果
=============================
正常
============================================
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
SQL Server 分析和编译时间:
CPU 时间 = 15 毫秒,耗费时间 = 133 毫秒。(所影响的行数为 63 行)表 'User_ImpowerData'。扫描计数 1,逻辑读 12 次,物理读 2 次,预读 10 次。
表 'Stream_BasicData'。扫描计数 2234,逻辑读 4873 次,物理读 0 次,预读 396 次。
表 'Worktable'。扫描计数 2233,逻辑读 32233 次,物理读 0 次,预读 0 次。
表 'Application_BasicData'。扫描计数 1,逻辑读 123 次,物理读 1 次,预读 122 次。SQL Server 执行时间:
CPU 时间 = 329 毫秒,耗费时间 = 816 毫秒。============================================
慢
============================================
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
SQL Server 分析和编译时间:
CPU 时间 = 16 毫秒,耗费时间 = 85 毫秒。(所影响的行数为 61 行)表 'User_ImpowerData'。扫描计数 1,逻辑读 12 次,物理读 1 次,预读 6 次。
表 'Stream_BasicData'。扫描计数 4460,逻辑读 399576 次,物理读 1 次,预读 374 次。
表 'Application_BasicData'。扫描计数 1,逻辑读 125 次,物理读 1 次,预读 102 次。SQL Server 执行时间:
CPU 时间 = 9859 毫秒,耗费时间 = 9892 毫秒。
============================================
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
set statistics io on
set statistics time on
go
SELECT t1.str_action,t1.str_tuserip,t0.* FROM application_basicdata t0 LEFT OUTER JOIN stream_basicdata t1 ON t1.str_appno=t0.app_no AND t1.str_no IN(SELECT TOP 1 str_no FROM stream_basicdata WHERE str_appno=app_no ORDER BY str_no DESC) LEFT OUTER JOIN user_impowerdata t2 ON t2.uid_userno='lixn001' WHERE CHARINDEX('004',t1.str_tdeptno)!=0 AND t0.app_finishtag='0' AND (t1.str_tuser='' AND CHARINDEX(t0.app_typeno,t2.uid_usual_apptype)!=0 AND(case t1.str_tuserip when 'uid_ip_apply' then t2.uid_ip_apply when 'uid_ip_scan' then t2.uid_ip_scan when 'uid_ip_transmit' then t2.uid_ip_transmit when 'uid_ip_ground' then t2.uid_ip_ground when 'uid_ip_finishmodify' then uid_ip_finishmodify end)='1')OR t1.str_tuser='lixn001' AND t1.str_tdeptno='004' ORDER BY t0.app_no DESC
二种方法,服务器肯定不一样!
t1.str_no =(SELECT TOP 1 str_no FROM stream_basicdata WHERE str_appno=app_no ORDER BY str_no DESC) t0.* 换成 table 里面的每一个字段
gaojier1000(V2※高捷) 上面已经有贴我的语句
表 'Worktable'。扫描计数 2233,逻辑读 32233 次,物理读 0 次,预读 0 次。WORKTABLE应该是系统自动产生的一个临时表,我的数据库设计中并没有这个表而运行很慢的那个服务器上
表 'Stream_BasicData'。扫描计数 4460,逻辑读 399576 次,物理读 1 次,预读 374 次。
而且没有WORKTABLE表有高手能就这个解释一下吗
2;指定索引作为查询计划,而不是让服务器优化