Sql-Server

SQL 數據庫的大小要求

  • February 24, 2021

我在一次採訪中被問到這個問題,如果每個月處理 650MB 的數據,獨立 SQL 伺服器的數據庫大小是多少。在我的採訪中我無法給出任何答案,後來也沒有找到任何答案。任何幫助將不勝感激。

這是一個開放式的面試問題,沒有準確的答案。為了清楚起見,面試官可能希望您提出其他問題。

實際空間需求取決於“已處理”(插入?)的含義、數據保留(數據是否已刪除?)、列數據類型、索引、儲存成本、壓縮功能的使用(包括列儲存)以及額外的可用空間用於日常維護。

在我看來,這類問題是愚蠢的面試問題,肯定需要更多的上下文。也許他們只是想看看你的想法以及你會問什麼後續問題以澄清問題。

如果通過處理它們意味著每月添加 650 MB 的數據(即使在這裡假設添加的 650 MB 是數據 + 所有索引 + 任何其他消耗空間的補充對象),並且沒有給出其他上下文,所以我們必須假設它們純粹是指數據庫的總數據文件大小(不是事務日誌文件或其他任何東西 - 因為這些將取決於恢復模型和備份頻率等未知變數),那麼數據庫的大小是 650 MB 乘以它的月數線上的。


正如評論中所討論的:在最簡單的範例中,如果使用完全恢復模型創建一個全新的數據庫,它沒有索引(或任何其他會導致數據重複的東西),並且會寫入 650 MB 的數據。在那一刻,大約 1.3 GB 的磁碟空間正在被消耗,其中 650 MB 用於數據,650 MB 用於將數據插入數據庫並且現在位於事務日誌中的事務。因為他們在我最簡單的範例中沒有提供任何這些額外的細節,所以您只能假設它們最多指的是原始數據,此時為 650 MB。

但是即使在一個簡單的範例中,您也可以看到它的變化速度有多快。即使在該範例中,我也假設已處理的單詞表示已添加。但已處理可能意味著添加了 350 MB,然後刪除了 300 MB。現在數據庫大小(僅用於原始數據)只有 50 MB。在我之前的範例中,消耗的總磁碟空間約為 700 MB,因為此時有 650 MB 的事務發生並位於事務日誌中,另外還有 50 MB 的實際數據在數據庫中。

如果我們知道更多資訊,例如備份事務日誌的頻率,那麼這也可能會改變上面的答案。例如,如果事務日誌備份每 5 分鐘發生一次,並且如果將 350 MB 的數據插入到上面的同一個範例數據庫中,然後 7 分鐘後刪除了 300 MB,則磁碟上消耗的總空間目前為 350 MB。50 MB 的實際數據 + 300 MB 目前位於事務日誌中用於刪除操作。初始插入操作的事務在這個時間點消失了,因為在事務日誌備份發生後,事務從其中被刷新,並且它們之前消耗的空間被新事務重新使用。

所以不幸的是,這個問題有很多解釋方式,最好在面試中通過提出正確的後續問題來展示你的知識,例如“我們是在談論數據庫文件數據還是事務日誌數據?”,“有什麼樣的恢復模式?” (簡單完整恢復模型將導致儲存在事務日誌中的數據量不同)、“計劃了哪些類型的備份以及它們多久執行一次?”、“數據庫是否有索引,以及它們為 650 MB 的數據庫數據消耗的大小是多少?” 等等。如果面試官知道他們在做什麼,那麼這些後續問題會告訴他們,問題的實際答案並不重要,因為你通過詢問解決問題所必需的知識來證明你的能力一種問題。


關於即時增加可用磁碟空間和記憶體的最後一個問題:是的,絕對可以動態添加更多磁碟空間和記憶體,甚至在保持數據庫線上的同時。實際執行此操作的方式將取決於您的伺服器主機,無論是本地伺服器還是雲中、物理伺服器或虛擬機,以及每個伺服器的提供商(如果適用)。


最後,這裡有一些我覺得非常有用的部落格(排名不分先後):

  1. 喬什·達內爾的部落格
  2. Brent Ozar 團隊的部落格
  3. Erik Darling 的部落格
  4. Aaron Bertrand 在 SQLPerfofmance.com 上的部落格
  5. Aaron Bertrand 的其他 SQL 部落格
  6. Kendra Little 的部落格
  7. RedGate 的簡單對話部落格

引用自:https://dba.stackexchange.com/questions/285952