sql >> Databáze >  >> RDS >> PostgreSQL

Alternativy PGTune - Konfigurace ClusterControl PostgreSQL

Pokud s PostgreSQL začínáte, nejčastějším problémem, kterému čelíte, je vyladění databázového prostředí.

Když je PostgreSQL nainstalován, automaticky vytvoří základní soubor postgresql.conf. Tento konfigurační soubor je normálně uložen v datovém adresáři v závislosti na operačním systému, který používáte. Například v Ubuntu PostgreSQL umístí konfigurace (pg_hba.conf, postgresql.conf, pg_ident.conf) do adresáře /etc/postgresql. Než budete moci vyladit databázi PostgreSQL, musíte nejprve najít soubory postgresql.conf.

Jaká nastavení je však vhodné použít? a jaké jsou hodnoty nastavené na začátku? Použití externích nástrojů, jako je PGTune (a alternativních nástrojů, jako je ClusterControl), vám pomůže vyřešit tento konkrétní problém.

Co je PGTune?

PGTune je průvodce konfigurací, který původně vytvořil Greg Smith z 2ndQuadrant. Je založen na skriptu Python, který již bohužel není podporován. (Nepodporuje novější verze PostgreSQL.) Poté přešel na pgtune.leopard.in.ua (který je založen na původním PGTune) a je nyní konfiguračním průvodcem, kterého můžete použít pro nastavení konfigurace databáze PG.

PGTune se používá k výpočtu konfiguračních parametrů pro PostgreSQL na základě maximálního výkonu pro danou konfiguraci hardwaru. Není to však žádná sláva, protože mnoho nastavení závisí nejen na hardwarové konfiguraci, ale také na velikosti databáze, počtu klientů a složitosti dotazů.

Jak používat PGTune

Stará verze PGTune byla založena na python skriptu, který můžete vyvolat příkazem shellu (pomocí Ubuntu):

[email protected]:~/pgtune-master# $PWD/pgtune -L -T Mixed -i /etc/postgresql/9.1/main/postgresql.conf | sed -e '/#.*/d' | sed '/^$/N;/^\n/D' 

stats_temp_directory = '/var/run/postgresql/9.1-main.pg_stat_tmp'

datestyle = 'iso, mdy'

default_text_search_config = 'pg_catalog.english'

default_statistics_target = 100

maintenance_work_mem = 120MB

checkpoint_completion_target = 0.9

effective_cache_size = 1408MB

work_mem = 9MB

wal_buffers = 16MB

checkpoint_segments = 32

shared_buffers = 480MB

Nový je však mnohem jednodušší a mnohem pohodlnější, protože k němu můžete přistupovat pouze prostřednictvím prohlížeče. Stačí jít na https://pgtune.leopard.in.ua/. Dobrý příklad je uveden níže:

Vše, co musíte udělat, je zadat následující pole níže:

  • Verze DB - verzi vašeho PostgreSQL. Podporuje verze PostgreSQL od 9.2, 9.3, 9.4, 9.5, 9.6, 10, 11 a 12.
  • Typ operačního systému - typ OS (Linux, OS X, Windows)
  • Typ DB - typ databáze, což je hlavně to, jaký druh transakčního zpracování bude vaše databáze zpracovávat (webová aplikace, OLTP, datové sklady, desktopová aplikace, smíšený typ aplikací)
  • Celková paměť (RAM) - Celková paměť, kterou vaše instance PG zvládne. Je potřeba to specifikovat v GiB.
  • Počet procesorů - Počet CPU, které může PostgreSQL používat CPU =vlákna na jádro * jádra na soket * sokety
  • Počet připojení - Maximální počet připojení klienta PostgreSQL
  • Úložiště dat – Typ zařízení pro ukládání dat, které si můžete vybrat z úložiště založeného na SSD, HDD nebo SAN.

Potom stiskněte tlačítko Generovat. Alternativně můžete také spustit příkaz ALTER SYSTEM, který vygeneruje postgresql.auto.conf, ale nebude to trvat, dokud nenarazíte na restart PostgreSQL.

Jak to nastavuje hodnoty

Algoritmus pro tento nástroj lze v podstatě nalézt zde v configuration.js. Sdílí stejný algoritmus jako starý PGTune začínající zde pgtune#L477. Například verze PostgreSQL <9.5 podporují checkpoint_segments, ale PG>=9.5 používá min_wal_size a max_wal_size.

Nastavení kontrolních_segmentů nebo min_wal_size/max_wal_size závisí na typu verze PostgreSQL a typu DB transakce databázové aplikace. Podívejte se, jak na to ve úryvku níže:

if (dbVersion < 9.5) {

  return [

    {

      key: 'checkpoint_segments',

      value: ({

        [DB_TYPE_WEB]: 32,

        [DB_TYPE_OLTP]: 64,

        [DB_TYPE_DW]: 128,

        [DB_TYPE_DESKTOP]: 3,

        [DB_TYPE_MIXED]: 32

      }[dbType])

    }

  ]

} else {

  return [

    {

      key: 'min_wal_size',

      value: ({

        [DB_TYPE_WEB]: (1024 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),

        [DB_TYPE_OLTP]: (2048 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),

        [DB_TYPE_DW]: (4096 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),

        [DB_TYPE_DESKTOP]: (100 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),

        [DB_TYPE_MIXED]: (1024 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB'])

      }[dbType])

    },

    {

      key: 'max_wal_size',

      value: ({

        [DB_TYPE_WEB]: (4096 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),

        [DB_TYPE_OLTP]: (8192 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),

        [DB_TYPE_DW]: (16384 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),

        [DB_TYPE_DESKTOP]: (2048 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),

        [DB_TYPE_MIXED]: (4096 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB'])

      }[dbType])

    }

  ]

}

Jen pro krátké vysvětlení, zjistí, zda je dbVersion <9.5, a poté určí navrhované hodnoty pro proměnné checkpoint_segments nebo min_wal_size/max_wal_size na základě typu hodnoty dbType nastavené ve formuláři webového uživatelského rozhraní.

V podstatě se můžete dozvědět více o algoritmu o tom, jak se rozhoduje navrhnout hodnoty, v tomto skriptu configuration.js.

Ladění konfigurace PostgreSQL pomocí ClusterControl

Pokud používáte ClusterControl k vytvoření, sestavení nebo importu clusteru, automaticky provede počáteční ladění na základě daných hardwarových specifikací. Například vytvoření clusteru s následujícími specifikacemi úlohy níže,

{

  "command": "create_cluster",

  "group_id": 1,

  "group_name": "admins",

  "job_data": {

    "api_id": 1,

    "cluster_name": "pg_11",

    "cluster_type": "postgresql_single",

    "company_id": "1",

    "datadir": "/var/lib/postgresql/11/",

    "db_password": "dbapgadmin",

    "db_user": "dbapgadmin",

    "disable_firewall": true,

    "disable_selinux": true,

    "generate_token": true,

    "install_software": true,

    "nodes": [

      {

        "hostname": "192.168.30.40",

        "hostname_data": "192.168.30.40",

        "hostname_internal": "",

        "port": "5432"

      },

      {

        "hostname": "192.168.30.50",

        "hostname_data": "192.168.30.50",

        "hostname_internal": "",

        "port": "5432",

        "synchronous": false

      }

    ],

    "port": "5432",

    "ssh_keyfile": "/home/vagrant/.ssh/id_rsa",

    "ssh_port": "22",

    "ssh_user": "vagrant",

    "sudo_password": "",

    "user_id": 1,

    "vendor": "default",

    "version": "11"

  },

  "user_id": 1,

  "user_name": "[email protected]"

}

Poskytuje mi následující ladění, jak je uvedeno níže:

[[email protected] ~]# s9s job --log  --job-id 84919 | sed -n '/stat_statements/,/Writing/p'

192.168.30.40:5432: Enabling stat_statements plugin.

192.168.30.40:5432: Setting wal options.

192.168.30.40:5432: Performance tuning.

192.168.30.40: Detected memory: 1999MB.

192.168.30.40:5432: Selected workload type: mixed

Using the following fine-tuning options:

  checkpoint_completion_target: 0.9

  effective_cache_size: 1535985kB

  maintenance_work_mem: 127998kB

  max_connections: 100

  shared_buffers: 511995kB

  wal_keep_segments: 32

  work_mem: 10239kB

Writing file '192.168.30.40:/etc/postgresql/11/main/postgresql.conf'.

192.168.30.50:5432: Enabling stat_statements plugin.

192.168.30.50:5432: Setting wal options.

192.168.30.50:5432: Performance tuning.

192.168.30.50: Detected memory: 1999MB.

192.168.30.50:5432: Selected workload type: mixed

Using the following fine-tuning options:

  checkpoint_completion_target: 0.9

  effective_cache_size: 1535985kB

  maintenance_work_mem: 127998kB

  max_connections: 100

  shared_buffers: 511995kB

  wal_keep_segments: 32

  work_mem: 10239kB

Writing file '192.168.30.50:/etc/postgresql/11/main/postgresql.conf'.

Kromě toho také vyladí parametry vašeho systému nebo jádra, jako je,

192.168.30.50:5432: Tuning OS parameters.

192.168.30.50:5432: Setting vm.swappiness = 1.

Závěr

Parametry ladění ClusterControl jsou také založeny na algoritmu sdíleném v pgtune#L477. Není to luxusní, ale můžete to změnit na jakékoli hodnoty, které chcete. S těmito hodnotami nastavení vám umožňuje mít nezpracovaný start, který je dostatečně připraven na to, aby zvládl produkční zatížení na základě počátečních daných hodnot.


  1. Spojte hodnotu druhého sloupce, pokud je hodnota prvního sloupce stejná

  2. Automatický sběr dat změn databázového schématu na MS SQL Server

  3. Jak mohu uzamknout tabulku při čtení pomocí Entity Framework?

  4. volání uloženého procesu přes dblink