Sql-Server
Tempdb 大小策略
我最近開始擔任 DBA,最初的任務是獲得所有權並重新部署由第三方提供的數據庫,以幫助我們遵守 GDPR 法規。
因此,我無法真正看到項目本身之外的東西。我現在處於我的數據庫準備好上線的階段,儘管有一些警告。
我在某些方面的現有程式碼創建了大型臨時表(70m+ 行),我知道我的開發數據庫已經在這個項目中增長。
我的問題是對於這個和後續使用大型數據集的項目,在臨時儲存的情況下,我應該使用臨時數據庫還是在我遷移到的數據庫中創建臨時表並刪除它們?
我問這個的原因是我的 live tempdb目前小於 1gb,而 dev 達到了 30 左右,如果我繼續使用臨時表,我想提前增加tempdb以防止等待自動增長。
根據提供的其他詳細資訊,我建議使用臨時表而不是臨時表。
好處是:
- 如果出現錯誤,您可以查看處於中間過程中的數據,以便更輕鬆地進行故障排除。您還可以更輕鬆地控制存在/刪除數據(關於 GDPR),而不是在有時模糊不清的 tempdb 中。
- 您可以通過使用持久表並在每次成功處理後截斷它們來簡化程式碼。
- 您不會破壞您的 tempdb 並可能同時影響依賴於 tempdb 的其他事物。
- 正如 Jonathon 所提到的,它為您提供了一個更穩定的 tempdb 大小,不會因為每週 1 次的過程而膨脹。
- 架構更清楚地說明了數據是如何使用的,而不是在 tempdb 的面紗下進行大量的數據處理。這更多是個人喜好,但我認為對於未來的維護/維護者來說會更清楚。
- 我想不出這種方法有什麼巨大的缺點,除非你有更好的用於 tempdb 的磁碟,並且會因為將驅動器用於普通數據庫而受到影響。
大衛布朗提供的缺點:
- “缺點是寫入使用者數據庫會產生更多 IO,因為允許 Tempdb 不刷新表和日誌記錄以保證可恢復性。如果您的數據庫處於完全恢復狀態,這種情況會更加嚴重,如果使用 AG 則更嚴重”
如果你走這條路,一個常見的選擇是將數據完全隔離到一個單獨的臨時數據庫中,這可能有助於減輕一些負面影響,因為這不一定必須處於 AG 或完全恢復模式。