首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分区能帮助加速在一个非常大的表上的插入吗?

分区能帮助加速在一个非常大的表上的插入吗?
EN

Database Administration用户
提问于 2016-08-17 22:59:15
回答 2查看 7.2K关注 0票数 0

一些背景:

  • SQL 2012企业
  • 目前处于1B记录的OLTP表
  • 记录每天增加5-10百万
  • 带闪存的三伦
  • 两个索引(一个聚集标识int)

我们注意到,随着时间的推移,插入的速度逐渐放缓,如果保持不变,这将最终成为企业的一个问题。

问题:我们计划很快在这个表上使用分区,主要用于空间管理,但这里的主要问题是分区是否有助于提高插入的性能。(我们已经知道选择的性能提升了,如果可能的话,请不要对此发表评论。)

我已经做了相当数量的搜索论坛等,但没有发现任何具体的插入和分区。在我看来,随着时间的推移,这将有助于保持速度,因为我们将在“插入日期”上进行分区,并且插入将始终指向最近的分区,但需要确认。

谢谢大家。

更新:为了澄清:由于OLTP的性质,并且需要在插入后立即读取数据,所以暂存表(用于切换)不是一个选项,这两个表都不能延迟等待切换。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2016-08-18 01:04:44

简短的回答:是的,它可以帮助,因为理论上它是即时的。您可以将数据插入具有与主分区表相同定义的暂存表中,然后将其切换到分区表中,这是元数据操作(模式锁)。

很长的答案:从长远来看,拥有这么大的表可能会使性能受到影响,而且除非您移到Server的更高版本,否则统计数据更新很难管理。

如果这是一个读取量大的表,我会考虑使用视图分区。每个月(例如)都会得到自己的表,在date列上带有check约束,以帮助查询优化器了解数据物理存储的位置,并在表顶部显示一个视图:

代码语言:javascript
运行
复制
SELECT col1, col2, col3, col4 FROM period201501
UNION ALL
SELECT col1, col2, col3, col4 FROM period201502
...
SELECT col1, col2, col3, col4 FROM period201608

(或其他)。然后,元数据操作是视图的更新,而不是分区表的切换。

票数 1
EN

Database Administration用户

发布于 2016-08-18 01:28:15

这取决于很多情况。在大多数情况下,当每个相关查询都使用分区筛选器时,分区主要是通过并发性为插入/更新/删除和查询优化器快捷方式带来的好处。通常,一个较小的分区对前者的性能会更好,正如您所推测的。

然而,分区开销可能会导致性能问题,这取决于所涉及的复杂性。在尝试分区之前,您应该尝试查看索引和表的设计,但是如果您确定要迁移到分区(或者由于磁盘原因需要分区),那么您可以从分区中获得最好的插入性能依赖于分区切换。

高层次的前提是在一天内将数据插入到一个暂存堆表中,然后当您准备将其移动到分区时,应用匹配的索引和约束。然后,您可以使用开关命令将新的“分区”作为新分区弹出到较大的分区表中。详细信息可以找到这里和更详细的概述这里

这主要用于数据仓库,因此根据您的主键结构和/或业务需要,此插入方法可能不适用于您。您还可以使该暂存表成为一个活动组件,而不是您要转储到的堆,这样做对性能的影响更大。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/147124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档