sql >> Database >  >> RDS >> PostgreSQL

PGTune-alternatieven - ClusterControl PostgreSQL-configuratie

Als PostgreSQL nieuw voor u is, is de meest voorkomende uitdaging waar u voor staat, hoe u uw database-omgeving kunt optimaliseren.

Wanneer PostgreSQL is geïnstalleerd, produceert het automatisch een standaard postgresql.conf-bestand. Dit configuratiebestand wordt normaal gesproken in de gegevensmap bewaard, afhankelijk van het besturingssysteem dat u gebruikt. In Ubuntu plaatst PostgreSQL bijvoorbeeld de configuraties (pg_hba.conf, postgresql.conf, pg_ident.conf) in de map /etc/postgresql. Voordat u uw PostgreSQL-database kunt afstemmen, moet u eerst de postgresql.conf-bestanden lokaliseren.

Maar wat zijn de juiste instellingen om te gebruiken? en waar zijn de waarden in eerste instantie op ingesteld? Het gebruik van externe tools zoals PGTune (en alternatieve tools zoals ClusterControl) zal je helpen dit specifieke probleem op te lossen.

Wat is PGTune?

PGTune is een configuratiewizard die oorspronkelijk is gemaakt door Greg Smith van 2ndQuadrant. Het is gebaseerd op een Python-script dat helaas niet langer wordt ondersteund. (Het ondersteunt geen nieuwere versies van PostgreSQL.) Het is toen overgegaan naar pgtune.leopard.in.ua (dat is gebaseerd op de originele PGTune) en is nu een configuratiewizard die u kunt gebruiken voor uw PG-databaseconfiguratie-instellingen.

PGTune wordt gebruikt om configuratieparameters voor PostgreSQL te berekenen op basis van de maximale prestaties voor een bepaalde hardwareconfiguratie. Het is echter geen wondermiddel, omdat veel instellingen niet alleen afhankelijk zijn van de hardwareconfiguratie, maar ook van de grootte van de database, het aantal clients en de complexiteit van query's.

Pgtune gebruiken

De oude versie van PGTune was gebaseerd op python-script dat je kunt aanroepen via shell-opdracht (met 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

Maar de nieuwe is veel eenvoudiger en handiger omdat je er gewoon toegang toe hebt via de browser. Ga gewoon naar https://pgtune.leopard.in.ua/. Een goed voorbeeld is zoals hieronder:

Het enige wat u hoeft te doen is de volgende velden hieronder op te geven:

  • DB-versie - de versie van uw PostgreSQL. Het ondersteunt versies van PostgreSQL van 9.2, 9.3, 9.4, 9.5, 9.6, 10, 11 en 12.
  • OS-type - het type besturingssysteem (Linux, OS X, Windows)
  • DB-type - het databasetype dat voornamelijk is wat voor soort transactieverwerking uw database zal verwerken (webtoepassing, OLTP, datawarehousing, desktoptoepassing, gemengde type toepassingen)
  • Totaal geheugen (RAM) - Het totale geheugen dat uw PG-instantie zal verwerken. Moet het specificeren in GiB.
  • Aantal CPU's - Aantal CPU's dat PostgreSQL CPU's kan gebruiken =threads per core * cores per socket * sockets
  • Aantal verbindingen - Maximaal aantal PostgreSQL-clientverbindingen
  • Gegevensopslag - Type gegevensopslagapparaat waaruit u kunt kiezen SSD, HDD of SAN-gebaseerde opslag.

Klik vervolgens op de knop Genereren. Als alternatief kunt u ook de ALTER SYSTEM-instructie uitvoeren die postgresql.auto.conf genereert, maar het duurt niet voordat u een PostgreSQL-herstart hebt uitgevoerd.

Hoe stelt het de waarden in

Het algoritme voor deze tool is in principe hier te vinden in configuration.js. Het deelt hetzelfde algoritme van de oude PGTune, te beginnen hier pgtune#L477. Versies van PostgreSQL <9.5 ondersteunen bijvoorbeeld checkpoint_segments, maar PG>=9.5 gebruikt de min_wal_size en max_wal_size.

Het instellen van checkpoint_segments of min_wal_size/max_wal_size hangt af van het type PostgreSQL-versie en het DB-type van de databasetoepassingstransactie. Zie hoe in het onderstaande fragment:

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

    }

  ]

}

Om het kort uit te leggen:het detecteert of dbVersion <9.5 is en bepaalt vervolgens de voorgestelde waarden voor variabelen checkpoint_segments of min_wal_size/max_wal_size op basis van het type dbType-waarde dat is ingesteld tijdens het web-UI-formulier.

Kortom, u kunt meer te weten komen over het algoritme over hoe het beslist om de waarden voor te stellen door naar dit script configuration.js te kijken.

PostgreSQL-configuratie afstemmen met ClusterControl

Als je ClusterControl gebruikt om een ​​cluster te maken, bouwen of importeren, voert het automatisch een eerste afstemming uit op basis van de opgegeven hardwarespecificaties. Als u bijvoorbeeld een cluster maakt met de volgende functiespecificaties hieronder,

{

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

}

Biedt me de volgende afstemming zoals hieronder weergegeven:

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

Bovendien verbetert het ook uw systeem- of kernelparameters zoals,

192.168.30.50:5432: Tuning OS parameters.

192.168.30.50:5432: Setting vm.swappiness = 1.

Conclusie

De afstemmingsparameters van ClusterControl zijn ook gebaseerd op het algoritme dat wordt gedeeld in pgtune#L477. Het is niet luxueus, maar je kunt het veranderen in elke gewenste waarde. Met deze instellingswaarden kunt u een ruwe start hebben die klaar genoeg is om een ​​productiebelasting aan te kunnen op basis van de aanvankelijk gegeven waarden.


  1. Een overzicht van gegenereerde kolommen voor PostgreSQL

  2. T-SQL dinsdag #64:één trigger of veel?

  3. Oracle Database Developer Choice Awards

  4. Varchar(MAX) versus TEXT gebruiken op SQL Server