对于非常大的数据库,处理SQL 2008的统计信息有什么好方法?多个表,每行100m +行。
是否应该启用自动更新统计信息?是否会自动更新统计信息异步帮助?应该设置一个工作来手动更新某种计划的统计数据吗?
通常会将数据添加到表中,但旧数据不会经常更改。
更新:每小时插入约100k行。大部分报告都是在数据上完成的。更新可以在每天约500k行的1-2列上进行。
答案 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”。