Postgresql

Postgres 文件增量大小

  • December 8, 2021

我正在使用幾個執行緒將 300 個表 / 400G 複製到 PG10@win2016server 以加快速度,但是由於表文件以 64-kb 為單位(或類似的單位)遞增,它們在磁碟上變得碎片化,這會傷害讀取表現。

理想情況下,我想確保文件以更大的增量(例如 8 mb)擴展,替代方案是製作initial size = max segment size(1gb)。有沒有辦法做到這一點?

而且我知道,單執行緒複製可以解決手頭的問題,但是複制後我仍然會遇到同樣的問題,因為表會不斷增長並且仍然只是小碎片。

編輯:作為各種“證明”,我創建了一個簡單的表格

CREATE TABLE testtable 
(
 id bigint primary key,
 somestring varchar(4000)
);

BEGIN
 FOR i IN 1..2000 LOOP
  insert into testtable values(i, repeat('Jeg kan en sang der kan drive dig til vanvid.', 40));
END LOOP;
END

這會生成一個 4096kb 的表,contig.exe 報告該表包含 25 個片段(在本例中),或平均 160kb。對於 4 mb,這不是問題,對於 400gb 是。

根據我的經驗,NTFS 通常非常適合隨著文件的增長清理碎片。我會等到您真正擁有大文件並在卷上執行碎片整理後再擔心它。

僅僅因為小文件容易碎片化並不意味著大文件會成為問題。

根據我的經驗,NTFS 不擅長在上述情況下避免文件碎片。

如果您僅將文件增加 64 kB,則 ntfs 將找到一些具有 64kB 可用空間的“隨機”區域(除非在文件目前結尾之後有可用空間)。

在表/索引上使用一些儲存參數來指示它應該如何擴展文件會很好。

為此,Oracle 有參數 INITIAL 和 NEXT。

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