从MS SQL删除大数据说开去-1

上一篇 / 下一篇  2012-04-01 10:00:39 / 个人分类:数据库

对于数据库中删除数据,你说要注意什么呢?代码怎样写?

W\x[aM0  多数同学看到这两个问题,想都不想就说,就一个Delete语句,注意删除的条件不要删除错了就是,有什么好注意的!

z(E c\3P051Testing软件测试网+}MM$U%[

  是的,可以我再问一下,删除动作是会写日志的,你放日志的磁盘够空间吗?

b&x0^DSEQBE051Testing软件测试网W!g_2oOyf7X F8O

  本文的内容:

/ts1U6i(I3\t)ig0

XB+vL'N9W0  1、我先举个实际的工作问题;

z)Fy \ _G1B|p0

Dh5n v ~,v0  2、整理T-SQL的删除数据的语句和写法;51Testing软件测试网Q2cV"J Svi

51Testing软件测试网|$M(dh'ZbW5BT

  3、解决这个工作中的问题和效果总结。

P h}g lu wt0

R,o;sl7w)b"Gt0  先举个我实际工作中的事例,我们在这样的一个应用,每天定时收集一些数据写入数据库中,数据库中有一批表(十几个)存放这些数据,由于数据量很大,三个月的单表数据在1亿以上,所以,我们只用表保存90天的数据,用于做什么我们在这里不关心好不好。在每天都有一个Job去删除90天以前的数据。由于这是很早前,我的前辈所做的,现在人已不在这公司了。这些表所有的动作就以下的语句来删除:51Testing软件测试网h Pbg"Z5by2i/i

9[ |}p7I(O ve0

#@i3xDK0
1:  DELETE FROM dbo.S5_BinTest_Detail
D6ub RIN02:         where BinTestID in (SELECT BinTestID51Testing软件测试网8Y:`[ O0m%` H
3:             from dbo.S5_BinTest_Info51Testing软件测试网6~$Mb%wQak.A
4:             where TS <dateadd(dd,-90,getdate())
,k3P2B"Z.nd05:         )
r_G |2T5b}o4rDR06:         and datediff(dd,(select min(TS) from S5_BinTest_Info),TS)<=0
+r3o\(`D N/C07:51Testing软件测试网%r:MS:Wknd:Z0WB^
8:   DELETE from dbo.S5_BinTest_Info where TS <dateadd(dd,-90,getdate())51Testing软件测试网2nw9Pc|qUB
9:         and datediff(dd,(select min(TS) from S5_BinTest_Info),TS)<=0
51Testing软件测试网ZZ0M$jG9l0z?

E zIpW051Testing软件测试网"Pp3xy5PaO9E5Ub

  这只是一次只删除一天的数据,也就是日期最早的,90天以前的。昨晚就收到了以下的服务器报警:51Testing软件测试网zi|-rWrJG

6}*S? zi9A0

  我看到平时服务器上各磁盘的空间使用情况如下,D盘是日志文件所在的盘,平时大概有95G的可用空间;51Testing软件测试网3kFFk,mWQ~f|qk#c

  E盘是数据文件存放的盘,平时有170G的可用空间。由于数据每天的新增和删除的量都基本平衡,所以也就没有多大的变化。

?bo5@7R#P4`i0

51Testing软件测试网 vqJ"Pa#{

  现在看到数据库文件已有121G这么大。多个亿级别的表了。

zw(V i ]g[%U0

51Testing软件测试网 _%vJY B.{Pm?


TAG:

 

评分:0

我来说两句

Open Toolbar