計(jì)信息維護(hù)全解:SAMPLE/RESAMPLE/FULLSCAN三種模式如何選)
SQLIndexManager統(tǒng)計(jì)信息維護(hù)全解SAMPLE/RESAMPLE/FULLSCAN三種模式如何選【免費(fèi)下載鏈接】SQLIndexManagerFree GUI Tool for Index Maintenance on SQL Server and Azure項(xiàng)目地址: https://gitcode.com/gh_mirrors/sq/SQLIndexManagerSQLIndexManager 是一款免費(fèi)的 SQL Server / Azure 索引維護(hù)圖形化工具除了重建與重組索引外還支持對(duì)統(tǒng)計(jì)信息進(jìn)行一鍵維護(hù)。很多 DBA 面對(duì)UPDATE STATISTICS時(shí)最頭疼的就是SAMPLE、RESAMPLE、FULLSCAN 三種模式到底該選哪個(gè)本文用最直白的方式講清三者差異并教你在 SQLIndexManager 中快速做出正確選擇。為什么統(tǒng)計(jì)信息維護(hù)這么重要統(tǒng)計(jì)信息是 SQL Server 查詢優(yōu)化器的導(dǎo)航地圖。當(dāng)表中數(shù)據(jù)大量變動(dòng)后過期的統(tǒng)計(jì)信息會(huì)導(dǎo)致優(yōu)化器選錯(cuò)執(zhí)行計(jì)劃查詢變慢索引明明存在卻不被使用臨時(shí)表空間TempDB壓力增大SQLIndexManager 在掃描索引時(shí)會(huì)同時(shí)抓取每條索引的統(tǒng)計(jì)信息更新時(shí)間Statistics 列來自STATS_DATE和歷史采樣率Stats Sampled 列來自sys.dm_db_stats_properties讓你不用打開 SSMS 就能判斷哪些統(tǒng)計(jì)信息過期了。 相關(guān)查詢邏輯可參考 Server/Query.cs其中通過STATS_DATE與sys.dm_db_stats_properties組裝了這兩列數(shù)據(jù)。三種模式對(duì)比一圖看懂模式生成語句是否掃描全表數(shù)據(jù)速度準(zhǔn)確度典型場(chǎng)景SAMPLEWITH SAMPLE n PERCENT? 否只掃描 n%? 快 中大表日常維護(hù)、業(yè)務(wù)高峰期RESAMPLEWITH RESAMPLE? 是 慢 高中等大小表、數(shù)據(jù)波動(dòng)大FULLSCANWITH FULLSCAN? 是 慢 高小表、關(guān)鍵業(yè)務(wù)表三者對(duì)應(yīng) SQLIndexManager 中的操作枚舉定義見 Types/IndexOp.csUPDATE_STATISTICS_SAMPLE → WITH SAMPLE {采樣率} PERCENT UPDATE_STATISTICS_RESAMPLE → WITH RESAMPLE UPDATE_STATISTICS_FULL → WITH FULLSCAN具體語句的拼裝邏輯在 Server/Index.cs 中完成采樣率取自全局設(shè)置SampleStatsPercent還可按索引是否設(shè)置了NORECOMPUTE自動(dòng)追加該選項(xiàng)。1?? SAMPLE按百分比采樣更新只抽取指定百分比的數(shù)據(jù)行來估算分布代價(jià)最小。采樣率可在設(shè)置中調(diào)整SQLIndexManager 會(huì)生成類似這樣的語句UPDATE STATISTICS dbo.Orders OrderDateIdx WITH SAMPLE 30 PERCENT;適合千萬行級(jí)大表的例行維護(hù)或白天業(yè)務(wù)時(shí)段執(zhí)行。2?? RESAMPLE自動(dòng)全掃描級(jí)精度RESAMPLE的行為與采樣率是否超過 100% 等價(jià)于全掃描——它實(shí)際會(huì)掃描全部數(shù)據(jù)行但相比 FULLSCAN 開銷略低不強(qiáng)制完全精確的直方圖重建是微軟官方推薦的默認(rèn)推薦項(xiàng)。適合中等規(guī)模、數(shù)據(jù)變動(dòng)頻繁且精度要求高的索引。3?? FULLSCAN全表掃描精度拉滿對(duì)全部數(shù)據(jù)行做完整掃描生成最精確的統(tǒng)計(jì)信息但鎖與 I/O 開銷最大。適合幾十萬行以內(nèi)的小表、報(bào)表核心大寬表、以及統(tǒng)計(jì)信息嚴(yán)重失真需要根治的情況。快速選擇指南三步?jīng)Q策法 表很大500萬行且要避開高峰 └─ 選 SAMPLE把采樣率調(diào)到 10~30% 表中等大小、數(shù)據(jù)波動(dòng)大 └─ 選 RESAMPLE微軟官方默認(rèn)推薦 小表或核心表需要絕對(duì)精度 └─ 選 FULLSCAN簡(jiǎn)單記法大表用 SAMPLE 省資源中表用 RESAMPLE 求平衡小表用 FULLSCAN 保精度。在 SQLIndexManager 中怎么操作?兩步完成統(tǒng)計(jì)信息維護(hù)在掃描結(jié)果中選中目標(biāo)索引右鍵 → 修復(fù)操作會(huì)看到UPDATE STATISTICS SAMPLE / RESAMPLE / FULL三個(gè)選項(xiàng)右鍵菜單構(gòu)建邏輯見 Forms/MainBox.cs點(diǎn)擊工具欄的Fix按鈕執(zhí)行或生成 T-SQL 腳本拿到 SSMS 中人工執(zhí)行。幾個(gè)實(shí)用細(xì)節(jié)僅對(duì)非分區(qū)表生效統(tǒng)計(jì)信息維護(hù)只對(duì)非分區(qū)表的聚集/非聚集索引可選分區(qū)表會(huì)被自動(dòng)跳過判斷邏輯在 Server/QueryEngine.cs 的CorrectIndexOp方法中智能過濾剛更新過的統(tǒng)計(jì)信息在設(shè)置中可開啟忽略 N 小時(shí)內(nèi)更新過的統(tǒng)計(jì)信息和忽略采樣率高于 N% 的統(tǒng)計(jì)信息避免無謂的全掃描相關(guān)選項(xiàng)配置見 Forms/SettingsBox.cs過濾邏輯在 Forms/MainBox.cs配合閾值使用統(tǒng)計(jì)信息維護(hù)可與碎片率閾值聯(lián)動(dòng)——低于閾值的索引自動(dòng)跳過高于閾值的才進(jìn)入維護(hù)隊(duì)列。常見誤區(qū)避坑 ?給大表無腦 FULLSCAN凌晨維護(hù)窗口可能直接被拖到上班時(shí)間?忽略 NORECOMPUTE若索引設(shè)置了STATISTICS_NORECOMPUTE ONSQLIndexManager 生成的語句會(huì)自動(dòng)帶上NORECOMPUTE執(zhí)行后統(tǒng)計(jì)信息不會(huì)隨數(shù)據(jù)更新自動(dòng)刷新記得確認(rèn)是否符合預(yù)期?最佳實(shí)踐大表 SAMPLE 日常跑、關(guān)鍵表月度 FULLSCAN并用 Statistics 列的日期列驗(yàn)證更新時(shí)間是否生效。總結(jié)你的場(chǎng)景推薦模式大表 高峰時(shí)段維護(hù)SAMPLE中等表 精度優(yōu)先RESAMPLE小表 核心業(yè)務(wù)FULLSCANSQLIndexManager 把三種模式的差異封裝進(jìn)了右鍵菜單和 T-SQL 腳本生成中配合 Statistics / Stats Sampled 兩列數(shù)據(jù)讓統(tǒng)計(jì)信息維護(hù)從憑經(jīng)驗(yàn)猜變成看數(shù)據(jù)選。掌握本文的三步?jīng)Q策法你就可以放心地把統(tǒng)計(jì)信息維護(hù)納入日常例行任務(wù)了。【免費(fèi)下載鏈接】SQLIndexManagerFree GUI Tool for Index Maintenance on SQL Server and Azure項(xiàng)目地址: https://gitcode.com/gh_mirrors/sq/SQLIndexManager創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考