问题:已有系统上传速度很慢,经常卡死!
准备重写程序,但是可能是看了太久原来的那个代码,现在没有思路,被困住了
希望各位能给支支招:主要是数据库方面的,表设计等。。。
12 个解决方案
#1
估计是每人愿意帮你重新设计的。
你可以自己先设计一个,帮你改改倒是可能。
你可以自己先设计一个,帮你改改倒是可能。
#2
你要看看“慢”是在上传的哪部分,是传到文件服务器上慢(也就是网络问题)还是存到数据库慢(数据库的问题)?如果是网络问题,就没必要改动设计,如果是数据库慢,那就要检查插入SQLServer的时候是否有过多的约束、索引、判断?或者是对大数据量却一行一行插入等问题。先找原因,再找处理方法,你这个想法我觉得不保证有效。
#3
嗯,期待答案,和实践,并得到结论
#4
不好意思,新手问的问题描述不太清楚(主要是我也没把原程序理解透彻)。
首先网络是没有问题的,那就是代码出问题了。例如,在A中写的存储过程中,有一步是要根据A中某表的数据删除服务器B中某表的的数据,这一步用单条逐步可以实现,或者将待处理数据id全部插入B的临时表,然后再调用B中存储过程删除冗余数据。但是这两种方法往往都会造成程序未执行完删除就卡死了。前者卡的数据相对来说还少很多。请问这个是否有悖于大数据量单条执行效率低呢?
#5
那你试试直接执行后面那种情况的语句,看看会不会非常慢?因为删除一条,本来就很快。所以基本上不存在卡死。但是大数据量的时候如果很慢,那就有可能卡住了。
#6
数据量一般不多几百条到一千条,单条逐步执行后会卡掉十几条未删除冗余数据,但是跨服务器执行存储过程(在B服务器上执行SQL:delete from 表 where id in (select id from 存放待删除数据id的表 ))这样就会卡很多。所以现在我常常需要在后台手动执行后续的删除工作(手动在B服务器上执行那个存过)
我在想,会不会跟程序里面query的commandtimeout(默认值30)属性有关,因为,当我把commandtimeout值设为0(无穷大),则程序虽然反应慢,但最终是能成功执行完包括删除冗余数据的!
#7
跨数据库甚至跨服务器需要做很多事情,比如权限检查等,本身就加大了处理的时间,而且索引、统计信息都仅在库中有效,所以速度上几乎不会比单库操作快。如果非必要,还是不建议使用跨库或者跨服务器处理。
#8
顶
#9
谢谢各位的帮助!我现在试一下多建个query来执行另一服务器的工作。这样速度可能会有所提高。结果待续
#10
#11
这个不跨服吧,你把语句都放到存储过程里做。
常见app慢的原因: http://www.sommarskog.se/query-plan-mysteries.html#linkedservers
常见app慢的原因: http://www.sommarskog.se/query-plan-mysteries.html#linkedservers
#12
由于测试数据量不足,可能提速表现不明显,但是分开执行两个链接不同服务器的存过好于一个跨服务器存过。改良后:(无未删除冗余数据)
#1
估计是每人愿意帮你重新设计的。
你可以自己先设计一个,帮你改改倒是可能。
你可以自己先设计一个,帮你改改倒是可能。
#2
你要看看“慢”是在上传的哪部分,是传到文件服务器上慢(也就是网络问题)还是存到数据库慢(数据库的问题)?如果是网络问题,就没必要改动设计,如果是数据库慢,那就要检查插入SQLServer的时候是否有过多的约束、索引、判断?或者是对大数据量却一行一行插入等问题。先找原因,再找处理方法,你这个想法我觉得不保证有效。
#3
嗯,期待答案,和实践,并得到结论
#4
不好意思,新手问的问题描述不太清楚(主要是我也没把原程序理解透彻)。
首先网络是没有问题的,那就是代码出问题了。例如,在A中写的存储过程中,有一步是要根据A中某表的数据删除服务器B中某表的的数据,这一步用单条逐步可以实现,或者将待处理数据id全部插入B的临时表,然后再调用B中存储过程删除冗余数据。但是这两种方法往往都会造成程序未执行完删除就卡死了。前者卡的数据相对来说还少很多。请问这个是否有悖于大数据量单条执行效率低呢?
#5
那你试试直接执行后面那种情况的语句,看看会不会非常慢?因为删除一条,本来就很快。所以基本上不存在卡死。但是大数据量的时候如果很慢,那就有可能卡住了。
#6
数据量一般不多几百条到一千条,单条逐步执行后会卡掉十几条未删除冗余数据,但是跨服务器执行存储过程(在B服务器上执行SQL:delete from 表 where id in (select id from 存放待删除数据id的表 ))这样就会卡很多。所以现在我常常需要在后台手动执行后续的删除工作(手动在B服务器上执行那个存过)
我在想,会不会跟程序里面query的commandtimeout(默认值30)属性有关,因为,当我把commandtimeout值设为0(无穷大),则程序虽然反应慢,但最终是能成功执行完包括删除冗余数据的!
#7
跨数据库甚至跨服务器需要做很多事情,比如权限检查等,本身就加大了处理的时间,而且索引、统计信息都仅在库中有效,所以速度上几乎不会比单库操作快。如果非必要,还是不建议使用跨库或者跨服务器处理。
#8
顶
#9
谢谢各位的帮助!我现在试一下多建个query来执行另一服务器的工作。这样速度可能会有所提高。结果待续
#10
#11
这个不跨服吧,你把语句都放到存储过程里做。
常见app慢的原因: http://www.sommarskog.se/query-plan-mysteries.html#linkedservers
常见app慢的原因: http://www.sommarskog.se/query-plan-mysteries.html#linkedservers
#12
由于测试数据量不足,可能提速表现不明显,但是分开执行两个链接不同服务器的存过好于一个跨服务器存过。改良后:(无未删除冗余数据)