SQL*_*ner 4 sql-server-2005 sql-server-2008 sql-server
是否在 SQL 2008 r2 上运行 UPDATE Statistics 并对 5000 万行(非分区)的大表进行全面扫描?我正在尝试确认以下行为。
a) 在整个运行过程中是否有任何锁定?不确定,但我认为没有锁,但是 sr。dba 告诉我它需要模式修改锁(嗯...)
b) 导致阻塞——我不这么认为
c) 造成大量 IO——因为每一页都将被读入内存并污染数据页缓冲区缓存。所以通常你应该在下班时间这样做。
a) 几乎任何东西都需要模式稳定性锁。在更新统计信息时,您不希望其他东西改变表的结构。根据此,更新的统计数据需要架构稳定性和修改锁。
b) 如果有东西试图改变表的结构,它将被阻塞。IIRC,update stats 会进行脏读,因此它不应阻止仅进行读取或写入操作的连接。
c) 如果您使用 FULLSCAN,它将读取整个表,因为这是您告诉它执行的操作。我不认为这可以被视为“导致大量 i/o”。通常,“采样”的默认设置足够好,但我已经看到它会导致非均匀分布的数据出现问题。通常,重新索引整个表也更容易(特别是如果您可以在线进行),因为重新索引是可并行化的,而更新统计数据则不是。(AFAIK,MS 没有在 sql 2008 中解决这个问题。)