我迷失了一件事。根据 MS docs full checkdb without option does column-value checks,那么运行 data_purity 有什么好处?我所说的“增益”是指进行了多么详细的检查,我现在不考虑性能。
我是否理解正确,如果数据库是在 SQL2005 之前创建的,它将 dbi_dbccFlags 设置为 0 并且完整的 checkdb 将跳过列值检查,但是一旦此类数据库将至少有一个成功的 data_purity 检查,该标志将设置为 2 并且在每个完整的 checkdb 期间都会进行列值检查?如果数据库是在 SQL2005+ 中创建的,它将默认将 dbi_dbccFlags 设置为 2,然后完全 checkdb 没有选项和 data_purity 将是相同的检查?
估计也似乎表明,对于 SQL2005+,这两个检查之间没有区别,至少在 TempDB 所需的空间方面:
- DBCC CHECKDB('AdventureWorks2019') WITH PHYSICAL_ONLY, ESTIMATEONLY
“AdventureWorks2019”的 DBCC 结果。
数据库 AdventureWorks2019 上的 CHECKDB 所需的估计 TEMPDB 空间(以 KB 为单位)= 39189。
- DBCC CHECKDB('AdventureWorks2019') WITH ESTIMATEONLY
“AdventureWorks2019”的 DBCC 结果。
数据库 AdventureWorks2019 上的 CHECKDB 所需的估计 TEMPDB 空间(以 KB 为单位)= 225996。
- DBCC CHECKDB('AdventureWorks2019') WITH DATA_PURITY, ESTIMATEONLY
“AdventureWorks2019”的 DBCC 结果。
数据库 AdventureWorks2019 上的 CHECKDB 所需的估计 TEMPDB 空间(以 KB 为单位)= 225996。