簡體   English   中英

在大表上創建索引 - postgresql 9.6

[英]Creating indexes on big tables - postgresql 9.6

我正在嘗試在一個大表 (26G) 上創建一些常規索引,但這需要很多時間 - 超過 2 小時。 每個索引大約需要 11 分鍾。

也許我錯了,我應該專注於改進將數據從 oracle ( oracle_fdw ) 加載到 postgres 所需的時間。 我在local_postgresql_table select * from remote_oracle_table (大約200G)中執行了很多插入,這也需要很多時間。

如果有辦法更改其中一個參數以提高性能,我會很高興聽到。 在 26G 上運行此查詢需要兩個小時。

有沒有辦法改進這個操作? 有沒有辦法通過改進硬件來改進這個操作(我沒有看到服務器過載)?

我配置的參數:

min_parallel_relation_size = 200MB
max_parallel_workers_per_gather = 5 
max_worker_processes = 8 
effective_cache_size = 2500MB
work_mem = 16MB
maintenance_work_mem = 1500MB
shared_buffers = 1500MB
RAM : 5G

訪問此博客以獲取並行查詢處理示例:

對於並行順序掃描,在后台多個工作線程或 CPU 線程負責執行單個查詢。 我們可以輕松設置 Parallel Sequential 參數的值,可以將您的查詢執行速度提高 10 倍。

使用 max_worker_processes 參數,在 PostgreSQL 9.6 中,您可以更改 Process Workers 參數值,默認值為 8。

創建 X 多個索引的一個問題是,如果表大小超過緩存大小,則無法避免對表執行 X 次物理讀取。

許多年前,我在 Oracle 上通過在不同會話中同時開始構建多個索引來解決這個問題。 這意味着對於正在創建的每批索引,每個塊只有一次物理讀取。

缺點是您需要更多的排序內存才能有效地執行此操作。

可能值得一試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM