【问题标题】:Partition strategy分区策略
【发布时间】:2012-05-23 16:32:18
【问题描述】:

起点
我用数据填充了一个表,为了比较每次运行的数据,我添加了一列“运行”(整数)。
我保留最后 5 次运行。由于我在表中运行 2 次后不断超时,因此我决定在“运行”时对表进行分区。

我做了什么
1. 我创建了一个有 1000 个分区的分区表(我想“运行”是从 1 到 1000),最多只有 5 个分区,其他 995 个是空的,等到下一次运行将放在那里的那一刻。
2. 我创建了使用上述分区功能的分区方案,并将所有分区(即 1000)保留在 PRIMARY 文件组中。
3. 我在“运行”时对表进行了分区。

结果:不再超时,但处理时间增加了 50%。

问题:在我的分区策略中哪些点不是最理想的?我应该创建 5 个分区并更改我对运行进行编号的方式吗?

【问题讨论】:

    标签: sql-server sql-server-2008 tsql


    【解决方案1】:

    分区不是性能问题的解决方案。您正在寻找索引。分区会减慢处理速度,您可以期望的最好的结果是与非分区表的性能相当。分区非常适合数据管理场景,用于使用分区切换(ETL 或数据过期)进行快速数据移动。

    您需要调查为什么会超时。有根据的猜测将指示表扫描(即缺少索引)。一个好的方法是Waits and Queues

    【讨论】:

    • 我得到了超时,因为对于超过 3 次运行的 ETL 过程中的步骤之一,表变得太大而无法处理。通过分区,它只处理一个分区,这就是为什么我在分区后没有超时(至少这是我的想法)。建索引,我还是超时了,可能我应该在分区后尝试建索引。我接受性能下降,我只是想知道是否可以将其保持在较低水平,从而改变我进行分区的方式。
    • 也许吧。下一步将是建立指数。问题是如果在分区步骤上可以用另一种方式完成。即想象在分区之前和之后没有索引,可以更优化地完成吗?例如,如果真的只需要 5 个分区,是否可以构建 1000 个分区?并感谢您的称职回答和 cmets!
    • 1000 个分区,最多只有 5 个,其余 995 个是空的等待:绝对不要这样做。有 6 个分区(5 个使用,1 个空)。在加载之前将第 6 个拆分为 2 个,因此您有 7 个,然后加载以使 6 个在使用中而 1 个为空。等等。在 SQL Server 2012 之前,拥有大量分区是很成问题的。使用 SQL Server 2012(将支持扩展到 15k 分区),很多这些问题都得到了解决,并且可以拥有 1k 分区。尽管如此,推荐的模式是在加载之前拆分并有必要的分区 + 1(你总是需要 +1 空)。
    • 需要 +1 为空,以便快速拆分。您想拆分一个空分区(无数据移动,仅元数据),而不是一个有数据的分区(速度慢,必须实际移动行)。
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 2019-02-17
    • 2019-03-03
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多