SQLServer分表项目方案总结

环境信息

基于C#语言、SqlServer数据库。

本次分表的目的

问题现状

    业务系统随着时间的进展,数据越来越多,系统运行越加缓慢,所有数据存在一个表中,单表数据量已经到达几个亿(笔者项目单表突破5亿条),并且伴随业务增长字段仍可能继续增加。对数据进行规范存储,提高系统性能的需求已经刻不容缓。

解决方案

对数据进行逻辑表分,将数据按季度、月度进行拆分。

其他方案

分区表(与本方案不冲突,可选择一种进行实施,也可以结合使用)

总体流程

通过特定的时任务(数据库计划,或者windows任务,或者其他工具;笔者项目采用自己开发的windows服务)进行数据分表拆分。

具体步骤

  1. 建立索引表;

索引记录分表的记录,查询时通过索引表快速找到数据所在的分表。

  1. 建立分表相关存储过程(笔者建立了7个存储过程,相互调用),如下:

 

  • 复制源表主键
  • 复制表结构及索引
  • 建立分表
  • 迁移数据
  • 批量迁移数据(历史数据迁移入口)
  • 根据营业日期迁移数据(营业时迁移数据入口)
  • 获取分表结果集(查询数据入口)
  1. 利用工具进行历史数据分表(可利开源的ETL工具:Kettle,笔者是自己开发的一个工具),此处特别注意大批量数据操作带来的影响
  2. 建立定时任务,定时执行存储过程,以执行日常营业数据的分表;

源表中的数据保存期限

源表保留若干天的数据冗余,以便数据迁移出现问题可进行问题分析,特别是在项目刚实施阶段,以避免分表造成数据遗漏。

注意点

分表的作用

  • 数据量小的系统,分表对性能的提升微乎其微;只有当数据量大到一定等级的时候,分表的优势才能有所体现;
  • 分表还有一个重要的思维:对数据的管理,按特定的维度将数据保存在不同的集合中;
  • 如果磁盘成为瓶颈,建议采用分区表,将数据拆分到不同的磁盘,也可通过多个磁盘提高计算能力。

对于单表数据量达多少可以分表的一些建议

笔者经过一番调查,给出如下关系型数据库单表记录数建议:

 

mysql

sqlserver

oracle

通常建议不超过

500W

500W

500W

最大建议不超过

2000W

2000W

5000W

数据库性能与服务器配置、索引、执行的sql复杂度有关,以上仅为参考值。

分表过程的具体逻辑请参考下一篇文章:SQLServer分表项目方案总结(续)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQL Server的分区分表是一种技术,用于处理大型数据库中的数据分布和维护。它可以将一个大的表分割成多个更小的分区表,以提高查询性能和管理效率。 首先,分区允许将数据分成更小的块,每个分区只包含一部分数据。这样一来,当查询只需要访问特定的分区时,可以减少数据的搜索范围,加快查询速度。此外,可以根据数据的特性对不同的分区应用不同的索引策略,从而进一步提高查询性能。 另外,分区还可以简化数据的维护和管理。通过分区,可以将数据按照某个特定的标准(如时间、地域等)进行分组和存储。这样一来,可以更方便地对特定的数据分组进行备份、恢复、迁移和删除等操作。同时,对于某些不常访问的分区,还可以将其存储到较慢但容量更大的存储介质中,以节省成本。 在SQL Server中,可以通过在表上创建分区方案和分区函数来实现分区分表。分区方案定义了如何将数据分割成不同的分区,而分区函数则定义了将数据映射到特定分区的规则。通过合理设计分区方案和分区函数,可以根据实际需求进行数据的分区和查询优化。 总的来说,SQL Server的分区分表是一种强大的数据管理技术,可以有效提高数据库的性能和可维护性。通过合理设计和配置分区方案和分区函数,可以更好地满足不同场景下的数据需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pezynd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值