Sql-Server

DateTime2 和頁面預期壽命 (PLE)

  • April 27, 2022

據我了解,當您在表上定義列時,您定義了它的精度。此精度佔用 1 個字節並儲存在列級別。如果您使用 5 或更高的精度,則 DateTime2 列將佔用每行 8 個字節。(精度不儲存在行級別。)

但是,當您將相同的 DateTime2 轉換為 VarBinary 時,它將佔用 9 個字節。那是因為它需要儲存在列級別的精度字節。

我很好奇這與 DateTime2 儲存在記憶體中時有何關係。假設我在記憶體中有 1,000,000 個 DateTime2s(每個的精度為 5 或更高)。這會佔用 8,000,000 字節的記憶體,還是 9,000,000 字節的記憶體?

基本上,我想知道預設精度 DateTime2 是否會比正常的 DateTime 對 Page Life Expectancy 造成更大的壓力?

我很好奇這與 DateTime2 儲存在記憶體中時有何關係。

在 SQL Server 中,磁碟上的數據與記憶體中的數據相同*。數據頁從磁碟複製到記憶體並返回,如果在讀取或刷新時轉換數據,這將是昂貴的。

假設我在記憶體中有 1,000,000 個 DateTime2s(每個的精度為 5 或更高)。這會佔用 8,000,000 字節的記憶體,還是 9,000,000 字節的記憶體?

8,000,000 因為將頁面儲存在記憶體中與將 DateTime2 轉換為 varbinary 完全無關。

  • 例外:記憶體中 OLTP 表是一個例外,在記憶體和磁碟上存在很大差異。透明數據庫加密表在讀入記憶體時被解密,並在刷新到磁碟時被加密。

正如datetime2所記錄的:

1提供的值適用於未壓縮的行儲存。使用數據壓縮儲存可能會改變每個精度的儲存大小。此外,磁碟和記憶體中的儲存大小可能不同。例如,使用批處理模式時, datetime2值始終需要 8 個字節的記憶體。

2將datetime2值強制轉換為varbinary值時,會在****varbinary值中添加一個附加字節以儲存精度。

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