17.4. УпÑавление ÑеÑÑÑÑами ÑдÑа #
Postgres Pro иногда Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑÑеÑпÑваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑеÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑÐµÐ¼Ñ Ð´Ð¾ пÑедела, оÑобенно пÑи запÑÑке неÑколÑÐºÐ¸Ñ ÐºÐ¾Ð¿Ð¸Ð¹ ÑеÑвеÑа в одной ÑиÑÑеме или пÑи ÑабоÑе Ñ Ð¾ÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑими базами. Ð ÑÑом Ñазделе опиÑÑваÑÑÑÑ ÑеÑÑÑÑÑ ÑдÑа, коÑоÑÑе иÑполÑзÑÐµÑ Postgres Pro, и Ð¿Ð¾Ð´Ñ Ð¾Ð´Ñ Ðº ÑеÑÐµÐ½Ð¸Ñ Ð¿Ñоблем, ÑвÑзаннÑÑ Ñ Ð¾Ð³ÑаниÑенноÑÑÑÑ ÑÑÐ¸Ñ ÑеÑÑÑÑов.
17.4.1. РазделÑÐµÐ¼Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ Ð¸ ÑемаÑоÑÑ #
Postgres Pro ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема пÑедоÑÑавлÑла ÑÑедÑÑва межпÑоÑеÑÑного взаимодейÑÑÐ²Ð¸Ñ (IPC), в ÑаÑÑноÑÑи, ÑазделÑемÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð¸ ÑемаÑоÑÑ. СиÑÑÐµÐ¼Ñ ÑемейÑÑва Unix обÑÑно пÑедоÑÑавлÑÑÑ ÑÑнкÑии IPC в ÑÑиле «System V» или ÑÑнкÑии IPC в ÑÑиле «POSIX» или и Ñе, и дÑÑгие. Ð Windows ÑÑи Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ð¿Ð¾-дÑÑгомÑ, но здеÑÑ ÑÑо не ÑаÑÑмаÑÑиваеÑÑÑ.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Postgres Pro запÑаÑÐ¸Ð²Ð°ÐµÑ Ð¾ÑÐµÐ½Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑой обÑÑм ÑазделÑемой памÑÑи System V и намного болÑÑий обÑÑм анонимной ÑазделÑемой памÑÑи mmap. Ðозможен Ñакже ваÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ болÑÑой облаÑÑи памÑÑи System V (Ñм. shared_memory_type). Ðомимо ÑÑого пÑи запÑÑке ÑеÑвеÑа ÑоздаÑÑÑÑ Ð·Ð½Ð°ÑиÑелÑное колиÑеÑÑво ÑемаÑоÑов (в ÑÑиле System V или POSIX). РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑемаÑоÑÑ POSIX иÑполÑзÑÑÑÑÑ Ð² ÑиÑÑемаÑ
Linux и FreeBSD, а на дÑÑгиÑ
плаÑÑоÑмаÑ
иÑполÑзÑÑÑÑÑ ÑемаÑоÑÑ System V.
ФÑнкÑии IPC в ÑÑиле System V обÑÑно ÑÑалкиваÑÑÑÑ Ñ Ð»Ð¸Ð¼Ð¸Ñами на ÑÑовне ÑиÑÑемÑ. Ðогда Postgres Pro пÑевÑÑÐ°ÐµÑ Ð¾Ð´Ð¸Ð½ из ÑÑÐ¸Ñ Ð»Ð¸Ð¼Ð¸Ñов, ÑеÑÐ²ÐµÑ Ð¾ÑказÑваеÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ, но должен вÑдаÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾Ðµ ÑообÑение, говоÑÑÑее об оÑибке и о Ñом, ÑÑо Ñ Ð½ÐµÐ¹ делаÑÑ. (См. Ñакже ÐодÑаздел 17.3.1.) СооÑвеÑÑÑвÑÑÑие паÑамеÑÑÑ ÑдÑа в ÑазнÑÑ ÑиÑÑÐµÐ¼Ð°Ñ Ð½Ð°Ð·ÑваÑÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно (они пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 17.1), но ÑÑÑанавливаÑÑÑÑ Ð¿Ð¾-ÑазномÑ. Ðиже пÑедлагаÑÑÑÑ ÑпоÑÐ¾Ð±Ñ Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ ÑиÑÑем.
ТаблиÑа 17.1. ÐаÑамеÑÑÑ IPC в ÑÑиле System V
| ÐÐ¼Ñ | ÐпиÑание | ÐнаÑениÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка одного ÑкземплÑÑа Postgres Pro |
|---|---|---|
SHMMAX | ÐакÑималÑнÑй ÑÐ°Ð·Ð¼ÐµÑ ÑегменÑа ÑазделÑемой памÑÑи (в байÑÐ°Ñ ) | как минимÑм 1 ÐÐ, но знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑÑно гоÑаздо болÑÑе |
SHMMIN | ÐинималÑнÑй ÑÐ°Ð·Ð¼ÐµÑ ÑегменÑа ÑазделÑемой памÑÑи (в байÑÐ°Ñ ) | 1 |
SHMALL | ÐбÑий обÑÑм доÑÑÑпной ÑазделÑемой памÑÑи (в байÑÐ°Ñ Ð¸Ð»Ð¸ ÑÑÑаниÑÐ°Ñ ) | еÑли в байÑаÑ
, Ñо же, ÑÑо и SHMMAX; еÑли в ÑÑÑаниÑаÑ
, Ñо ceil(SHMMAX/PAGE_SIZE), плÑÑ Ð¿Ð¾ÑÑебноÑÑÑ Ð´ÑÑгиÑ
пÑиложений |
SHMSEG | ÐакÑималÑное ÑиÑло ÑегменÑов ÑазделÑемой памÑÑи Ð´Ð»Ñ Ð¿ÑоÑеÑÑа | ÑÑебÑеÑÑÑ ÑолÑко 1 ÑегменÑ, но знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð³Ð¾Ñаздо болÑÑе |
SHMMNI | ÐакÑималÑное ÑиÑло ÑегменÑов ÑазделÑемой памÑÑи Ð´Ð»Ñ Ð²Ñей ÑиÑÑÐµÐ¼Ñ | как SHMSEG плÑÑ Ð¿Ð¾ÑÑебноÑÑÑ Ð´ÑÑгиÑ
пÑиложений |
SEMMNI | ÐакÑималÑное ÑиÑло иденÑиÑикаÑоÑов ÑемаÑоÑов (Ñ. е., Ð¸Ñ Ð½Ð°Ð±Ð¾Ñов) | как минимÑм ceil((max_connections + autovacuum_max_workers + max_wal_senders + max_worker_processes + 6) / 16) плÑÑ Ð¿Ð¾ÑÑебноÑÑÑ Ð´ÑÑгиÑ
пÑиложений |
SEMMNS | ÐакÑималÑное ÑиÑло ÑемаÑоÑов Ð´Ð»Ñ Ð²Ñей ÑиÑÑÐµÐ¼Ñ | ceil((max_connections + autovacuum_max_workers + max_wal_senders + max_worker_processes + 6) / 16) * 17 плÑÑ Ð¿Ð¾ÑÑебноÑÑÑ Ð´ÑÑгиÑ
пÑиложений |
SEMMSL | ÐакÑималÑное ÑиÑло ÑемаÑоÑов в набоÑе | не менÑÑе 17 |
SEMMAP | ЧиÑло запиÑей в каÑÑе ÑемаÑоÑов | Ñм. ÑекÑÑ |
SEMVMX | ÐакÑималÑное знаÑение ÑемаÑоÑа | не менÑÑе 1000 (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¾ обÑÑно Ñавно 32767; без Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи менÑÑÑ ÐµÐ³Ð¾ не ÑледÑеÑ) |
Postgres Pro запÑаÑÐ¸Ð²Ð°ÐµÑ Ð½ÐµÐ±Ð¾Ð»ÑÑой блок ÑазделÑемой памÑÑи System V (обÑÑно 48 Ð±Ð°Ð¹Ñ Ð½Ð° 64-биÑной плаÑÑоÑме) Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ копии ÑеÑвеÑа. РболÑÑинÑÑве ÑовÑеменнÑÑ
опеÑаÑионнÑÑ
ÑиÑÑем Ñакой обÑÑм вÑделÑеÑÑÑ Ð±ÐµÐ· пÑоблем. Ðднако еÑли запÑÑкаÑÑ Ð¼Ð½Ð¾Ð³Ð¾ копий ÑеÑвеÑа или Ñвно наÑÑÑоиÑÑ ÑеÑÐ²ÐµÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÑÑиÑ
обÑÑмов ÑазделÑемой памÑÑи System V (Ñм. shared_memory_type и dynamic_shared_memory_type), Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ ÑвелиÑиÑÑ Ð·Ð½Ð°Ñение SHMALL, задаÑÑее обÑий обÑÑм ÑазделÑемой памÑÑи System V, доÑÑÑпнÑй Ð´Ð»Ñ Ð²Ñей ÑиÑÑемÑ. ÐамеÑÑÑе, ÑÑо SHMALL во многиÑ
ÑиÑÑемаÑ
задаÑÑÑÑ Ð² ÑÑÑаниÑаÑ
, а не в байÑаÑ
.
Ðенее веÑоÑÑÐ½Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑм ÑазмеÑом ÑегменÑов ÑазделÑемой памÑÑи (SHMMIN), коÑоÑÑй Ð´Ð»Ñ Postgres Pro не должен пÑевÑÑаÑÑ Ð¿ÑимеÑно 32 Ð±Ð°Ð¹Ñ (обÑÑно ÑÑо вÑего 1 байÑ). ÐакÑималÑное ÑиÑло ÑегменÑов Ð´Ð»Ñ Ð²Ñей ÑиÑÑÐµÐ¼Ñ (SHMMNI) или Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ пÑоÑеÑÑа (SHMSEG) Ñоже обÑÑно не влиÑÐµÑ Ð½Ð° ÑабоÑоÑпоÑобноÑÑÑ ÑеÑвеÑа, еÑли ÑолÑко ÑÑо ÑиÑло не Ñавно нÑлÑ.
Ðогда Postgres Pro иÑполÑзÑÐµÑ ÑемаÑоÑÑ System V, он Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð¾ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑемаÑоÑÑ Ð½Ð° одно ÑазÑеÑÑнное подклÑÑение (max_connections), на ÑазÑеÑÑннÑй ÑабоÑий пÑоÑеÑÑ Ð°Ð²ÑооÑиÑÑки (autovacuum_max_workers), ÑазÑеÑÑннÑй пÑоÑеÑÑ-пеÑедаÑÑик WAL (max_wal_senders) и ÑоновÑй пÑоÑеÑÑ (max_worker_processes), в набоÑаÑ
по 16. Ркаждом Ñаком набоÑе еÑÑÑ Ñакже 17-й ÑемаÑоÑ, ÑодеÑжаÑий «магиÑеÑкое ÑиÑло», позволÑÑÑий обнаÑÑживаÑÑ ÐºÐ¾Ð»Ð»Ð¸Ð·Ð¸Ð¸ Ñ Ð½Ð°Ð±Ð¾Ñами ÑемаÑоÑов дÑÑгиÑ
пÑиложений. ÐакÑималÑное ÑиÑло ÑемаÑоÑов в ÑиÑÑеме задаÑÑÑÑ Ð¿Ð°ÑамеÑÑом SEMMNS, коÑоÑÑй, ÑледоваÑелÑно, должен бÑÑÑ Ñавен как минимÑм ÑÑмме max_connections, autovacuum_max_workers, max_wal_senders и max_worker_processes, плÑÑ Ð¾Ð´Ð¸Ð½ дополниÑелÑнÑй на каждÑе 16 ÑемаÑоÑов подклÑÑений и ÑабоÑиÑ
пÑоÑеÑÑов (Ñм. ÑоÑмÑÐ»Ñ Ð² ТаблиÑе 17.1). ÐаÑамеÑÑ SEMMNI опÑеделÑÐµÑ Ð¼Ð°ÐºÑималÑное ÑиÑло набоÑов ÑемаÑоÑов, коÑоÑÑе могÑÑ ÑÑÑеÑÑвоваÑÑ Ð² ÑиÑÑеме в один Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени. Таким обÑазом, его знаÑение должно бÑÑÑ Ð½Ðµ менÑÑе Ñем ceil((max_connections + autovacuum_max_workers + max_wal_senders + max_worker_processes + 6) / 16). РкаÑеÑÑве вÑеменного ÑеÑÐµÐ½Ð¸Ñ Ð¿Ñоблем, коÑоÑÑе вÑзÑваÑÑÑÑ ÑÑими огÑаниÑениÑми, но обÑÑно ÑопÑовождаÑÑÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑми ÑообÑениÑми ÑÑнкÑии semget, напÑимеÑ, «No space left on device» (Ðа ÑÑÑÑойÑÑве не оÑÑалоÑÑ Ð¼ÐµÑÑа) можно ÑменÑÑиÑÑ ÑиÑло ÑазÑеÑÑннÑÑ
Ñоединений.
РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ ÑвелиÑиÑÑ SEMMAP как минимÑм до ÑÑÐ¾Ð²Ð½Ñ SEMMNS. ÐÑли в ÑиÑÑеме еÑÑÑ Ñакой паÑамеÑÑ (а во многиÑ
ÑиÑÑемаÑ
его неÑ), он опÑеделÑÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ°ÑÑÑ ÑеÑÑÑÑов ÑемаÑоÑов, в коÑоÑой вÑделÑеÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ непÑеÑÑвного блока ÑемаÑоÑов. Ðогда Ð½Ð°Ð±Ð¾Ñ ÑемаÑоÑов оÑвобождаеÑÑÑ, ÑÑа запиÑÑ Ð»Ð¸Ð±Ð¾ добавлÑеÑÑÑ Ðº ÑÑÑеÑÑвÑÑÑей ÑоÑедней запиÑи, либо ÑегиÑÑÑиÑÑеÑÑÑ ÐºÐ°Ðº Ð½Ð¾Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð² каÑÑе. ÐÑли каÑÑа пеÑеполнÑеÑÑÑ, оÑвобождаемÑе ÑемаÑоÑÑ ÑеÑÑÑÑÑÑ (до пеÑезагÑÑзки). Таким обÑазом, ÑÑагменÑаÑÐ¸Ñ Ð¿ÑоÑÑÑанÑÑва ÑемаÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ñо вÑеменем пÑивеÑÑи к ÑменÑÑÐµÐ½Ð¸Ñ ÑиÑла доÑÑÑпнÑÑ
ÑемаÑоÑов.
ÐÑÑгие паÑамеÑÑÑ, ÑвÑзаннÑе Ñ Â«Ð°Ð½Ð½ÑлиÑованием опеÑаÑий» Ñ ÑемаÑоÑами, напÑимеÑ, SEMMNU и SEMUME, на ÑабоÑÑ Postgres Pro не влиÑÑÑ.
ÐÑи иÑполÑзовании ÑемаÑоÑов POSIX ÑÑебÑемое Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво не оÑлиÑаеÑÑÑ Ð¾Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва Ð´Ð»Ñ System V, Ñо еÑÑÑ Ð¿Ð¾ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑемаÑоÑÑ Ð½Ð° ÑазÑеÑÑнное подклÑÑение (max_connections), на ÑазÑеÑÑннÑй ÑабоÑий пÑоÑеÑÑ Ð°Ð²ÑооÑиÑÑки (autovacuum_max_workers), ÑазÑеÑÑннÑй пÑоÑеÑÑ-пеÑедаÑÑик WAL (max_wal_senders) и ÑоновÑй пÑоÑеÑÑ (max_worker_processes). Ðа плаÑÑоÑÐ¼Ð°Ñ , где пÑедпоÑиÑаеÑÑÑ ÑÑÐ¾Ñ Ð²Ð°ÑианÑ, оÑÑÑÑÑÑвÑÐµÑ Ð¾Ð¿ÑеделÑннÑй Ð»Ð¸Ð¼Ð¸Ñ ÑдÑа на колиÑеÑÑво ÑемаÑоÑов POSIX.
- AIX
ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ Ð¿Ð°ÑамеÑÑов, как
SHMMAX, Ð½Ð¸ÐºÐ°ÐºÐ°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ Ð½Ð°ÑÑÑойка не должна ÑÑебоваÑÑÑÑ, Ñак как ÑиÑÑема, Ð¿Ð¾Ñ Ð¾Ð¶Ðµ, позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð²ÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð² каÑеÑÑве ÑазделÑемой. ÐÐ¾Ð´Ð¾Ð±Ð½Ð°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð¾Ð±ÑÑно и Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ð±Ð°Ð· даннÑÑ , напÑимеÑ, Ð´Ð»Ñ DB/2.Ðднако Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑе паÑамеÑÑÑ
ulimitв/etc/security/limits, Ñак как ÑÑандаÑÑнÑе жÑÑÑкие огÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° ÑÐ°Ð·Ð¼ÐµÑ (fsize) и колиÑеÑÑво Ñайлов (nofiles) могÑÑ Ð±ÑÑÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно болÑÑими.- FreeBSD
ÐаÑамеÑÑÑ ÑазделÑемой памÑÑи по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ пÑиемлемÑ, еÑли Ð²Ñ Ð½Ðµ вÑбеÑеÑе в
shared_memory_typeваÑианÑsysv. СемаÑоÑÑ System V на ÑÑой плаÑÑоÑме не иÑполÑзÑÑÑÑÑ.ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов IPC по ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ измениÑÑ, иÑполÑзÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи
sysctlилиloader. С помоÑÑÑsysctlможно задаÑÑ ÑледÑÑÑие паÑамеÑÑÑ:#sysctl kern.ipc.shmall=32768#sysctl kern.ipc.shmmax=134217728ЧÑÐ¾Ð±Ñ ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÐ¾Ñ ÑанÑлиÑÑ Ð¿Ð¾Ñле пеÑезагÑÑзки, измениÑе
/etc/sysctl.conf.ÐÑли Ð²Ñ Ð²ÑбÑали в
shared_memory_typeваÑианÑsysv, возможно, Ð²Ñ Ð·Ð°Ñ Ð¾ÑиÑе наÑÑÑоиÑÑ ÑдÑо Ñак, ÑÑÐ¾Ð±Ñ ÑазделÑÐµÐ¼Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ System V вÑегда Ð½Ð°Ñ Ð¾Ð´Ð¸Ð»Ð°ÑÑ Ð² ÐÐУ и никогда не вÑгÑÑжалаÑÑ Ð² пÑоÑÑÑанÑÑво подкаÑки. ÐÑо можно ÑделаÑÑ, ÑÑÑановив Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑsysctlпаÑамеÑÑkern.ipc.shm_use_phys.ÐÑли Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе ÑеÑÐ²ÐµÑ Ð² «камеÑе» FreeBSD, ÑÑÑановиÑе Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа
sysvshmзнаÑениеnew, ÑÑÐ¾Ð±Ñ Ñ ÑеÑвеÑа бÑло ÑобÑÑвенное оÑделÑное пÑоÑÑÑанÑÑво имÑн ÑазделÑемой памÑÑи System V. (Ðо веÑÑии 11.0 во FreeBSD ÑÑебовалоÑÑ ÑазÑеÑаÑÑ Ð¾Ð±Ñий доÑÑÑп из ÐºÐ°Ð¼ÐµÑ Ðº пÑоÑÑÑанÑÑÐ²Ñ Ð¸Ð¼Ñн IPC ведÑÑего Ñзла и пÑинимаÑÑ Ð¼ÐµÑÑ Ð´Ð»Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑликÑов.)- NetBSD
ÐаÑамеÑÑÑ ÑазделÑемой памÑÑи по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ пÑиемлемÑ, еÑли Ð²Ñ Ð½Ðµ вÑбеÑеÑе в
shared_memory_typeваÑианÑsysv. ÐбÑÑно Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑвелиÑиÑÑkern.ipc.semmniиkern.ipc.semmns, Ñак как Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð² NetBSD ÑлиÑком малÑ.ÐаÑамеÑÑÑ IPC можно измениÑÑ, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹
sysctl, напÑимеÑ:$sysctl -w kern.ipc.semmni=100ЧÑÐ¾Ð±Ñ ÑÑи паÑамеÑÑÑ ÑÐ¾Ñ ÑанÑлиÑÑ Ð¿Ð¾Ñле пеÑезагÑÑзки, измениÑе
/etc/sysctl.conf.ÐÑли Ð²Ñ Ð²ÑбÑали в
shared_memory_typeваÑианÑsysv, возможно, Ð²Ñ Ð·Ð°Ñ Ð¾ÑиÑе наÑÑÑоиÑÑ ÑдÑо Ñак, ÑÑÐ¾Ð±Ñ ÑазделÑÐµÐ¼Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ System V вÑегда Ð½Ð°Ñ Ð¾Ð´Ð¸Ð»Ð°ÑÑ Ð² ÐÐУ и никогда не вÑгÑÑжалаÑÑ Ð² пÑоÑÑÑанÑÑво подкаÑки. ÐÑо можно ÑделаÑÑ, ÑÑÑановив Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑsysctlпаÑамеÑÑkern.ipc.shm_use_phys.- OpenBSD
ÐаÑамеÑÑÑ ÑазделÑемой памÑÑи по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ пÑиемлемÑ, еÑли Ð²Ñ Ð½Ðµ вÑбеÑеÑе в
shared_memory_typeваÑианÑsysvÐбÑÑно Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑвелиÑиÑÑkern.seminfo.semmniиkern.seminfo.semmns, Ñак как Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð² OpenBSD ÑлиÑком малÑ.ÐаÑамеÑÑÑ IPC можно измениÑÑ, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹
sysctl, напÑимеÑ:$sysctl kern.seminfo.semmni=100ЧÑÐ¾Ð±Ñ ÑÑи паÑамеÑÑÑ ÑÐ¾Ñ ÑанÑлиÑÑ Ð¿Ð¾Ñле пеÑезагÑÑзки, измениÑе
/etc/sysctl.conf.- Linux
ÐаÑамеÑÑÑ ÑазделÑемой памÑÑи по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ пÑиемлемÑ, еÑли Ð²Ñ Ð½Ðµ вÑбеÑеÑе в
shared_memory_typeваÑианÑsysv. Рдаже в ÑÑом ÑлÑÑае Ð¸Ñ Ð¿Ð¾ÑÑебÑеÑÑÑ ÑвелиÑиÑÑ ÑолÑко Ð´Ð»Ñ ÑÑаÑÑÑ ÑдеÑ, в коÑоÑÑÑ ÑÑи паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÑÑ Ð¼Ð°Ð»ÐµÐ½Ñкие знаÑениÑ. СемаÑоÑÑ System V на ÑÑой плаÑÑоÑме не иÑполÑзÑÑÑÑÑ.ÐаÑамеÑÑÑ ÑазделÑемой памÑÑи можно измениÑÑ, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹
sysctl. ÐапÑимеÑ, Ñак можно вÑделиÑÑ 16 ÐÐ:$sysctl -w kernel.shmmax=17179869184$sysctl -w kernel.shmall=4194304ЧÑÐ¾Ð±Ñ ÑÐ¾Ñ ÑаниÑÑ ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле пеÑезагÑÑзки, воÑполÑзÑйÑеÑÑ Ñайлом
/etc/sysctl.conf.- macOS
ÐаÑамеÑÑÑ ÑазделÑемой памÑÑи и ÑемаÑоÑов по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ пÑиемлемÑ, еÑли Ð²Ñ Ð½Ðµ вÑбеÑеÑе в
shared_memory_typeваÑианÑsysv.ÐÐ»Ñ Ð½Ð°ÑÑÑойки ÑазделÑемой памÑÑи в macOS ÑекомендÑеÑÑÑ ÑоздаÑÑ Ñайл
/etc/sysctl.confи запиÑаÑÑ Ð² него пÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменнÑÑ ÑледÑÑÑим обÑазом:kern.sysv.shmmax=4194304 kern.sysv.shmmin=1 kern.sysv.shmmni=32 kern.sysv.shmseg=8 kern.sysv.shmall=1024
ÐамеÑÑÑе, ÑÑо в некоÑоÑÑÑ Ð²ÐµÑÑиÑÑ macOS, вÑе пÑÑÑ Ð¿Ð°ÑамеÑÑов ÑазделÑемой памÑÑи Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð²
/etc/sysctl.conf, инаÑе Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¿ÑоигноÑиÑованÑ.ÐнаÑение
SHMMAXдолжно бÑÑÑ ÐºÑаÑно 4096.SHMALLна ÑÑой плаÑÑоÑме измеÑÑеÑÑÑ Ð² ÑÑÑаниÑÐ°Ñ (по 4 ÐÐ).ÐÑе паÑамеÑÑÑ, кÑоме
SHMMNIможно измениÑÑ Â«Ð½Ð° леÑÑ», воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ sysctl. Ðо Ñем не менее лÑÑÑе задаваÑÑ Ð²ÑбÑаннÑе вами знаÑÐµÐ½Ð¸Ñ Ð²/etc/sysctl.conf, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ ÑÐ¾Ñ ÑанÑлиÑÑ Ð¿Ð¾Ñле пеÑезагÑÑзки.- Solaris
illumos ÐаÑамеÑÑÑ ÑазделÑемой памÑÑи по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¿Ð¾Ð»Ð½Ðµ пÑÐ¸ÐµÐ¼Ð»ÐµÐ¼Ñ Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва пÑименений Postgres Pro. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Solaris ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð²
SHMMAXÑеÑвеÑÑÑ Ð¾Ð±ÑÑма ÐÐУ. ЧÑÐ¾Ð±Ñ Ð²ÑбÑаÑÑ Ð´ÑÑгое знаÑение, задайÑе ÑооÑвеÑÑÑвÑÑÑий паÑамеÑÑ Ð¿ÑоекÑа, ÑвÑзанного Ñ Ð¿Ð¾Ð»ÑзоваÑелемpostgres. ÐапÑимеÑ, вÑполниÑе Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸rootÑакÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ:projadd -c "Postgres Pro DB User" -K "project.max-shm-memory=(privileged,8GB,deny)" -U postgres -G postgres user.postgres
ÐÑа команда ÑоздаÑÑ Ð¿ÑоекÑ
user.postgresи ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¼Ð°ÐºÑималÑнÑй обÑÑм ÑазделÑемой памÑÑи Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑpostgresÑавнÑм 8 ÐÐ. ÐÑо изменение вÑÑÑÐ¿Ð°ÐµÑ Ð² ÑÐ¸Ð»Ñ Ð¿Ñи ÑледÑÑÑем Ð²Ñ Ð¾Ð´Ðµ ÑÑого полÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ пÑи пеÑезапÑÑке Postgres Pro (не пеÑезагÑÑзке конÑигÑÑаÑии). ÐÑи ÑÑом подÑазÑмеваеÑÑÑ, ÑÑо Postgres Pro вÑполнÑеÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелемpostgresв гÑÑппеpostgres. ÐеÑезагÑÑжаÑÑ ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾Ñле ÑÑой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ нÑжно.ÐÐ»Ñ ÑеÑвеÑов баз даннÑÑ , ÑаÑÑÑиÑаннÑÑ Ð½Ð° болÑÑое колиÑеÑÑво подклÑÑений, ÑекомендÑеÑÑÑ Ñакже измениÑÑ ÑледÑÑÑие паÑамеÑÑÑ:
project.max-shm-ids=(priv,32768,deny) project.max-sem-ids=(priv,4096,deny) project.max-msg-ids=(priv,4096,deny)
ÐÑоме Ñого, еÑли Postgres Pro Ñ Ð²Ð°Ñ Ð²ÑполнÑеÑÑÑ Ð²Ð½ÑÑÑи зонÑ, Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ñакже ÑвелиÑиÑÑ Ð»Ð¸Ð¼Ð¸ÑÑ Ð½Ð° иÑполÑзование ÑеÑÑÑÑов зонÑ. ÐолÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾
пÑоекÑаÑи командеprctlможно в Ð ÑководÑÑве ÑиÑÑемного админиÑÑÑаÑоÑа (System Administrator's Guide), «Ðлаве 2: ÐÑоекÑÑ Ð¸ задаÑи» (Chapter2: Projects and Tasks).
17.4.2. RemoveIPC в systemd #
ÐÑли иÑполÑзÑеÑÑÑ systemd, необÑ
одимо позабоÑиÑÑÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ ÑеÑÑÑÑÑ IPC (вклÑÑÐ°Ñ ÑазделÑемÑÑ Ð¿Ð°Ð¼ÑÑÑ) не оÑвобождалиÑÑ Ð¿ÑеждевÑеменно опеÑаÑионной ÑиÑÑемой. ÐÑо оÑобенно акÑÑалÑно пÑи ÑбоÑке и ÑÑÑановке Postgres Pro из иÑÑ
одного кода. ÐолÑзоваÑелей диÑÑÑибÑÑивнÑÑ
пакеÑов Postgres Pro ÑÑо каÑаеÑÑÑ Ð² менÑÑей ÑÑепени, Ñак как полÑзоваÑÐµÐ»Ñ postgres обÑÑно ÑоздаÑÑÑÑ ÐºÐ°Ðº ÑиÑÑемнÑй полÑзоваÑелÑ.
ÐаÑамеÑÑ RemoveIPC в logind.conf опÑеделÑеÑ, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð»Ð¸ обÑекÑÑ IPC ÑдалÑÑÑÑÑ Ð¿Ñи полном вÑÑ
оде полÑзоваÑÐµÐ»Ñ Ð¸Ð· ÑиÑÑемÑ. Ðа ÑиÑÑемнÑÑ
полÑзоваÑелей ÑÑо не ÑаÑпÑоÑÑÑанÑеÑÑÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐºÐ»ÑÑÑн в ÑÑандаÑÑной ÑбоÑке systemd, но в некоÑоÑÑÑ
диÑÑÑибÑÑиваÑ
опеÑаÑионнÑÑ
ÑиÑÑем он по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾ÑклÑÑÑн.
ÐбÑÑно негаÑивнÑй ÑÑÑÐµÐºÑ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ ÑÑого паÑамеÑÑа пÑоÑвлÑеÑÑÑ Ð² Ñом, ÑÑо обÑекÑÑ ÑазделÑемой памÑÑи, иÑполÑзÑемÑе Ð´Ð»Ñ Ð¿Ð°ÑаллелÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов, ÑдалÑÑÑÑÑ Ð±ÐµÐ· видимÑÑ Ð¿ÑиÑин, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñибок и пÑедÑпÑеждений пÑи попÑÑке оÑкÑÑÑÑ Ð¸ ÑдалиÑÑ Ð¸Ñ , напÑимеÑ:
WARNING: could not remove shared memory segment "/PostgreSQL.1450751626": No such file or directory
(ÐÐ ÐÐУÐÐ ÐÐÐÐÐÐÐ: оÑибка пÑи Ñдалении ÑегменÑа ÑазделÑемой памÑÑи "/PostgreSQL.1450751626": ÐÐµÑ Ñакого Ñайла или каÑалога) РазлиÑнÑе ÑÐ¸Ð¿Ñ Ð¾Ð±ÑекÑов IPC (ÑазделÑÐµÐ¼Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ/ÑемаÑоÑÑ, System V/POSIX) обÑабаÑÑваÑÑÑÑ Ð² systemd неÑколÑко по-ÑазномÑ, поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð³ÑÑ Ð½Ð°Ð±Ð»ÑдаÑÑÑÑ ÑиÑÑаÑии, когда некоÑоÑÑе ÑеÑÑÑÑÑ IPC не ÑдалÑÑÑÑÑ Ñак, как дÑÑгие. Ðднако полагаÑÑÑÑ Ð½Ð° ÑÑи Ñонкие ÑазлиÑÐ¸Ñ Ð½Ðµ ÑекомендÑеÑÑÑ.
СобÑÑие «вÑÑ
ода полÑзоваÑÐµÐ»Ñ Ð¸Ð· ÑиÑÑемÑ» Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизойÑи пÑи вÑполнении задаÑи обÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ еÑли админиÑÑÑаÑÐ¾Ñ Ð²Ð¾Ð¹Ð´ÑÑ Ð¿Ð¾Ð´ именем postgres, а заÑем вÑйдеÑ, либо ÑлÑÑиÑÑÑ ÑÑо-Ñо подобное, Ñак ÑÑо пÑедоÑвÑаÑиÑÑ ÑÑо доволÑно Ñложно.
Ðакой полÑзоваÑÐµÐ»Ñ ÑвлÑеÑÑÑ Â«ÑиÑÑемнÑм», опÑеделÑеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии systemd, иÑÑ
Ð¾Ð´Ñ Ð¸Ð· знаÑÐµÐ½Ð¸Ñ SYS_UID_MAX в /etc/login.defs.
СкÑÐ¸Ð¿Ñ ÑпаковÑÐ²Ð°Ð½Ð¸Ñ Ð¸ ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ ÑеÑвеÑа должен пÑедÑÑмоÑÑиÑелÑно ÑоздаваÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ postgres как ÑиÑÑемного полÑзоваÑелÑ, иÑполÑзÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ useradd -r, adduser --system или ÑавнознаÑнÑе.
ÐÑли же ÑÑÑÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð±Ñла Ñоздана некоÑÑекÑно и измениÑÑ ÐµÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, ÑекомендÑеÑÑÑ Ð·Ð°Ð´Ð°ÑÑ
RemoveIPC=no
в /etc/systemd/logind.conf или дÑÑгом подÑ
одÑÑем Ñайле конÑигÑÑаÑии.
Ðнимание
ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑедпÑинÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ñм одно из ÑÑÐ¸Ñ Ð´Ð²ÑÑ Ð´ÐµÐ¹ÑÑвий, инаÑе ÑеÑÐ²ÐµÑ Postgres Pro бÑÐ´ÐµÑ Ð¾ÑÐµÐ½Ñ Ð½ÐµÑÑабилÑнÑм.
17.4.3. ÐгÑаниÑÐµÐ½Ð¸Ñ ÑеÑÑÑÑов #
Ð Unix-подобнÑÑ
опеÑаÑионнÑÑ
ÑиÑÑемаÑ
ÑÑÑеÑÑвÑÑÑ ÑазлиÑнÑе ÑÐ¸Ð¿Ñ Ð¾Ð³ÑаниÑений ÑеÑÑÑÑов, коÑоÑÑе могÑÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° ÑабоÑÑ ÑеÑвеÑа Postgres Pro. ÐÑобенно Ð²Ð°Ð¶Ð½Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° ÑиÑло пÑоÑеÑÑов Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, ÑиÑло оÑкÑÑÑÑÑ
Ñайлов и обÑÑм памÑÑи Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ пÑоÑеÑÑа. Ðаждое из ÑÑиÑ
огÑаниÑений Ð¸Ð¼ÐµÐµÑ Â«Ð¶ÑÑÑкий» и «мÑгкий» пÑедел. ÐÑгкий пÑедел дейÑÑвиÑелÑно огÑаниÑÐ¸Ð²Ð°ÐµÑ Ð¸ÑполÑзование ÑеÑÑÑÑа, но полÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиÑÑ ÐµÐ³Ð¾ знаÑение до жÑÑÑкого пÑедела. ÐзмениÑÑ Ð¶ÑÑÑкий пÑедел Ð¼Ð¾Ð¶ÐµÑ ÑолÑко полÑзоваÑÐµÐ»Ñ root. Ðа изменение ÑÑиÑ
паÑамеÑÑов оÑвеÑÐ°ÐµÑ ÑиÑÑемнÑй вÑзов setrlimit. УпÑавлÑÑÑ ÑÑими ÑеÑÑÑÑами в командной ÑÑÑоке позволÑÐµÑ Ð²ÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ulimit (в оболоÑкаÑ
Bourne) и limit (csh). Ð ÑиÑÑемаÑ
ÑемейÑÑва BSD ÑазлиÑнÑми огÑаниÑениÑми ÑеÑÑÑÑов, ÑÑÑанавливаемÑми пÑи вÑ
оде полÑзоваÑелÑ, ÑпÑавлÑÐµÑ Ñайл /etc/login.conf. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº докÑменÑаÑии опеÑаÑионной ÑиÑÑемÑ. ÐÐ»Ñ Postgres Pro инÑеÑÐµÑ Ð¿ÑедÑÑавлÑÑÑ Ð¿Ð°ÑамеÑÑÑ maxproc, openfiles и datasize. Ðни могÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ, напÑÐ¸Ð¼ÐµÑ Ñак:
default:\
...
:datasize-cur=256M:\
:maxproc-cur=256:\
:openfiles-cur=256:\
... (ÐдеÑÑ -cur обознаÑÐ°ÐµÑ Ð¼Ñгкий пÑедел. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð¶ÑÑÑкий пÑедел, нÑжно замениÑÑ ÑÑо оконÑание на -max.)
ЯдÑо Ñакже Ð¼Ð¾Ð¶ÐµÑ ÑÑÑанавливаÑÑ Ð¾Ð±ÑеÑиÑÑемнÑе огÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° иÑполÑзование некоÑоÑÑÑ ÑеÑÑÑÑов.
Ð Linux макÑималÑное ÑиÑло оÑкÑÑÑÑÑ Ñайлов, коÑоÑое поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑдÑо, опÑеделÑеÑÑÑ Ð¿Ð°ÑамеÑÑом ÑдÑа
fs.file-max. ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ñедел можно, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹sysctl -w fs.file-max=. ЧÑÐ¾Ð±Ñ ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÐ¾Ñ ÑанÑлиÑÑ Ð¿Ð¾Ñле пеÑезагÑÑзки, ÑледÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¿ÑиÑваивание в ÑайлN/etc/sysctl.conf. ÐакÑималÑное ÑиÑло Ñайлов Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ пÑоÑеÑÑа задаÑÑÑÑ Ð¿Ñи компилÑÑии ÑдÑа; за дополниÑелÑнÑми ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑиÑеÑÑ Ðº/usr/src/linux/Documentation/proc.txt.
СеÑÐ²ÐµÑ Postgres Pro иÑполÑзÑÐµÑ Ð´Ð»Ñ Ð¾Ð±ÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ подклÑÑÐµÐ½Ð¸Ñ Ð¾ÑделÑнÑй пÑоÑеÑÑ, Ñак ÑÑо возможное ÑиÑло пÑоÑеÑÑов должно бÑÑÑ Ð½Ðµ менÑÑе ÑиÑла ÑазÑеÑÑннÑÑ Ñоединений плÑÑ ÑиÑло пÑоÑеÑÑов, ÑÑебÑемÑÑ Ð´Ð»Ñ Ð¾ÑÑалÑной ÑиÑÑемÑ. ÐÑо обÑÑно не пÑоблема, но когда в одной ÑиÑÑеме ÑабоÑÐ°ÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑеÑвеÑов, пÑедел Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑигнÑÑ.
РкаÑеÑÑве макÑималÑного ÑиÑла оÑкÑÑÑÑÑ Ñайлов по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑÑно вÑбиÑаÑÑÑÑ Â«ÑоÑиалÑно-оÑиенÑиÑованнÑе» знаÑениÑ, позволÑÑÑие иÑполÑзоваÑÑ Ð¾Ð´Ð½Ñ ÑиÑÑÐµÐ¼Ñ Ð½ÐµÑколÑким полÑзоваÑелÑм Ñак, ÑÑÐ¾Ð±Ñ Ð½Ð¸ один из Ð½Ð¸Ñ Ð½Ðµ поÑÑеблÑл ÑлиÑком много ÑиÑÑемнÑÑ ÑеÑÑÑÑов. ÐÑли Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе в ÑиÑÑеме неÑколÑко ÑеÑвеÑов, ÑÑо должно вполне ÑÑÑÑаиваÑÑ, но на вÑделеннÑÑ Ð¼Ð°ÑÐ¸Ð½Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð¶ÐµÐ»Ð°Ð½Ð¸Ðµ ÑвелиÑиÑÑ ÑÑÐ¾Ñ Ð¿Ñедел.
С дÑÑгой ÑÑоÑонÑ, некоÑоÑÑе ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ Ð¾ÑделÑнÑм пÑоÑеÑÑам оÑкÑÑваÑÑ Ð¾ÑÐµÐ½Ñ Ð¼Ð½Ð¾Ð³Ð¾ Ñайлов и еÑли ÑÑо делаÑÑ ÑÑÐ°Ð·Ñ Ð½ÐµÑколÑко пÑоÑеÑÑов, они могÑÑ Ð»ÐµÐ³ÐºÐ¾ иÑÑеÑпаÑÑ Ð¾Ð±ÑеÑиÑÑемнÑй пÑедел. ÐÑли Ð²Ñ ÑÑолкнÑÑеÑÑ Ñ Ñакой ÑиÑÑаÑией, но не Ð·Ð°Ñ Ð¾ÑиÑе менÑÑÑ Ð¾Ð±ÑеÑиÑÑемное огÑаниÑение, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе огÑаниÑиÑÑ Ð¸ÑполÑзование оÑкÑÑÑÑÑ Ñайлов ÑеÑвеÑом Postgres Pro, ÑÑÑановив паÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии max_files_per_process.
ÐÑÑ Ð¾Ð´Ð½Ð¾ огÑаниÑение в ÑдÑе, Ñ ÐºÐ¾ÑоÑÑм можно ÑÑолкнÑÑÑÑÑ, когда ÑÑÑанавливаеÑÑÑ Ð±Ð¾Ð»ÑÑое колиÑеÑÑво клиенÑÑкиÑ
подклÑÑений, â макÑималÑÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° оÑеÑеди подклÑÑений к ÑокеÑÑ. ÐÑли колиÑеÑÑво запÑоÑов на подклÑÑение за коÑоÑкий пÑомежÑÑок вÑемени пÑевÑÑÐ°ÐµÑ ÑÑÐ¾Ñ Ð¼Ð°ÐºÑимÑм, некоÑоÑÑе из ниÑ
бÑдÑÑ Ð¾ÑÐºÐ»Ð¾Ð½ÐµÐ½Ñ Ð´Ð¾ Ñого, как ÑеÑÐ²ÐµÑ Postgres Pro ÑÐ¼Ð¾Ð¶ÐµÑ Ð¸Ñ
обÑабоÑаÑÑ, пÑи ÑÑом клиенÑÑ Ð¿Ð¾Ð»ÑÑÐ°Ñ Ð½ÐµÐ¸Ð½ÑоÑмаÑивное ÑообÑение об оÑибке подклÑÑÐµÐ½Ð¸Ñ Ñипа «Resource temporarily unavailable» (РеÑÑÑÑ Ð²Ñеменно недоÑÑÑпен) или «Connection refused» (Ðе ÑдалоÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ). ÐÑедел Ð´Ð»Ð¸Ð½Ñ Ð¾ÑеÑеди на многиÑ
плаÑÑоÑмаÑ
по ÑмолÑÐ°Ð½Ð¸Ñ ÑоÑÑавлÑÐµÑ 128. ЧÑÐ¾Ð±Ñ ÑвелиÑиÑÑ ÐµÐ³Ð¾, наÑÑÑойÑе ÑооÑвеÑÑÑвÑÑÑий паÑамеÑÑ ÑдÑа ÑеÑез sysctl и пеÑезапÑÑÑиÑе ÑеÑÐ²ÐµÑ Postgres Pro. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ð°Ð·ÑваеÑÑÑ net.core.somaxconn в Linux, kern.ipc.soacceptqueue в поÑледниÑ
веÑÑиÑÑ
FreeBSD и kern.ipc.somaxconn в macOS и на дÑÑгиÑ
плаÑÑоÑмаÑ
BSD.
17.4.4. ЧÑезмеÑное вÑделение памÑÑи в Linux #
Ð Linux Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ виÑÑÑалÑной памÑÑи по ÑмолÑÐ°Ð½Ð¸Ñ ÑабоÑÐ°ÐµÑ Ð½Ðµ опÑималÑно Ð´Ð»Ñ Postgres Pro. ÐÑледÑÑвие Ñого, ÑÑо ÑдÑо вÑделÑÐµÑ Ð¿Ð°Ð¼ÑÑÑ Ð² ÑÑезмеÑном обÑÑме, оно Ð¼Ð¾Ð¶ÐµÑ ÑниÑÑожиÑÑ Ð³Ð»Ð°Ð²Ð½Ñй ÑпÑавлÑÑÑий пÑоÑеÑÑ Postgres Pro (postmaster), еÑли пÑи вÑделении памÑÑи пÑоÑеÑÑÑ Postgres Pro или дÑÑÐ³Ð¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ Ð²Ð¸ÑÑÑалÑÐ½Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ Ð±ÑÐ´ÐµÑ Ð¸ÑÑеÑпана.
Ðогда ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð¿ÑимеÑно Ñакое ÑообÑение ÑдÑа (где именно иÑкаÑÑ ÑÑо ÑообÑение, можно ÑзнаÑÑ Ð² докÑменÑаÑии ваÑей ÑиÑÑемÑ):
Out of Memory: Killed process 12345 (postgres).
ÐÑо ÑообÑение говоÑÐ¸Ñ Ð¾ Ñом, ÑÑо пÑоÑеÑÑ postgres бÑл ÑниÑÑожен из-за неÑ
ваÑки памÑÑи. ХоÑÑ ÑÑÑеÑÑвÑÑÑие подклÑÑÐµÐ½Ð¸Ñ Ðº базе даннÑÑ
бÑдÑÑ ÑабоÑаÑÑ Ð¿Ð¾-пÑежнемÑ, новÑе подклÑÑÐµÐ½Ð¸Ñ Ð¿ÑинимаÑÑÑÑ Ð½Ðµ бÑдÑÑ. ЧÑÐ¾Ð±Ñ Ð²Ð¾ÑÑÑановиÑÑ ÑабоÑÑ ÑеÑвеÑа, Postgres Pro пÑидÑÑÑÑ Ð¿ÐµÑезапÑÑÑиÑÑ.
Ðдин из ÑпоÑобов обойÑи ÑÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ â запÑÑкаÑÑ Postgres Pro на компÑÑÑеÑе, где никакие дÑÑгие пÑоÑеÑÑÑ Ð½Ðµ займÑÑ Ð²ÑÑ Ð¿Ð°Ð¼ÑÑÑ. ÐÑли ÑизиÑеÑкой памÑÑи недоÑÑаÑоÑно, ÑеÑиÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñакже можно, ÑвелиÑив обÑÑм пÑоÑÑÑанÑÑва подкаÑки, Ñак как ÑниÑÑожение пÑоÑеÑÑов пÑи Ð½ÐµÑ Ð²Ð°Ñке памÑÑи пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÑолÑко когда заканÑиваеÑÑÑ Ð¸ ÑизиÑеÑÐºÐ°Ñ Ð¿Ð°Ð¼ÑÑÑ, и меÑÑо в пÑоÑÑÑанÑÑве подкаÑки.
ÐÑли памÑÑи не Ñ
ваÑÐ°ÐµÑ Ð¿Ð¾ вине Ñамого Postgres Pro, ÑÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑеÑиÑÑ, изменив конÑигÑÑаÑÐ¸Ñ ÑеÑвеÑа. РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ ÑменÑÑение конÑигÑÑаÑионнÑÑ
паÑамеÑÑов, ÑвÑзаннÑÑ
Ñ Ð¿Ð°Ð¼ÑÑÑÑ, а именно shared_buffers, work_mem и hash_mem_multiplier. РдÑÑгиÑ
ÑлÑÑаÑÑ
пÑоблема Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑÑ, поÑÐ¾Ð¼Ñ ÑÑо ÑазÑеÑено ÑлиÑком много подклÑÑений к ÑÐ°Ð¼Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð±Ð°Ð· даннÑÑ
. ЧаÑе вÑего в Ñакой ÑиÑÑаÑии ÑÑÐ¾Ð¸Ñ ÑменÑÑиÑÑ ÑиÑло подклÑÑений max_connections и оÑганизоваÑÑ Ð²Ð½ÐµÑний пÑл Ñоединений.
«ЧÑезмеÑное вÑделение» памÑÑи можно пÑедоÑвÑаÑиÑÑ, изменив поведение ÑдÑа. ХоÑÑ Ð¿Ñи ÑÑом OOM killer (ÑниÑÑожение пÑоÑеÑÑов пÑи неÑ
ваÑке памÑÑи) вÑÑ Ñавно Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзÑваÑÑÑÑ, веÑоÑÑноÑÑÑ Ñакого ÑниÑÑÐ¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÑиÑелÑно ÑменÑÑаеÑÑÑ, а знаÑÐ¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑиÑÑÐµÐ¼Ñ ÑÑановиÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑÑабилÑнÑм. ÐÐ»Ñ ÑÑого нÑжно вклÑÑиÑÑ Ñежим ÑÑÑогого вÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи, воÑполÑзовавÑиÑÑ sysctl:
sysctl -w vm.overcommit_memory=2
либо помеÑÑив ÑооÑвеÑÑÑвÑÑÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð² /etc/sysctl.conf. Ðозможно, Ð²Ñ Ñакже заÑ
оÑиÑе измениÑÑ ÑвÑзаннÑй паÑамеÑÑ vm.overcommit_ratio. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº докÑменÑаÑии ÑдÑа https://www.kernel.org/doc/Documentation/vm/overcommit-accounting.
ÐÑÑгой подÑ
од, коÑоÑÑй можно пÑимениÑÑ (возможно, вмеÑÑе Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸ÐµÐ¼ vm.overcommit_memory), заклÑÑаеÑÑÑ Ð² иÑклÑÑении пÑоÑеÑÑа postmaster из ÑиÑла возможнÑÑ
жеÑÑв пÑи неÑ
ваÑке памÑÑи. ÐÐ»Ñ ÑÑого нÑжно задаÑÑ Ð´Ð»Ñ ÑвойÑÑва попÑавка оÑков OOM ÑÑого пÑоÑеÑÑа знаÑение -1000. ÐÑоÑе вÑего ÑÑо можно ÑделаÑÑ, вÑполнив
echo -1000 > /proc/self/oom_score_adj
в ÑкÑипÑе запÑÑка Postgres Pro непоÑÑедÑÑвенно пеÑед Ñем, как запÑÑкаÑÑ postgres. ÐамеÑÑÑе, ÑÑо делаÑÑ ÑÑо надо под именем root, инаÑе ниÑего не измениÑÑÑ; поÑÑÐ¾Ð¼Ñ Ð¿ÑоÑе вÑего вÑÑавиÑÑ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑÑаÑÑовÑй ÑкÑипÑ, пÑинадлежаÑий полÑзоваÑÐµÐ»Ñ root. ÐÑли Ð²Ñ Ð´ÐµÐ»Ð°ÐµÑе ÑÑо, Ð²Ñ Ñакже Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑÑановиÑÑ Ð² данном ÑкÑипÑе ÑÑи пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¿ÐµÑед запÑÑком postgres:
export PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj export PG_OOM_ADJUST_VALUE=0
С Ñакими паÑамеÑÑами доÑеÑние пÑоÑеÑÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ бÑдÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ñ Ð¾Ð±ÑÑной, нÑлевой попÑавкой оÑков OOM, Ñак ÑÑо пÑи необÑ
одимоÑÑи меÑ
анизм OOM ÑÐ¼Ð¾Ð¶ÐµÑ ÑниÑÑожаÑÑ Ð¸Ñ
. ÐÑ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ Ð¸ дÑÑгое знаÑение Ð´Ð»Ñ PG_OOM_ADJUST_VALUE, еÑли Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð´Ð¾ÑеÑние пÑоÑеÑÑÑ Ð¸ÑполнÑлиÑÑ Ñ Ð´ÑÑгой попÑавкой OOM. (PG_OOM_ADJUST_VALUE Ñакже можно опÑÑÑиÑÑ, в ÑÑом ÑлÑÑае подÑазÑмеваеÑÑÑ Ð½Ñлевое знаÑение.) ÐÑли Ð²Ñ Ð½Ðµ ÑÑÑановиÑе PG_OOM_ADJUST_FILE, доÑеÑние пÑоÑеÑÑÑ Ð±ÑдÑÑ ÑабоÑаÑÑ Ñ Ñой же попÑавкой оÑков OOM, коÑоÑÐ°Ñ Ð·Ð°Ð´Ð°Ð½Ð° Ð´Ð»Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ пÑоÑеÑÑа, ÑÑо неÑазÑмно, Ñак вÑÑ ÑÑо делаеÑÑÑ ÐºÐ°Ðº Ñаз Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð³Ð»Ð°Ð²Ð½Ñй пÑоÑеÑÑ Ð¾ÐºÐ°Ð·Ð°Ð»ÑÑ Ð½Ð° оÑобом положении.
17.4.5. ÐгÑомнÑе ÑÑÑаниÑÑ Ð² Linux #
ÐÑполÑзование огÑомнÑÑ
ÑÑÑÐ°Ð½Ð¸Ñ (huge pages) ÑÐ½Ð¸Ð¶Ð°ÐµÑ Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ñе ÑаÑÑ
Ð¾Ð´Ñ Ð¿Ñи ÑабоÑе Ñ Ð±Ð¾Ð»ÑÑими непÑеÑÑвнÑми блоками памÑÑи, ÑÑо Ñ
аÑакÑеÑно Ð´Ð»Ñ Postgres Pro, оÑобенно пÑи болÑÑом обÑÑме shared_buffers. ЧÑÐ¾Ð±Ñ Ñакие ÑÑÑаниÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло задейÑÑвоваÑÑ Ð² Postgres Pro, ÑдÑо должно бÑÑÑ ÑобÑано Ñ Ð¿Ð°ÑамеÑÑами CONFIG_HUGETLBFS=y и CONFIG_HUGETLB_PAGE=y. Также вам понадобиÑÑÑ Ð½Ð°ÑÑÑоиÑÑ ÐС, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° могла вÑделиÑÑ Ð´Ð¾ÑÑаÑоÑное колиÑеÑÑво огÑомнÑÑ
ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ñжного ÑазмеÑа. ÐÑÑиÑлÑемÑй паÑамеÑÑ shared_memory_size_in_huge_pages показÑÐ²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑебÑемÑÑ
огÑомнÑÑ
ÑÑÑаниÑ. УзнаÑÑ Ð·Ð½Ð°Ñение ÑÑого паÑамеÑÑа можно до запÑÑка ÑеÑвеÑа ÑеÑез ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ postgres, напÑимеÑ:
$postgres -D $PGDATA -C shared_memory_size_in_huge_pages3170 $grep ^Hugepagesize /proc/meminfoHugepagesize: 2048 kB $ls /sys/kernel/mm/hugepageshugepages-1048576kB hugepages-2048kB
Ð ÑÑом пÑимеÑе ÑÐ°Ð·Ð¼ÐµÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ ÑоÑÑавлÑÐµÑ 2 ÐÐ, но задав в паÑамеÑÑе huge_page_size 2 ÐРили 1 ÐÐ ÑвнÑм обÑазом, Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе в shared_memory_size_in_huge_pages пеÑеÑÑиÑанное колиÑеÑÑво ÑÑÑаниÑ. Рданном пÑимеÑе ÑеÑвеÑÑ Ð¿Ð¾ÑÑебÑеÑÑÑ 3170 огÑомнÑÑ
ÑÑÑаниÑ, но можно запÑоÑиÑÑ Ð¸ болÑÑе, еÑли огÑомнÑе ÑÑÑаниÑÑ Ð±ÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¸ дÑÑгими пÑогÑаммами в ÑÑой ÑиÑÑеме. ÐÑбÑанное знаÑение можно задаÑÑ Ñак:
# sysctl -w vm.nr_hugepages=3170 Ðе забÑдÑÑе добавиÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð² /etc/sysctl.conf, ÑÑÐ¾Ð±Ñ Ð¾Ð½ дейÑÑвовал и поÑле пеÑезагÑÑзки. ÐÑли же ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ð³ÑомнÑÑ
ÑÑÑÐ°Ð½Ð¸Ñ Ð¾ÑлиÑаеÑÑÑ Ð¾Ñ Ð¿Ð¾Ð´ÑазÑмеваемого по ÑмолÑаниÑ, иÑ
колиÑеÑÑво можно задаÑÑ Ñак:
# echo 3170 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages Также можно задаÑÑ ÑÑи паÑамеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки ÐС, ÑÑÑановив ÑооÑвеÑÑÑвÑÑÑие паÑамеÑÑÑ ÑдÑа, напÑÐ¸Ð¼ÐµÑ hugepagesz=2M hugepages=3170.
Ðногда ÑдÑо не Ð¼Ð¾Ð¶ÐµÑ ÑÑÐ°Ð·Ñ Ð²ÑделиÑÑ Ð·Ð°Ð¿ÑоÑенное колиÑеÑÑво огÑомнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð¸Ð·-за ÑÑагменÑаÑии, поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¿Ð¾Ð²ÑоÑиÑÑ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸Ð»Ð¸ пеÑезагÑÑзиÑÑ ÑиÑÑемÑ. (Ðемедленно поÑле пеÑезагÑÑзки должен бÑÑÑ Ñвободен болÑÑий обÑÑм памÑÑи Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² огÑомнÑе ÑÑÑаниÑÑ.) ЧÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ ÑекÑÑÑÑ ÑиÑÑаÑÐ¸Ñ Ñ ÑазмеÑением огÑомнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð¾Ð¿ÑеделÑнного ÑазмеÑа, вÑполниÑе:
$ cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepagesТакже Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð´Ð°ÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, запÑÑкаÑÑÐµÐ¼Ñ ÑеÑÐ²ÐµÑ ÐÐ, пÑаво иÑполÑзоваÑÑ Ð¾Ð³ÑомнÑе ÑÑÑаниÑÑ, ÑÑÑановив его гÑÑÐ¿Ð¿Ñ Ð² vm.hugetlb_shm_group Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ sysctl, и/или ÑазÑеÑиÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑ Ð¿Ð°Ð¼ÑÑÑ, вÑполнив ulimit -l.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Postgres Pro пÑÑаеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð³ÑомнÑе ÑÑÑаниÑÑ ÑÑандаÑÑного ÑазмеÑа, а в пÑоÑивном ÑлÑÑае пеÑеÑ
Ð¾Ð´Ð¸Ñ Ðº обÑÑнÑм ÑÑÑаниÑам. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ Ð¾Ð³ÑомнÑе ÑÑÑаниÑÑ Ð¿ÑинÑдиÑелÑно, можно ÑÑÑановиÑÑ Ð´Ð»Ñ huge_pages знаÑение on в postgresql.conf. ÐамеÑÑÑе, ÑÑо Ñ Ñаким знаÑением Postgres Pro не ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑÑÑ, еÑли не полÑÑÐ¸Ñ Ð´Ð¾ÑÑаÑоÑного колиÑеÑÑва огÑомнÑÑ
ÑÑÑаниÑ.
Ðолее подÑобно о Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ðµ огÑомнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð² Linux можно ÑзнаÑÑ Ð² докÑменÑаÑии ÑдÑа: https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt.