sql >> Database teknologi >  >> RDS >> PostgreSQL

PGTune-alternativer - ClusterControl PostgreSQL-konfiguration

Hvis du er ny til PostgreSQL, er den mest almindelige udfordring, du står over for, hvordan du justerer dit databasemiljø.

Når PostgreSQL er installeret, producerer det automatisk en grundlæggende postgresql.conf-fil. Denne konfigurationsfil opbevares normalt i databiblioteket afhængigt af det operativsystem, du bruger. For eksempel, i Ubuntu placerer PostgreSQL konfigurationerne (pg_hba.conf, postgresql.conf, pg_ident.conf) inde i mappen /etc/postgresql. Før du kan tune din PostgreSQL-database, skal du først finde postgresql.conf-filerne.

Men hvad er de rigtige indstillinger at bruge? og hvad er værdierne sat til i første omgang? Brug af eksterne værktøjer såsom PGTune (og alternative værktøjer som ClusterControl) vil hjælpe dig med at løse dette specifikke problem.

Hvad er PGTune?

PGtune er en konfigurationsguide, som oprindeligt blev skabt af Greg Smith fra 2ndQuadrant. Det er baseret på et Python-script, som desværre ikke længere understøttes. (Det understøtter ikke nyere versioner af PostgreSQL.) Det overgik derefter til pgtune.leopard.in.ua (som er baseret på den originale PGTune) og er nu en konfigurationsguide, du kan bruge til dine PG-databasekonfigurationsindstillinger.

PGtune bruges til at beregne konfigurationsparametre for PostgreSQL baseret på den maksimale ydeevne for en given hardwarekonfiguration. Det er dog ikke en sølvkugle, da mange indstillinger ikke kun afhænger af hardwarekonfigurationen, men også af størrelsen af ​​databasen, antallet af klienter og kompleksiteten af ​​forespørgsler.

Sådan bruges PGTune

Den gamle version af PGTune var baseret på python-script, som du kan påkalde via shell-kommando (ved hjælp af 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 

Men den nye er meget nemmere og mere praktisk, da du bare kan få adgang via browseren. Bare gå til https://pgtune.leopard.in.ua/. Et godt eksempel er som nedenfor:

Alt du skal gøre er at angive følgende felter nedenfor:

  • DB-version - versionen af ​​din PostgreSQL. Det understøtter versioner af PostgreSQL fra 9.2, 9.3, 9.4, 9.5, 9.6, 10, 11 og 12.
  • OS-type - OS-typen (Linux, OS X, Windows)
  • DB-type - databasetypen, som hovedsageligt er den slags transaktionsbehandling din database vil håndtere (webapplikation, OLTP, datavarehusning, desktopapplikation, blandet type applikationer)
  • Total hukommelse (RAM) - Den samlede hukommelse, som din PG-instans vil håndtere. Skal angive det i GiB.
  • Antal CPU'er - Antal CPU'er, som PostgreSQL kan bruge CPU'er =tråde pr. kerne * kerner pr. socket * sockets
  • Antal forbindelser - Maksimalt antal PostgreSQL-klientforbindelser
  • Datalagring - Type datalagringsenhed, som du kan vælge mellem SSD, HDD eller SAN-baseret lagring.

Tryk derefter på knappen Generer. Alternativt kan du også køre ALTER SYSTEM-sætningen, som genererer postgresql.auto.conf, men det tager ikke før du rammer en PostgreSQL-genstart.

Hvordan sætter den værdierne

Algoritmen for dette værktøj kan grundlæggende findes her i configuration.js. Den deler den samme algoritme fra den gamle PGTune, der starter her pgtune#L477. For eksempel understøtter versioner af PostgreSQL <9.5 checkpoint_segments, men PG>=9.5 bruger min_wal_size og max_wal_size.

Indstilling af checkpoint_segments eller min_wal_size/max_wal_size afhænger af hvilken type PostgreSQL-version og DB-typen af ​​databaseapplikationstransaktion. Se hvordan i uddraget nedenfor:

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])

    }

  ]

} 

Bare for at forklare kort, det registrerer, om dbVersion <9.5, så bestemmer det de foreslåede værdier for variablerne checkpoint_segments eller min_wal_size/max_wal_size baseret på typen af ​​dbType-værdi, der er indstillet under web-UI-formularen.

Grundlæggende kan du lære mere om algoritmen om, hvordan den beslutter sig for at foreslå værdierne, ved at se på dette script configuration.js.

PostgreSQL-konfigurationsjustering med ClusterControl

Hvis du bruger ClusterControl til at oprette, bygge eller importere en klynge, foretager den automatisk en indledende tuning baseret på de givne hardwarespecifikationer. For eksempel oprettelse af en klynge med følgende jobspecifikationer nedenfor,

{

  "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]"

} 

Giver mig følgende tuning som vist nedenfor:

[[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'.

Derudover justerer den også dit system eller kerneparametre såsom,

192.168.30.50:5432: Tuning OS parameters.

192.168.30.50:5432: Setting vm.swappiness = 1. 

Konklusion

ClusterControl-indstillingsparametrene er også baseret på den algoritme, der deles i pgtune#L477. Det er ikke fancy, men du kan ændre det til de værdier, du ønsker. Med disse indstillingsværdier giver det dig mulighed for at få en rå start, som er klar nok til at håndtere en produktionsbelastning baseret på de oprindelige givne værdier.


  1. How to_timestamp() virker i PostgreSQL

  2. Postgres:vælg summen af ​​værdier, og summer dette igen

  3. Vælg rækker, der ikke er til stede i anden tabel

  4. Adgang nægtet for brugeren 'root'@'localhost' med PHPMyAdmin