如何加快batchmove的数据传送?(100分)

  • 主题发起人 主题发起人 mahu
  • 开始时间 开始时间
M

mahu

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在遇到一个问题,sql server作为服务器,
客户段用batchmove传数据,大概就3000条数据,
总共不过3、4百k,所传送的数据完全一样,有
时更新数据要五、六分钟,快的时候却只要一分钟,
偶尔还会死机,不知是什么问题。
是bde、server上的配置会影响传输的稳定,还是
网络的问题?请各位指教!!
 
我也碰到类似问题,总觉得SQL不及Foxpro,如果是Foxpro不要说一分钟,一眨眼就好.
那时主要是把一些Foxpro下的基础数据转移到SQL Server,反正就这么点事,做完后
也就不再用了,没考虑过到底是怎么回事.今天也想听听各位大虾的高见.
 
各种SQL数据库都有自己装入数据的方法,可以自己定义存储过程读取
外部数据,不过一般只认文本型的数据,你可将需读入的数据转成文本
数据再读入,会相当快的(可能快十倍).
 
rss,如果用你说的方法来处理比较简单可行的话,能否给个例子?
由于有很多任务要做,我不能测试各种方法.谢谢!
另外,我所遇到的问题应该说是系统的不稳定,
真的想听听各位大虾的意见.

 
哈哈,这个我会:
bkcopy最快,详细使用见命令行HELP和BOOK ONLINE;
也可以用Transfer,也不错,稳定高效。
 
数据库要排序!
 
batchmove的性能与其工作方式有很大关系,本人推测mahu 是在使用远程连接,并设为 bkappendupdate ,才遇到的情况。
这种情况下batchmove首先,下载Server上的所有数据,在本地比较后,在将更新上传到Server端。一般来讲Server上的数据量要大的多,网络的速度较慢时,就要就要花费很长时间,所以这个现象是必然会出现的。数据库的索引对此影响不大,主要是网络的速度在怍怪!
解决的方法:主要是减轻要传输的数据量。
(1)在Server端建立一个存储过程,及时转移目的表中的数据,最好一直为空;
(2)由Server端来完成batchmove过程
(以上为本人拙见,恳请各位大侠不吝赐教)
 
你的BatchMove用的Mode是啥?
我想多半是Server DB的物理设计有问题。
 
主要要看你的BatchMove 的模式 ,
完全的Insert
还是根据主键 Update ,
还是既有Insert 又有UPdate .

对于第三种模式, 我的办法是在Server上建立一个存储过程。
输入参数为目标表的结构。

在存储过程中作如下判断:
If 传入的主键值存在 then
Update tableX
else
insert tableX

这样可以在Server端完成主键的比较, 而不必进行网络间的通讯来查询主键键值,
从而提高效率。
 
问题已经解决了,谢谢大家!
解决方法是在服务器上建一个临时表,每次先将本地数据batchmove到
临时表中,然后将执行SQL命令,向数据表中添加数据,最后清空临时表,
保证临时表始终为空.解决方法和sagittarius提供的差不多,所以给
他70分,sea_sky提供的方法也有帮助.

我曾经采用query向服务器依次写入单条纪录(Append..post)时,但总
会在某些条纪录上引起sql sever的阻塞,导致整个程序无法响应.而从
服务器上的临时表向实际的数据表倒纪录却没有问题.不知道这究竟是
何原因?是表结构的问题,还是如sagittarius所说的数据量传输太大.

 
后退
顶部