定时分区和动态分区,那个方案比较好

soldierluo 2014-03-25 12:12:53
定时分区:定时进行分区,比如一月一个分区
动态分区:根据数据量来动态分区,比如每天执行job检查分区里的数据量,如果超过100w则分区,否则不分区

第一种分区每个分区的数据量差别会很大,因为业务是不断增长的
第二种分区每个分区的数据量差不多,但分区时间会越来越短,因为是定时检查的

请问,大家认为哪种分区比较好,各自的优缺点和适用情况
...全文
193 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-03-25
  • 打赏
  • 举报
回复
引用 2 楼 soldierluo 的回复:
我发现,这归结出来就一个问题,那就是我一次的查询数据是从多个分区中取快,还是从单个分区中取快 如果是从多个分区中取快,则应该采用动态分区 如果是从单个分区中取快,则应该采用定时分区 不知道这样理解对不对
没见过这种说法,不过你这两种分区策略本质上貌似不是一回事
LongRui888 2014-03-25
  • 打赏
  • 举报
回复
另外,建了分区,还得相应的建索引,分区只是把数据分开存储,当然逻辑上还是一个表, 比如,你只需要访问一个分区,执行计划是表扫描,而原来没分区,是对整个表进行表扫描,那么性能就能提升。 但是,如果需呀扫描多个分区,那么性能就会下降,因为得扫描多个分区后,还得union all合并数据
LongRui888 2014-03-25
  • 打赏
  • 举报
回复
引用 2 楼 soldierluo 的回复:
我发现,这归结出来就一个问题,那就是我一次的查询数据是从多个分区中取快,还是从单个分区中取快 如果是从多个分区中取快,则应该采用动态分区 如果是从单个分区中取快,则应该采用定时分区 不知道这样理解对不对
其实一般建立分区,最大的好处是,对数据的管理,以及历史数据的归档,比较方便,也就是主要在于管理上。 而对性能,针对不同情况,可能会有所提升,可能反而会有下降,不一定的。 不过一般,从单个分区取是快的,而从多个快取,是慢的。
soldierluo 2014-03-25
  • 打赏
  • 举报
回复
我发现,这归结出来就一个问题,那就是我一次的查询数据是从多个分区中取快,还是从单个分区中取快 如果是从多个分区中取快,则应该采用动态分区 如果是从单个分区中取快,则应该采用定时分区 不知道这样理解对不对
guguda2008 2014-03-25
  • 打赏
  • 举报
回复
无论哪种方式,保证你的分区策略可控就可以。 如果是定时分区,需要根据数据量变更情况定期调整分区间隔时间 如果是自动分区,需要定期检查分区数量和相关操作执行时间是否在预期范围内,发现问题不对及时修正。
LongRui888 2014-03-25
  • 打赏
  • 举报
回复
引用 16 楼 soldierluo 的回复:
越讨论越复杂了,凡事讲究一个平衡,我就是想在方案和性能间寻找一个平衡 我就是来借鉴大家这方面的经验的,我人懒,越简单越好
呵呵,那就采用定时分区吧,这个实现也简单,管理业简单。
soldierluo 2014-03-25
  • 打赏
  • 举报
回复
越讨论越复杂了,凡事讲究一个平衡,我就是想在方案和性能间寻找一个平衡 我就是来借鉴大家这方面的经验的,我人懒,越简单越好
LongRui888 2014-03-25
  • 打赏
  • 举报
回复
引用 12 楼 soldierluo 的回复:
[quote=引用 11 楼 yupeigu 的回复:] [quote=引用 7 楼 soldierluo 的回复:] [quote=引用 5 楼 DBA_Huangzj 的回复:] [quote=引用 2 楼 soldierluo 的回复:] 我发现,这归结出来就一个问题,那就是我一次的查询数据是从多个分区中取快,还是从单个分区中取快 如果是从多个分区中取快,则应该采用动态分区 如果是从单个分区中取快,则应该采用定时分区 不知道这样理解对不对
没见过这种说法,不过你这两种分区策略本质上貌似不是一回事[/quote] 所以问问大家,看大家有没考虑过或遇到过这样的情况[/quote] 不建议用动态分区,这个不好管理,因为分区本身最大的优点就是可管理性,而你引入动态分区,你还得不断扫描数据,然后来判断这个数据归入哪个分区,这个很累的呢。 我觉得,如果你实战想要平均分配,那么还不如考虑增加一个代理键,自增列,然后通过范围分区,规定,比如: 1-100w 分区1 ... 这么分区,就行,没必要采用动态分区。 [/quote] 多谢回复,这样考虑的话,看来还是定时分区了,范围分区不符合实际的要求 我以前的系统用的就是动态分区,每100万数据一个分区,基本上每一到两天分一次,效果嘛,比不分区好,但也没到天上地下的差别,这次用定时分区试试 而之前用动态分区的逻辑是,现在是多核多线程并行系统,所以,我觉得分区越小越多越少,因为可以把多核多线程资源更多的利用起来[/quote] 充分运用系统资源是对的。 呵呵,不过也需要考虑io方面的问题,通过把分区放到不同的物理硬盘上,通过并行的IO,来提高读写性能。
soldierluo 2014-03-25
  • 打赏
  • 举报
回复
而之前用动态分区的逻辑是,现在是多核多线程并行系统,所以,我觉得分区越小越多越好,因为可以把多核多线程资源更多的利用起来
發糞塗牆 2014-03-25
  • 打赏
  • 举报
回复
分区的数量和版本有关系,别太容易就达到上限
soldierluo 2014-03-25
  • 打赏
  • 举报
回复
引用 11 楼 yupeigu 的回复:
[quote=引用 7 楼 soldierluo 的回复:] [quote=引用 5 楼 DBA_Huangzj 的回复:] [quote=引用 2 楼 soldierluo 的回复:] 我发现,这归结出来就一个问题,那就是我一次的查询数据是从多个分区中取快,还是从单个分区中取快 如果是从多个分区中取快,则应该采用动态分区 如果是从单个分区中取快,则应该采用定时分区 不知道这样理解对不对
没见过这种说法,不过你这两种分区策略本质上貌似不是一回事[/quote] 所以问问大家,看大家有没考虑过或遇到过这样的情况[/quote] 不建议用动态分区,这个不好管理,因为分区本身最大的优点就是可管理性,而你引入动态分区,你还得不断扫描数据,然后来判断这个数据归入哪个分区,这个很累的呢。 我觉得,如果你实战想要平均分配,那么还不如考虑增加一个代理键,自增列,然后通过范围分区,规定,比如: 1-100w 分区1 ... 这么分区,就行,没必要采用动态分区。 [/quote] 多谢回复,这样考虑的话,看来还是定时分区了,范围分区不符合实际的要求 我以前的系统用的就是动态分区,每100万数据一个分区,基本上每一到两天分一次,效果嘛,比不分区好,但也没到天上地下的差别,这次用定时分区试试 而之前用动态分区的逻辑是,现在是多核多线程并行系统,所以,我觉得分区越小越多越少,因为可以把多核多线程资源更多的利用起来
LongRui888 2014-03-25
  • 打赏
  • 举报
回复
引用 7 楼 soldierluo 的回复:
[quote=引用 5 楼 DBA_Huangzj 的回复:] [quote=引用 2 楼 soldierluo 的回复:] 我发现,这归结出来就一个问题,那就是我一次的查询数据是从多个分区中取快,还是从单个分区中取快 如果是从多个分区中取快,则应该采用动态分区 如果是从单个分区中取快,则应该采用定时分区 不知道这样理解对不对
没见过这种说法,不过你这两种分区策略本质上貌似不是一回事[/quote] 所以问问大家,看大家有没考虑过或遇到过这样的情况[/quote] 不建议用动态分区,这个不好管理,因为分区本身最大的优点就是可管理性,而你引入动态分区,你还得不断扫描数据,然后来判断这个数据归入哪个分区,这个很累的呢。 我觉得,如果你实战想要平均分配,那么还不如考虑增加一个代理键,自增列,然后通过范围分区,规定,比如: 1-100w 分区1 ... 这么分区,就行,没必要采用动态分区。
LongRui888 2014-03-25
  • 打赏
  • 举报
回复
引用 6 楼 soldierluo 的回复:
[quote=引用 4 楼 yupeigu 的回复:] 另外,建了分区,还得相应的建索引,分区只是把数据分开存储,当然逻辑上还是一个表, 比如,你只需要访问一个分区,执行计划是表扫描,而原来没分区,是对整个表进行表扫描,那么性能就能提升。 但是,如果需呀扫描多个分区,那么性能就会下降,因为得扫描多个分区后,还得union all合并数据
不管分不分区,索引都是要建的,难道分区表的索引和普通表的索引还不一样?(除了分区键)[/quote] 不完全一样,如果你的表时分区表,那么索引就分为,分区索引 和 全局索引。 所谓分区索引,就是比如你按xx字段来做分区表,然后建立索引时,指定分区架构,那么这个索引就是分区索引,特点是,每个分区都会有一个索引,如果你有10个分区,那么就会有10个分区索引。 而全局索引,是针对整个表的所有数据的索引,比如xx是分区字段,但是还有其他的查询条件,比如yy字段,那么你建立yy字段建立索引,那么这个就是全局索引,只有一个。
發糞塗牆 2014-03-25
  • 打赏
  • 举报
回复
另外一般要3000万以上的数据才建议分区,如果用高版本的sqlserver,这个数字还要增加
發糞塗牆 2014-03-25
  • 打赏
  • 举报
回复
动态分区有个不好的地方,当刚好你在用的时候,包括update、delete、insert,但是刚好达到100W,那么就触发分区。不过这个倒好处理。另外分区有其特性,如果分区不对齐、数据查询跨区太多,那么性能很难有保证,分区主要还是为了减少访问的范围。如果不能从中获取主要利益,那么不分区可能会更好
soldierluo 2014-03-25
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
[quote=引用 2 楼 soldierluo 的回复:] 我发现,这归结出来就一个问题,那就是我一次的查询数据是从多个分区中取快,还是从单个分区中取快 如果是从多个分区中取快,则应该采用动态分区 如果是从单个分区中取快,则应该采用定时分区 不知道这样理解对不对
没见过这种说法,不过你这两种分区策略本质上貌似不是一回事[/quote] 所以问问大家,看大家有没考虑过或遇到过这样的情况
soldierluo 2014-03-25
  • 打赏
  • 举报
回复
引用 4 楼 yupeigu 的回复:
另外,建了分区,还得相应的建索引,分区只是把数据分开存储,当然逻辑上还是一个表, 比如,你只需要访问一个分区,执行计划是表扫描,而原来没分区,是对整个表进行表扫描,那么性能就能提升。 但是,如果需呀扫描多个分区,那么性能就会下降,因为得扫描多个分区后,还得union all合并数据
不管分不分区,索引都是要建的,难道分区表的索引和普通表的索引还不一样?(除了分区键)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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