Postgresql
Postgres 文件增量大小
我正在使用幾個執行緒將 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。