由于是開發(fā)階段,所以并沒有配置postgres的參數(shù),都是使用安裝時(shí)的默認(rèn)配置,
以前運(yùn)行也不見得有什么不正常,可是前幾天我的cpu資源占用突然升高.
查看進(jìn)程,發(fā)現(xiàn)有一個(gè)postgres的進(jìn)程占用CPU都是80%以上,而且居高不下;
剛開始以為是配置上需要修改,但事實(shí)上,默認(rèn)配置基本上是很優(yōu)化的,而且是開發(fā)階段,數(shù)據(jù)量也并不大。
后來通過分析,得出結(jié)論,解決問題應(yīng)該從以下幾個(gè)方面來逐一考慮:
1:SQL查詢方面
檢查數(shù)據(jù)檢索的索引是否建立,凡是需要查找的字段盡量建立索引,甚至是聯(lián)合索引;
創(chuàng)建索引,包括表達(dá)式和部分索引;
使用COPY語句代替多個(gè)Insert語句;
將多個(gè)SQL語句組成一個(gè)事務(wù)以減少提交事務(wù)的開銷;
從一個(gè)索引中提取多條記錄時(shí)使用CLUSTER;
從一個(gè)查詢結(jié)果中取出部分記錄時(shí)使用LIMIT;
使用預(yù)編譯式查詢(Prepared Query);
使用ANALYZE以保持精確的優(yōu)化統(tǒng)計(jì);
定期使用 VACUUM 或 pg_autovacuum
進(jìn)行大量數(shù)據(jù)更改時(shí)先刪除索引(然后重建索引)
2:程序經(jīng)驗(yàn)方面
檢查程序,是否使用了連接池,如果沒有使用,盡快使用吧;
繼續(xù)檢查程序,連接使用后,是否交還給了連接池;
3:服務(wù)器參數(shù)配置
配置文件postgres.conf中的很多設(shè)置都會影響性能,
shared_buffers:這是最重要的參數(shù),postgresql通過shared_buffers和內(nèi)核/磁盤打交道。
因此應(yīng)該盡量大,讓更多的數(shù)據(jù)緩存在shared_buffers中,通常設(shè)置為實(shí)際RAM的10%是合理的,比如50000(400M)
work_mem:在pgsql 8.0之前叫做sort_mem。postgresql在執(zhí)行排序操作時(shí),
會根據(jù)work_mem的大小決定是否將一個(gè)大的結(jié)果集拆分為幾個(gè)小的和work_mem查不多大小的臨時(shí)文件。
顯然拆分的結(jié)果是降低了排序的速度。因此增加work_mem有助于提高排序的速度。通常設(shè)置為實(shí)際RAM的2%-4%,根據(jù)需要排序結(jié)果集的大小而定,比如81920(80M)
effective_cache_size:是postgresql能夠使用的最大緩存,
這個(gè)數(shù)字對于獨(dú)立的pgsql服務(wù)器而言應(yīng)該足夠大,比如4G的內(nèi)存,可以設(shè)置為3.5G(437500)
maintence_work_mem:這里定義的內(nèi)存只是在CREATE INDEX, VACUUM等時(shí)用到,因此用到的頻率不高,但是往往這些指令消耗比較多的資源,
因此應(yīng)該盡快讓這些指令快速執(zhí)行完畢:給maintence_work_mem大的內(nèi)存,比如512M(524288)
max_connections:通常,max_connections的目的是防止max_connections * work_mem超出了實(shí)際內(nèi)存大小。
比如,如果將work_mem設(shè)置為實(shí)際內(nèi)存的2%大小,則在極端情況下,如果有50個(gè)查詢都有排序要求,而且都使用2%的內(nèi)存,則會導(dǎo)致swap的產(chǎn)生,系統(tǒng)性能就會大大降低。
當(dāng)然,如果有4G的內(nèi)存,同時(shí)出現(xiàn)50個(gè)如此大的查詢的幾率應(yīng)該是很小的。不過,要清楚max_connections和work_mem的關(guān)系。
有關(guān)參數(shù)的解釋可見: http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html 和 http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html。
4:硬件的選擇
由于計(jì)算機(jī)硬件大多數(shù)是兼容的,人們總是傾向于相信所有計(jì)算機(jī)硬件質(zhì)量也是相同的。
事實(shí)上不是, ECC RAM(帶奇偶校驗(yàn)的內(nèi)存),SCSI (硬盤)和優(yōu)質(zhì)的主板比一些便宜貨要更加可靠且具有更好的性能。
PostgreSQL幾乎可以運(yùn)行在任何硬件上,但如果可靠性和性能對你的系統(tǒng)很重要,你就需要全面的研究一下你的硬件配置了。
計(jì)算機(jī)硬件對性能的影響可瀏覽 http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html 和 http://www.powerpostgresql.com/PerfList/。
5:為什么在試圖連接時(shí)收到“Sorry, too many clients”消息?
這表示你已達(dá)到缺省100個(gè)并發(fā)后臺進(jìn)程數(shù)的限制,
你需要通過修改postgresql.conf文件中的max_connections值來 增加postmaster的后臺并發(fā)處理數(shù),修改后需重新啟動postmaster。
postgresql某進(jìn)程占用cpu資源過高,降不下來
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- https://blog.csdn.net/steven_liwen/article/details/531884...
- 1. 數(shù)據(jù)庫安裝與配置步驟 安裝環(huán)境準(zhǔn)備操作系統(tǒng): Oracle Linux Server 6.5IP 地址...
- 很早看存在主義的書,雖然翻譯的晦澀難懂,但直接就被這兩個(gè)詞吸引?!按嬖凇焙汀疤摕o”,就像“色”與“空”一般。一旦涉...
- 親愛的卓然: 你好,見字如面。好久沒給你寫信了,我找不到第二個(gè)可以傾訴對象了,有些話也只能對你說一說。 年輕的時(shí)候...