Database

PostgreSQL 大量的大型數組和寫入

  • March 22, 2010

我正在執行一個 python 程序,它產生 8 個執行緒,並且每個執行緒通過 psycopg2 啟動自己的 postmaster 程序。這是為了最大限度地利用我的 CPU 核心 (8)。每個執行緒呼叫一系列 SQL 函式。這些函式中的大多數都經過數千行,每行都關聯到一個大的 FLOAT8

$$ $$通過使用 unnest() 並將每個 FLOAT8 乘以與每行關聯的另一個 FLOAT8 來排列 (250-300) 值。這種數組方法最小化了索引和表的大小。該函式以插入到另一行相同形式的表中結束(pk INT4,數組 FLOAT8$$ $$)。python 呼叫的一些 SQL 函式將更新此類表的一行(帶有大數組)。 現在,我目前已將 PostgreSQL 配置為將大部分記憶體用於記憶體(我認為有效記憶體大小為 57 GB),而僅將少量記憶體用於共享記憶體(我認為是 1GB)。首先,我想知道記憶體和共享記憶體在 PostgreSQL(和我的應用程序)方面有什麼區別。

我注意到的是,在應用程序的讀取最密集部分(選擇 unnest(array) 等)期間,我的總 CPU 處理能力僅使用了大約 20-40%。其次,我想知道我可以做些什麼來改進它,以便使用 100% 的 CPU。根據我的觀察,它似乎與 python 或其 GIL 沒有任何關係。

謝謝

Effective_cache_size不會更改任何記憶體設置,它僅用於查詢計劃中的估計目的。將 shared_buffers 增加到可用 RAM 的 25% 左右,看看速度是否有任何差異。

此外,使用 EXPLAIN 獲取查詢計劃,看看是否需要一些額外的索引或更好的配置。

您似乎遇到了 I/O 瓶頸。你有很多記憶體,但是數據集有多大?目前的磁碟配置是什麼?磁碟有多忙?瓶頸可能是網路嗎?

要檢查的另一件事是每個程序有多少工作記憶體。可能無緣無故地存在大量記憶體流量。

該站點對調整 postgres 有很好的概述。

引用自:https://serverfault.com/questions/124763