请教数据库的效率问题,频繁数据的插入和更新?

wunder 2008-01-28 10:46:12
系统每秒大概有5000~10000条数据需要插入到一表保持其详细数据,同时更新另一表使其保持最新数据,用ado+sql2005每秒只能处理200~300条左右,而单独执行插入或更新也只能在300~400左右,不知道数据库的处理瓶颈在哪?
试过多个链接对比单个链接效率改善不大。
...全文
657 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgh88888888 2008-05-20
  • 打赏
  • 举报
回复
学习,
xml批量处理值得考虑!
正宗老冉 2008-05-20
  • 打赏
  • 举报
回复
sqlbulkcopy
luoqun_ncs 2008-02-17
  • 打赏
  • 举报
回复
我的测试结果

如果不显式开启事务,就是每次insert都是一个单独的事务.insert速度是2k/s

换成每隔开启事务,100条提交一次,速度10k/s
artmouse 2008-02-16
  • 打赏
  • 举报
回复
XML文件最好不要超过1M

在我们系统中插入10年的价格数据
300×10=3000 条大概要2秒,不过要同时写4个表,楼主自己写个测试一下吧,可以开2个线程,
artmouse 2008-02-16
  • 打赏
  • 举报
回复
我也遇到过同样的问题,就是在短时间内要插入大量的数据

不知道楼主现在300-400的插入是怎么实现的,是开了个线程,一条一条的执行插入还是每次来个300条的批处理插入?

我现在用的方法是Openxml
1,传入一个包含若干记录的XML字符串
2,存储过程解析字符串并写入临时表
3,从临时表更新到目标表

楼主可以试一下,贴一段代码

CREATE PROCEDURE [dbo].[addMarketValueHistoryXML]

@inputXML ntext
AS
BEGIN

declare @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @inputXML
SELECT *
into #Temp1
FROM OPENXML (@idoc, '/root/MarketCap',2)
WITH (ShareClassId char(10) '@shareClassId',
AsOfPriceDate smalldatetime '@asOf',
MarketCap bigint '.')
EXEC sp_xml_removedocument @idoc

end




w2jc 2008-02-16
  • 打赏
  • 举报
回复
sql server 最快,莫过于 bcp 了
-------------------------------------------
非也,bulk insert比BCP还快,是最快的。
但是bulk insert只能导入(符合LZ的需要)
bcp则可以导入和导出。
xjlqlqlq 2008-02-15
  • 打赏
  • 举报
回复
sql server 最快,莫过于 bcp 了,考虑一下吧,除此没有更快的了,不用再找了。
w2jc 2008-02-15
  • 打赏
  • 举报
回复
如果逐条处理的话,ado通常会是瓶颈。

如果能批量处理的话,每秒怎么多的插入,I/O通常是瓶颈。



2 加索引,使其他查询操作更快,不影响更新
-----------------------------------------
索引多的话,更新和插入记录的速度会慢,因为要同时更新索引


像LZ这么大量的插入记录,表上面的索引越少越好。
luoqun_ncs 2008-02-14
  • 打赏
  • 举报
回复
之前做过这样的测试,普通pc上单表插入的速度大概在1000/s,多线程无效.所以你的结果是正常的.

>> 看sql的活动监视器里的进程都在等待writelog

数据库插入更新的速度取决于日志的写入速度.

留名吧,我测一下再告诉你
zefuzhang2008 2008-02-14
  • 打赏
  • 举报
回复

1 批量
2 加索引,使其他查询操作更快,不影响更新
wunder 2008-02-14
  • 打赏
  • 举报
回复
过年回来,继续
Rambo_Q 2008-02-14
  • 打赏
  • 举报
回复
填充因子改小点应该会有些帮助
fstao 2008-02-14
  • 打赏
  • 举报
回复
用sql2005吧,应该可以达到你的要求
Ji秋风 2008-02-14
  • 打赏
  • 举报
回复
ado不太熟悉
jdbc支持批量插入,但是要实现每秒5000-10000速度有一定难度。
zjcxc 2008-01-29
  • 打赏
  • 举报
回复
那你就用批量插入和更新

wunder 2008-01-28
  • 打赏
  • 举报
回复
硬盘做的raid5速度是不行,但是数据库效率应该不会这么低吧
而且我直接把数据保存到单个文件里居然可以,不会丢
wunder 2008-01-28
  • 打赏
  • 举报
回复

现在就是用的多线程,每线程一个链接,但是对效率影响不大
看sql的活动监视器里的进程都在等待writelog




饮水需思源 2008-01-28
  • 打赏
  • 举报
回复
仰望老大的钻石
ydlchina 2008-01-28
  • 打赏
  • 举报
回复
1 使用过程
2 插入前将索引等先删除。
zjcxc 2008-01-28
  • 打赏
  • 举报
回复
如果逐条处理, 效率不高是正常的
加载更多回复(5)

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧