Postgresql

EC2 (Ubuntu 14.04) 上的記憶體壓縮期間的 Postgres 延遲問題

  • July 8, 2016

我們最近將託管 Postgres 數據庫的 EC2 實例升級到具有 244GB 記憶體的 i2.8xlarge(這是為了利用它附帶的大量臨時儲存)。自升級以來,我們一直在 Postgres 中遇到一些延遲問題,這似乎是由於 Linux 核心中發生的記憶體壓縮造成的。

我們在最近的 Ubuntu 14.04 核心上使用 PostgreSQL 9.3,執行以下配置(希望是相關的子集):

max_connections = 1000
effective_cache_size = '220GB'
shared_buffers = '24GB'
work_mem = '25MB'
maintenance_work_mem = '1024MB'
fsync = off
full_page_writes = on
synchronous_commit = off

我們在此伺服器上完全禁用了透明大頁面(/sys/kernel/mm/transparent_hugepage/enabled並且/sys/kernel/mm/transparent_hugepage/defrag都設置為 never 和/sys/kernel/mm/transparent_hugepage/khugepaged/defrag設置為0),並且我們相當確定由於 THP 沒有看到任何問題,因為thp_*stats 和nr_anon_transparent_hugepagesstat/proc/vmstat永遠不會增加。

我們的問題是我們看到持續的記憶體壓縮(失敗和成功)事件/proc/vmstat(所有統計數據都在compact_*頻繁增加),其中一些會導致相當嚴重的停頓,隨著時間的推移會變得更糟(可能是記憶體碎片變得更糟)並影響我們的應用程序. 當我們看到導致停頓的事件時,我們正在跟踪統計數據,/sys/kernel/debug/extfrag/unusable_index並且經常看到不同頁面順序之間的一系列移動。

我們想知道這是否只是 Postgres 版本、Linux 核心版本以及必須處理大量記憶體的某種組合(因為很明顯大部分記憶體使用是文件記憶體,所以 Linux 可能正在使用 Postgres 做的事情) ’ 不高興),但除了假設更新版本的 Postgres(9.4 或 9.5)可能出於某種原因完全避免該問題外,無法提出任何建議。

$ uname -a
Linux db-04 3.13.0-91-generic #138-Ubuntu SMP Fri Jun 24 17:00:34 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ dpkg -l postgresql-9.3
postgresql-9.3     9.3.13-1.pgdg14.04+1

我們還嘗試將effective_cache_size實例上的記憶體減少到 160GB,看看我們是否可以減少記憶體壓力,但這並沒有太大變化(而且大多數情況下似乎讓停頓變得更糟)。

只是想知道 Postgres 上的記憶體停滯是以前提出過的還是人們有經驗的?

正如問題評論中提到的dezso,這似乎確實是Ubuntu Trusty中(可能是更新版本的)3.13核心的問題 - 我們切換到Trusty中的Xenial HWE 4.4核心,問題似乎已經消失並且壓縮攤位現在很小,不干涉。

引用自:https://dba.stackexchange.com/questions/142656