1. 程式人生 > >postgresql某程序佔用cpu資源過高,降不下來

postgresql某程序佔用cpu資源過高,降不下來

由於是開發階段,所以並沒有配置postgres的引數,都是使用安裝時的預設配置,
以前執行也不見得有什麼不正常,可是前幾天我的cpu資源佔用突然升高.
檢視程序,發現有一個postgres的程序佔用CPU都是80%以上,而且居高不下;
剛開始以為是配置上需要修改,但事實上,預設配置基本上是很優化的,而且是開發階段,資料量也並不大。
後來通過分析,得出結論,解決問題應該從以下幾個方面來逐一考慮:
1:SQL查詢方面
檢查資料檢索的索引是否建立,凡是需要查詢的欄位儘量建立索引,甚至是聯合索引;
建立索引,包括表示式和部分索引;
使用COPY語句代替多個Insert語句;
將多個SQL語句組成一個事務以減少提交事務的開銷;
從一個索引中提取多條記錄時使用CLUSTER;
從一個查詢結果中取出部分記錄時使用LIMIT;
使用預編譯式查詢(Prepared Query);
使用ANALYZE以保持精確的優化統計;
定期使用 VACUUM 或 pg_autovacuum
進行大量資料更改時先刪除索引(然後重建索引)
2:程式經驗方面


檢查程式,是否使用了連線池,如果沒有使用,儘快使用吧;
繼續檢查程式,連線使用後,是否交還給了連線池;
3:伺服器引數配置
配置檔案postgres.conf中的很多設定都會影響效能,
shared_buffers:這是最重要的引數,postgresql通過shared_buffers和核心/磁碟打交道。
因此應該儘量大,讓更多的資料快取在shared_buffers中,通常設定為實際RAM的10%是合理的,比如50000(400M)
work_mem:在pgsql 8.0之前叫做sort_mem。postgresql在執行排序操作時,
會根據work_mem的大小決定是否將一個大的結果集拆分為幾個小的和work_mem查不多大小的臨時檔案。
顯然拆分的結果是降低了排序的速度。因此增加work_mem有助於提高排序的速度。通常設定為實際RAM的2%-4%,根據需要排序結果集的大小而定,比如81920(80M)
effective_cache_size:是postgresql能夠使用的最大快取,
這個數字對於獨立的pgsql伺服器而言應該足夠大,比如4G的記憶體,可以設定為3.5G(437500)
maintence_work_mem:這裡定義的記憶體只是在CREATE INDEX, VACUUM等時用到,因此用到的頻率不高,但是往往這些指令消耗比較多的資源,
因此應該儘快讓這些指令快速執行完畢:給maintence_work_mem大的記憶體,比如512M(524288)
max_connections:通常,max_connections的目的是防止max_connections * work_mem超出了實際記憶體大小。
比如,如果將work_mem設定為實際記憶體的2%大小,則在極端情況下,如果有50個查詢都有排序要求,而且都使用2%的記憶體,則會導致swap的產生,系統性能就會大大降低。
當然,如果有4G的記憶體,同時出現50個如此大的查詢的機率應該是很小的。不過,要清楚max_connections和work_mem的關係。
有關引數的解釋可見:
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html
4:硬體的選擇
由於計算機硬體大多數是相容的,人們總是傾向於相信所有計算機硬體質量也是相同的。
事實上不是, ECC RAM(帶奇偶校驗的記憶體),SCSI (硬碟)和優質的主機板比一些便宜貨要更加可靠且具有更好的效能。
PostgreSQL幾乎可以執行在任何硬體上,但如果可靠性和效能對你的系統很重要,你就需要全面的研究一下你的硬體配置了。
計算機硬體對效能的影響可瀏覽
http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
http://www.powerpostgresql.com/PerfList/
5:為什麼在試圖連線時收到“Sorry, too many clients”訊息?
這表示你已達到預設100個併發後臺程序數的限制,
你需要通過修改postgresql.conf檔案中的max_connections值來 增加postmaster的後臺併發處理數,修改後需重新啟動postmaster。

相關推薦

postgresql程序佔用cpu資源下來

由於是開發階段,所以並沒有配置postgres的引數,都是使用安裝時的預設配置,以前執行也不見得有什麼不正常,可是前幾天我的cpu資源佔用突然升高.檢視程序,發現有一個postgres的程序佔用CPU都是80%以上,而且居高不下;剛開始以為是配置上需要修改,但事實上,預設配置基本上是很優化的,而且是開發階段,

postgresql進程占用cpu資源下來

ted 影響 字段 出了 reat con sha 應該 effect 由於是開發階段,所以並沒有配置postgres的參數,都是使用安裝時的默認配置,以前運行也不見得有什麽不正常,可是前幾天我的cpu資源占用突然升高.查看進程,發現有一個postgres的進程占用CPU都

Windows10系統下wsappx佔用CPU資源?wsappx是什麼?如何關閉wsappx程序

         在Windows10系統開機的時候,wsappx程序佔用的CPU資源非常高,導致電腦執行速度緩慢,那麼我們如何關閉wsappx程序,讓電腦加快執行速度呢?下面就一起來看一下操作的方法吧。   【現象】 1、先來看一下電腦剛開

kipmio佔用cpu資源

雖然這是一個利用空餘的CPU資源進行一些介面自動調節的任務,但看著佔那麼多的資源還是怕出意外。 可以臨時降低 echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us 永久減低 編輯(沒有自行建立)/etc/modprobe.d/i

linux系統gpk-update-icon程序佔用CPU資源100%

1. 症狀:linux系統gpk-update-icon程序佔用CPU資源100%,監控到使用者程序跑到100% 2、原因分析: gpk-update-icon程序在GUI模式下會自動通知rpm軟體包更新,是由gnome-packagekit的bug造成的。 gpk-update-ic

Windows10系統下wsappx占用CPU資源?wsappx是什麽?如何關閉wsappx進程?

打開 運行 window windows應用 span img 查看 操作 出現 在Windows10系統開機的時候,wsappx進程占用的CPU資源非常高,導致電腦運行速度緩慢,那麽我們如何關閉wsappx進程,讓電腦加快運行速度呢?下面就一起來看一下操

核心執行緒和使用者態程序cpu利用率時的除錯方法

--kworker What is kworker? kworker means a Linux kernel process doing "work" (processing system calls). You can have several of them i

記憶體佔用快取釋放導致宕機處理方案

故障現象: 1、某分行部署的某臺伺服器記憶體佔用過高,導致宕機; 2、程式碼層面檢查暫未發現問題,伺服器硬重啟持續一段時間後(3-5天)再次佔滿。 發現問題: 趕往現場後進行檢查,當時是一切正常的,今有DB2程序佔用18%,在正常範圍內; 在crontab 中發現有兩個指

Kafka-python 客戶端導致的 cpu 使用且無法消費消息的問題

的確 fse get sum req 今天 als top report 今天遇到一個情況使用了 Kafka-python 1.3.3 來操作讀取 broker 1.0.1 版本的 kafka。出現了 rebalance 之後分配到了客戶端,但是 cpu 利用率很高且無法消

伺服器CPU負載如何定位問題

CPU負載過高解決問題過程: 1,根據top命令,發現PID為12433的Java程序佔用CPU高達300%,出現故障。 2,找到該程序後,如何定位具體執行緒或程式碼呢,首先顯示執行緒列表,並按照CPU佔用高的執行緒排序: [[email protected] logs]# ps -mp  1243

系統的 CPU 使用率很 CPU 的應用

上一節我講了 CPU 使用率是什麼,並通過一個案例教你使用 top、vmstat、pidstat 等工具, 排查高 CPU 使用率的程序,然後再使用 perf top 工具,定位應用內部函式的問題。不過就有 人留言了,說似乎感覺高 CPU 使用率的問題,還是挺容易排查的。 那是不是所有 CPU 使用率高的問題

spark 版本版本對應

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.sql.SparkSession.close()V

IAStorDataMgrSvc.exe程序佔用cpu解決方法

dell電腦無任何讀寫操作,但IAStorDataMgrSvc.exe程序始終佔用40%~50% 的cpu,高cpu佔用,電腦操作不順暢。 這個程序一般都是驅動程式版本有問題!別以為電腦都已經是裝的最新版本的驅動了就覺得不會是這個問題,本人就是安裝官方推薦的

linux排查java程序佔用CPU原因方法

前言 在運維tomcat伺服器時,我們通常會發現cpu的負載過高,大多數原因是由於java程式碼的bug引起的。可能你的java程式碼有很多,檔案也有很多,一行一行的排查是很費時間的。這時我們就可以使用jstack、top等工具對引起問題的程式碼進行定位,

[zz]存大量被佔用(kswap程序CPU利用率)的解決方案

 問題描述:      通過free檢視時,大概有一半以上的實體記憶體分配到cache裡面,這樣大的     cache是造成記憶體的耗盡緣由,與此同時使用top或ps檢視程序時,kswapd程序負荷     很高,一般在90%以上,kswapd程序的作用是用於記憶

linux下查詢java程序佔用CPU原因

1. 查詢程序 top檢視程序佔用資源情況 明顯看出java的兩個程序22714,12406佔用過高cpu. 2.查詢執行緒 使用top -H -p <pid>檢視執行緒佔用情況

win10 Windows Modules Installer Worker 佔用cpu資源

問題: 重灌win10系統後,正常開機使用下發現,筆記本風扇不停轉,檢視資源管理器發現CPU佔用率高,甚至高大100%。找出佔用CPU最高的程序是Windows Modules Installer Worker。 什麼是Windows Modules Installe

使用tomcat java程序佔用cpu的原因

使用tomcat做為java容器,cpu佔用偏高的原因,目前公司伺服器上面跑的ubuntu環境nginx+tomcat+mysql執行一段時間之後java程序cpu偏高,會出現網站打不開的情況。所以進行了如下分析。 一,首先檢視tomcat日誌,如果有出現OOM錯誤(

java程序 cpu load分析過程

1\  jps -v列出所有的java程序 , top找出cpu佔用過高的對應的java 程序pid 2\ 使用top -H -p PID 命令檢視對應程序裡的哪個執行緒佔用CPU過高,取該執行緒pid 3\ 將執行緒的pid 轉成16進位制 4\jstack [程序

解決windows7 下svchost程序佔用cpu問題

安裝windows7之後,有時候會出現svchost程序佔用cpu和記憶體很高的問題。一般是在啟動其他程序之後,svchost也會跟著佔用很資源,導致其他程序卡住。最直接的解決方法是在工作管理員中,右鍵svchost程