2015-10-26 32 views
8

我最近將我的Postgres數據庫從Windows遷移到CentOS 6.7。 在Windows上,數據庫從來沒有使用太多的CPU,但是在Linux上,我使用一個常量〜30%的CPU(使用top)來看它。 (機器上有4個核心)Postgres常量CPU使用率30%

任何人都知道這是否正常,或者爲什麼會這樣做? 該應用程序似乎運行良好,並且比Windows更快或更快。

請注意,它是一個大型數據庫,100GB數據,1000多個數據庫。

我試圖使用pgAdmin的監控服務器的狀態,但是服務器狀態掛起,並運行失敗,錯誤「的log_filename參數必須是平等的」

+0

您是否檢查正在運行的查詢?select * from pg_stat_activity where state <>'idle'。可能是一些autovacuum運行... – Christian

+0

什麼PostgreSQL進程顯示在頂部?他們的命令是什麼?運行它作爲'top -c'來查看。 –

+0

top -c give - > 28378 postgres 20 0 1735m 85m 6508 R 18.3 1.1 2233:11 postgres:autovacuum launcher process – James

回答

0

有可能是增加服務器負載多重原因。

  1. 如果您正在查找服務器上的查詢級負載,那麼您應該使用pg_stat_activity系統表將特定Postgres後端ID與系統進程ID相匹配。

SELECT pid,datname,usename,query FROM pg_stat_activity;

一旦你知道哪些查詢運行,就可以進一步調查(EXPLAIN/EXPLAIN ANALYZE;檢查鎖等)

  • 你可能有鎖爭用問題,可能是由於非常高的max_connections。考慮降低max_connections並使用連接池,如果是這種情況。但是這可能會增加客戶連接的週轉時間。

  • 可能是Windows系統阻塞連接,不允許使用系統。現在,Linus允許其連接使用CPU並執行得更快。 :P

  • 另外值得一讀:

    1. How to monitor PostgreSQL
    2. Monitoring CPU and memory usage from Postgres
    3

    隨着1000個數據庫我希望真空工人和統計收集器花費大量的時間來檢查什麼需要保養。

    我建議你做兩件事情

    • 擡起autovacuum_naptime參數,以減少檢查頻率
    • stats_temp_directory一個ramdisk上

    你可能還設置了很高的max_connections限制以允許您的客戶端使用大量的數據庫,這是CPU負載的另一個可能來源,因爲每次後端必須同步時需要檢查大量「插槽」與其他人。

    +0

    任何想法爲什麼Windows上的同一個數據庫沒有使用任何CPU? – James

    +0

    您在Windows上使用的PostgreSQL版本是什麼?你現在在用什麼? PostgreSQL的配置是否完全一樣? Windows在處理內存和磁盤方面與Linux非常不同,所以如果在CentOS上使用的配置與在Windows上使用的配置相同,則可能不合適。 – mnencia

    +0

    @James在Windows下的默認設置下,在我手中,系統在達到1000個數據庫之前基本上不可用。您確定您沒有在Windows服務器上關閉autovac或增加autovacuum_naptime? – jjanes