PostgreSQL 是一個免費資料庫,OA幸運飛艇源碼下載,詳情咨詢【企娥166848365】對於處理分析型+交易型混合型系統來說確實很不錯 ...
PostgreSQL 是一個免費資料庫,OA幸運飛艇源碼下載,詳情咨詢【企娥166848365】對於處理分析型+交易型混合型系統來說確實很不錯,特別是版本的升級到11.2後性能提升很多,很多運行機制跟oracle越來越接近,確實很強大,但是開源系統確實存在一些不如意地方,需要長時間項目問題集錦積累才能慢慢的領悟。 而作為從非功能測試轉型做技術運維,在運維過程中會從非功能方面(高可用性、高可靠性、可擴展性等)和性能測試優化方面考慮確實可以避免很多生產不必要的故障問題,但是對於開源的技術在版本迭代過程中總會有些不如意的技術故障還是需要我們自己持續性學習、挖掘、積累、提升,才能確保技術能持續滿足業務運營發展和市場需求。 如下問題是我們17年上線的系統,經2年的運行,很多業務表達到千萬級,導致需要讀寫分離、分表等來優化,但是問題還是偶爾出現,說明技術還不到位,例如如下:
問題原因:
目前生產環境使用postgres9.5版本,主從配置,但是因為行業業務的特殊性,有些回訪表等都是三四百萬級別的,而且日常更新頻繁度非常高,日常使用頻繁比較高的表,一天insert、update都是接近十萬,delete三四萬以上,導致在對該表的統計信息不准確,而pg預設 autovacuum預設參數導致部分表因本身存量數據大,更新比例小,導致這些日常被用到的大表反而沒辦法被重新統計分析,最終導致磁碟IO 高,CPU 高問題,而因為在調整過程中調整不當也導致如下,在對錶進行批量update 時,而PG就進行 autovacuum_analyze,結果導致出現 ShareLock錯誤,具體錯誤如下:
錯誤內容:
2019-04-14 15:15:47,707 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 2-
2019-04-14 15:15:47,707 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - org.apache.shiro.web.servlet.ShiroHttpSession@
461f4ab1
2019-04-14 15:16:15,952 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 2-
2019-04-14 15:16:15,952 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - org.apache.shiro.web.servlet.ShiroHttpSession@
285d498f
2019-04-14 15:16:18,138 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 1-61322fb9-7ca7-482b-99ee-913074957a94
2019-04-14 15:16:24,227 ERROR [500.jsp] -
Error updating database. Cause: org.postgresql.util.PSQLException: 錯誤: 檢測到死鎖
詳細:進程6533等待在事務 36964707上的ShareLock; 由進程10733阻塞.
進程10733等待在事務 36964708上的ShareLock; 由進程6533阻塞.
建議:詳細信息請查看伺服器日誌.
在位置:當更新關係"visit_crd"的元組(11314, 33)時
The error may involve defaultParameterMap
The error occurred while setting parameters
SQL: UPDATE visit_crd SET visit_plan_id = ?, customer_number = ?, call_id = ?, time_start = ?, time_end = ?,
duration = ?, type = ?, route = ?, cpn = ?, cdpn = ?, recording = ?, trunk_number = ?, update_by = ?, updat
e_date = ?, remarks = ?, affiliation = ?, update_ind = ?, execute_ind = ? WHERE id = ?
Cause: org.postgresql.util.PSQLException: 錯誤: 檢測到死鎖
詳細:進程6533等待在事務 36964707上的ShareLock; 由進程10733阻塞.
進程10733等待在事務 36964708上的ShareLock; 由進程6533阻塞.
建議:詳細信息請查看伺服器日誌.
在位置:當更新關係"visit_crd"的元組(11314, 33)時
; SQL []; 錯誤: 檢測到死鎖
詳細:進程6533等待在事務 36964707上的ShareLock; 由進程10733阻塞.
進程10733等待在事務 36964708上的ShareLock; 由進程6533阻塞.
建議:詳細信息請查看伺服器日誌.
在位置:當更新關係"visit_crd"的元組(11314, 33)時; nested exception is org.postgresql.util.PSQLException: 錯誤: 檢測到死鎖
詳細:進程6533等待在事務 36964707上的ShareLock; 由進程10733阻塞.
進程10733等待在事務 36964708上的ShareLock; 由進程6533阻塞.
建議:詳細信息請查看伺服器日誌.
在位置:當更新關係"visit_crd"的元組(11314, 33)時
org.springframework.dao.DeadlockLoserDataAccessException:
問題分析
PG 預設 autovacuum
1、autovacuum_vacuum_threshold:預設50
2、autovacuum_vacuum_scale_factor預設值為20%。
3、autovacuum_analyze_threshold:預設50。
4、autovacuum_analyze_scale_factor預設10%
第一次優化:
autovacuum_vacuum_scale_factor = 0.001
autovacuum_analyze_scale_factor = 0.001
結果導致如上錯誤信息:
第二次優化:
autovacuum_vacuum_scale_factor = 0.03
autovacuum_analyze_scale_factor = 0.03
問題解決