大型数据库的SQL统计信息

时间:2011-04-21 15:04:12

标签: sql-server sql-server-2008

对于非常大的数据库,处理SQL 2008的统计信息有什么好方法?多个表,每行100m +行。

是否应该启用自动更新统计信息?是否会自动更新统计信息异步帮助?应该设置一个工作来手动更新某种计划的统计数据吗?

通常会将数据添加到表中,但旧数据不会经常更改。

更新:每小时插入约100k行。大部分报告都是在数据上完成的。更新可以在每天约500k行的1-2列上进行。

4 个答案:

答案 0 :(得分:2)

对于一个我不希望更新统计数据在一天中的大表上运行,所以我会说不。此外,你需要达到门槛(我相信20%)然后再开始

现在,如果您已经有一个重建索引的工作,那么统计数据会自动更新(重组/碎片整理不是这样)

另外1亿行并不意味着什么,如果表是12字节宽(每行)多少列,相比之下4100字节是一个很大的差异(特别是因为每行表4100字节你只能冷杉每页1行)

答案 1 :(得分:1)

  

对于非常大的数据库,处理SQL 2008的统计信息有什么好方法?多个表格   每行100米+行。

请不要称之为非常大。我举一个非常大的例子。我们只对仓库中的一些数据运行sql语句。温度空间使用量最高为180gb。对于那个声明。 D b?两位数太字节。 100米+行不小,但不是很大。

  

是否应该启用自动更新统计信息?是否会自动更新统计信息异步帮助?应该找工作   设置为手动更新某种计划的统计数据?

依靠。关于更新和使用模式。

  

通常会将数据添加到表中,但旧数据不会经常更改。

多久一次?百分比是多少?什么数据?统计数据是否快速或缓慢移动?你能提供更多的信息来提出明智的建议。

答案 2 :(得分:1)

  

是否应该启用自动更新统计信息?

它取决于......

  

将自动更新统计信息异步帮助   一点都没有?

它有助于防止因终止查询而花费很长时间的统计信息更新。基本上这告诉SQL Server,如果查询进来并且它实现了统计数据已过时而不是保存查询,更新统计信息,然后运行查询。只需运行查询并更新幕后的统计信息。因此,启动统计信息更新的特定查询不会获得任何好处,但它也不会等待统计信息首先更新。

  

应该手动设置作业   更新某种类型的统计数据   调度?

是的!仅当20%的表数据已“更改”时,才会更新统计信息。在非常大的表上,基本上可以说统计数据永远不会更新。如果你有任何大型表格来添加新数据,你应该总是有一个计划过程来更新它们的统计数据。

答案 3 :(得分:1)

“这取决于”是一个很好的答案,但在没有可重复和可衡量的改进的情况下,我会将其保留为默认值。

如果您在一夜之间手动更新统计信息,那么您自动更新的可能性就会降低。您可以通过设置AUTO_UPDATE_STATISTICS_ASYNC来推迟统计信息更新(请参阅“何时使用同步或异步统计信息更新”)< / p>

总的来说,我不会禁用它或更改默认值“on”。