关于分区表的创建

jldzy 2014-07-29 02:05:31
现在有一个表里面有一个字段FID,每个月大概的增长量是30w 左右,而且只有最近3个月的数据是经常被访问到的。
目前做法是 按照FID 进行分区,1,30w, 30w到60w, 60w到90w, 相当于1年12个分区,10年就120个分区,

感觉现在做法有2个不好:
1 分区太多了,以后好难维护
2 只有最近3个月数据才经常被访问,其他都是历史数据,创建那么多分区完全是多余。

本来是想建立4个分区, 最近1个月,最近2个月,最近3个月,其他所有的。 但是这个时间不好定义,因为时间是一直在变化的,确定不了范围,所以采用了FID分区,但是FID 也是在不停的增长,做了建立了好多空的分区。

大家有什么好的建议?
...全文
307 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
jldzy 2014-07-30
  • 打赏
  • 举报
回复
1. 只建两个分区,一个是近三(或四个月的)个月的,一个是三个月之前的。每周(月)执行一个JOB,把数据迁走; 有下面2个问题 1 如果现在有4个大表,每个表都有FID字段,按照 每个分区对应一个filegroup, 那么是不是要创建8个group, fg1 fg2 fg3 fg4 fg5 fg6 fg7 fg8 tba(fg1,fg2) tbb(fg2,fg3) tbc(fg4,fg5) tbd(fg6,fg7) 2 每周(月)执行一个JOB,把数据迁走; 这个数据怎么迁走? 我现在想到就是 分区合并 和 新增加。 假如1,500w 是一个历史分区,500w 后面的是另外一个分区,这数据怎么迁走 ?
卖水果的net 版主 2014-07-30
  • 打赏
  • 举报
回复
1. 只建两个分区,一个是近三(或四个月的)个月的,一个是三个月之前的。每周(月)执行一个JOB,把数据迁走; 2. 不用分区表,使用历史表的形式,近3、4个月的数据存在 T 表中,超过 3、4个月的数据,移动到 T_his 表中。
jldzy 2014-07-29
  • 打赏
  • 举报
回复
其实我现在想做的是, 因为 现在有 4个 特别大的表, 想建立4个filegroup , 每个表 有不同filegroup,
jldzy 2014-07-29
  • 打赏
  • 举报
回复
你可以共享下你的白皮书吗,我刚好在设计分区,想学习下。
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
如果之间的逻辑相似,并且后续改动不大,可以。如果改动很大,用同一个schema可能会引起混乱
jldzy 2014-07-29
  • 打赏
  • 举报
回复
最近在看分区的白皮书,理论上是可以公用,但是微软建议专用。 假如 有5个表 中都含有 FID,并且都要做分区,按照一个分区2个filegroup, 那岂不是要创建 10 个filegroup. 对于不同的分区,filegroup 可以共用吗 ?
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
关于你私信的问题:“想问下, 多个不同的表 理论上是可以共用同一 分区函数和分区schema, 不知道这样做会有什么影响不呢?“ 最近在看分区的白皮书,理论上是可以公用,但是微软建议专用。 另外我的私信经常没提醒,偶尔点一下看才发现有,所以别私信问了,直接在帖子引用就好
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
分区另外一个好处是在并行插入,你如果带有where条件的insert、delete,有分区更加高效
jldzy 2014-07-29
  • 打赏
  • 举报
回复
那不合并大分区也行,一个系统很少真的能不变化地用10年 ??? 你的意思是 不合并的话,还是用120个分区,可是分区多了,势必会影响 插入,删除 , 更新的速度的。
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
那不合并大分区也行,一个系统很少真的能不变化地用10年
jldzy 2014-07-29
  • 打赏
  • 举报
回复
我明白你的意思, 但是 问题还是 在不能确定 大分区 范围啊, 因为FID 在不停的增长,动态的。 不知道这样可以不? 现在是 1-30w 分区1 30-60w 分区2 60-90w 分区3 90-120w 分区四 。。。。 在一个特定的时间执行 分区合并,例如把 分区1 2 3 进行合并。
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
不用新建表啊,新建个空的分区就可以了
jldzy 2014-07-29
  • 打赏
  • 举报
回复
所以叫你把历史数据移到一个大分区,单独放到一个文件组. 但是这样要建立一个新表,相当于 现在有2个表, 一个 last ,一个his 的, 但是这样对程序来说就比较麻烦了,假如修改文件,要判断是在last 还是在his 里面, 当初就是因为这个,才选用分区表。
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
引用 17 楼 jldzy 的回复:
担心出现问题, 目前做法是 按照FID 进行分区,1,30w, 30w到60w, 60w到90w, 相当于1年12个分区,10年就120个分区, 这样的分区 对于历史数据 分那么多区 完成没有必要, 而且分区太多了。
120个分区从技术上来说实在不多,但是管理上也的确有点头痛,所以叫你把历史数据移到一个大分区,单独放到一个文件组
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
引用 16 楼 jldzy 的回复:
关于上面刚刚讨论文件组,有3个问题 1 只能有一个mdf, 但是可以有多个ndf 。 如果mdf ndf 在一个盘上,那么创建多个ndf 还有意义吗? mdf ndf 是同时写入的,还是等mdf 写满了,在写ndf ? 2 创建表的时候可以指定filegroup ,没有指定就是在primary, 3 创建分区的时候,可以指定多个文件组 on primary, fg1,fg2,fg3 。 怎么查询数据分布在哪个fg ?
第一个问题,如果mdf/ndf在同一个文件组,数据会按文件的空余空间按比例写入,除非某个文件设为不可增长。但是不建议把primary文件组设为不可增长或者read-only。分开多个文件某些情况下是有用的,SQL Server可以支持文件级别的备份还原。对于超大型的数据库有意义。 第二个问题:对的。 第三个问题:数据很难说分布在那个fg,可以用$partition试试,或者找找有没有相关脚本。不过根据分区函数,你应该可以算出大概区间。
jldzy 2014-07-29
  • 打赏
  • 举报
回复
担心出现问题, 目前做法是 按照FID 进行分区,1,30w, 30w到60w, 60w到90w, 相当于1年12个分区,10年就120个分区, 这样的分区 对于历史数据 分那么多区 完成没有必要, 而且分区太多了。
jldzy 2014-07-29
  • 打赏
  • 举报
回复
关于上面刚刚讨论文件组,有3个问题 1 只能有一个mdf, 但是可以有多个ndf 。 如果mdf ndf 在一个盘上,那么创建多个ndf 还有意义吗? mdf ndf 是同时写入的,还是等mdf 写满了,在写ndf ? 2 创建表的时候可以指定filegroup ,没有指定就是在primary, 3 创建分区的时候,可以指定多个文件组 on primary, fg1,fg2,fg3 。 怎么查询数据分布在哪个fg ?
發糞塗牆 2014-07-29
  • 打赏
  • 举报
回复
那用FID来分区也行。你现在是出现问题了还是担心出现问题?
jldzy 2014-07-29
  • 打赏
  • 举报
回复
我们是处理文件的,这个FID 代表就是文件ID, 这个ID 每个月增长量在 30w 左右, 80%是处理最近3个月的数据。 其他都是历史数据。 所以现在是按照FID 来分区。
加载更多回复(13)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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