2012-02-13 109 views
1

我有3个非常大的组合索引在复合键上的表。没有更新只能插入。新的插入不会在现有的索引范围内,但新的插入不会与聚集索引对齐,并且这些表会得到大量插入(每秒几百到几千)。想要做的是带填充因子= 100的DBREINDEX,然后将填充因子设置为5,并且仅将填充因子应用于插入。现在填充因子只适用于整个表格。有没有办法让填充因子只适用于插入(或插入和更新)?我不在乎目前的速度。我正在加载数据。当数据加载完成后,我将DBREINDEX设置为100.填充因子10与30相比,插入新数据的速率加倍。这种负载需要几天的时间,并且只有在数据加载之后才能上线。聚集索引与最终用户应用程序使用的主导查询对齐。填充因子和插入速度

我的做法是每天DBREINDEX,但问题是现在桌子变大了10 DBREINDEX需要很长时间。我已将索引编入“日常”表中,然后将每日按聚集索引排序的数据插入到生产表中。

如果你读到这更远。索引都是复合的,我在一个8核心服务器上运行了6个解析器实例(大量的测试并且似乎具有最佳吞吐量)。来自SINGLE解析器的数据是按PK顺序排列的,我一次只能插入990个值(SQL值限制)。这3个活动表只通过一个外键关系与一个相对不活动的第四个表共享数据。我此时的想法是为每个解析器保留表,然后让另一个进程轮询这些表以获得下一个完整插入,并将数据按PK顺序移入生产表。这将是很多工作。我希望有人有一个更好的主意。

解析以PK顺序开始,但很少以PK顺序完成。一些个人分析过于庞大,我无法在内存中保存所有数据。现在,SQL插入比创建数据的解析稍快。在单个解析中,我运行插入异步并继续解析,但不插入,直到先前的插入完成。

+1

我同意你应该拥有解析器数据表,并且只有当你准备好时才插入主表。我在以前的生活中实现了类似的东西(基于独特ID的mod 10将它准备哈希成10个表格,之后再转入主表中 - 主要是为了加快加载速度)。 – 2012-02-13 19:02:10

+2

如果你打算使用持有表,那么除了FF = 100之外,我认为没有必要拥有它们。你必须使用更好的页面更好 – 2012-02-13 19:03:05

+0

@AaronBertrand谢谢,在控股表策略中,一个解析可能(实际上就像)完成不按顺序,所以它会进入之前。如果我在解析结束时插入生产表上的填充因子应该是什么。如果一个表的填充因子为100,并且存在增量页面拆分,那么该页面是否拆分为50?对我而言这将是理想的。 – Paparazzi 2012-02-13 19:39:44

回答

0

我同意你应该拥有解析器数据表,并且只有当你准备好时才插入主表。我在以前的生活中实现了类似的东西(基于独特ID的mod 10将它准备哈希成10个表格,之后再转入主表中 - 主要是为了加快加载速度)。如果你打算使用持有表,那么除了FF = 100之外,我认为没有必要拥有它们。越少用的页面越好。

显然,您也应该测试不同的永久表,#temp表和表值参数。 :-)