超大数据量的数据库update

knight8210 2010-09-13 07:13:53
数据库版本:SQL2005
数据量描述:mdf文件60G, ndf文件130G
整个库包括几张表,对其中比较大的一张表进行操作,操作如下:增加一个字段,并通过该条记录其他字段的值对该字段进行赋值,即对整个表进行update。
问题如下:ndf文件变为了150G,log文件由1m增加为300G时,磁盘空间已经不足,可是我的update还没完成。

请高手帮我分析下问题,指点一二。

updte语句如下
declare @dateBegin datetime
set @dateBegin='20090101 00:00:00';
update tab1 set dayindex = DATEDIFF(day,@dateBegin,convert(datetime,substring(time,1,8))) + 1

==============================
注,刚开始是对部分数据(几m的数据量)进行处理,然后用结合VBA在excel出图。现在用C#结合出图插件来做,因为c#里面有类似的dayindex 函数,所以这个update数据预处理可以放在程序里面来做了。所以在程序里面做就不需要SQL2005的UPDATE数据预处理了。
上面那段话是换了个思路,但是我还是想知道几十G数据如果需要UPDATE该怎么做。
大师现身!
...全文
190 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Austindatabases 2010-09-13
  • 打赏
  • 举报
回复
1 首先把数据库改成SIMPLE模式,收缩你的LOG文件

2 分批的UPDATE 你的数据

3 最好开始考虑分区表(其实已经晚了,不过比不做要强)

祝你好运
Q724481678Q 2010-09-13
  • 打赏
  • 举报
回复
清空日志,压缩一下数据
应该没有那么大吧
njlywy 2010-09-13
  • 打赏
  • 举报
回复
分批处理,否则一旦出错就很麻烦…
飘零一叶 2010-09-13
  • 打赏
  • 举报
回复
alter table tab1 add dayindex as DATEDIFF(day,字段名1,字段名2) + 1
飘零一叶 2010-09-13
  • 打赏
  • 举报
回复
直接加个计算列 试一试

alter tab1 loan_base add dayindex as DATEDIFF(day,字段名1,字段名2) + 1
claro 2010-09-13
  • 打赏
  • 举报
回复
尝试1F的方式。
noteasytoregister 2010-09-13
  • 打赏
  • 举报
回复
alter database database_name set recovery simple
-- update
alter database database_name set recovery full
幸运的意外 2010-09-13
  • 打赏
  • 举报
回复
如此巨大的数据量,楼主慎重。分批次更新微妙,清空一下日志。不然后果太严重了。
noteasytoregister 2010-09-13
  • 打赏
  • 举报
回复
更改恢复模型为simple试试。
liangCK 2010-09-13
  • 打赏
  • 举报
回复
分批UPDATE试试。

22,209

社区成员

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

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