2016-09-22 108 views
6

我們試圖在我們的應用程序中評估PostgreSQL數據庫作爲Oracle數據庫的替代品。我們使用PostgreSQL 9.5,它安裝在具有128 GB內存,32個CPU內核和SSD存儲的Linux機器上。連接池和分佈式事務由JBoss 7應用程序服務器管理,SQL查詢由Hibernate 4生成/執行。大多數表擁有數千萬行,其中一行具有數億行。總共大約3,000個數據庫連接(它們由應用程序服務器彙集)是活動的並且同時使用。我們修改了一些查詢,創建了緩慢的索引,根據文檔等調整了數據庫和操作系統設置。但是,吞吐量要慢幾倍,最終DB響應時間增加10-20倍。數千個連接和分佈式事務的PostgreSQL數據庫性能問題

我做了一些谷歌上搜索,我找不到任何關於使用PostgreSQL數據庫以同樣的方式別人(AB)的信息:

  • 使用使用這種大量的活動數據庫連接
  • 十萬分佈式事務(預備事務)
  • 存儲數十億列在一個表中

Oracle沒有處理更高的負載任何問題。我希望分享你的經驗,建議,鏈接等

感謝

+2

Zalando使用Postgres,他們同時爲很多客戶提供服務。所以它不像引擎笨重我可以告訴你:)對於處理大型表分區派上用場。這個問題相當廣泛,但我猜你不會得到你期望的答案。 –

+0

感謝您的評論。 但基於他們的GIT repo(https://github.com/zalando/patroni/search?utf8=%E2%9C%93&q=prepared),他們不使用分佈式事務:max_prepared_transactions = 0 默認值對於max_connections是100.我的確知道生產值可能會有所不同。 –

+1

你有你自己的交易經理嗎?您是否正在使用分佈式事務來允許跨羣集中不同數據庫的全局事務?你是否考慮過補償? –

回答

0

該解決方案是升級Linux內核並將我們的Java連接池中的數據庫連接數從3000減少到300.在此更改之後,我們可以像使用Oracle DB一樣處理相同的流量。

無意間我發現的信息珍貴的一件從而導致解決問題的意見節由羅伯特·哈斯 (VP,首席架構師,數據庫服務器@的EnterpriseDB,PostgreSQL的主要貢獻者和提交者)寫的帖子Did I Say 32 Cores? How about 64?

不,我要說的是,要在64核心服務器上獲得良好性能,您需要PostgreSQL> = 9.2 Linux> = 3.2。大部分改變實際上都在PostgreSQL端,但Linux內核中的lseek縮放比例也很重要。

-1

Approprite設置應該在postgresql.conf文件提供給處理大量連接。另外它可以通過pgpool2進行復制和負載平衡。我們在集羣環境中使用Postgres,它運行良好。

+0

您是否擁有數千個併發活動連接,使用分佈式事務,擁有數百萬條記錄? –

+0

是的,有多個服務器,多個應用程序,大量的用戶併發連接 – Sri

+0

您可以定義'大量的用戶'嗎?數百或數千個同時存在ACTIVE查詢? –