PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Алтернативи на PGTune - ClusterControl PostgreSQL конфигурация

Ако сте нов в PostgreSQL, най-често срещаното предизвикателство, пред което се сблъсквате, е как да настроите средата на вашата база данни.

Когато PostgreSQL е инсталиран, той автоматично създава основен файл postgresql.conf. Този конфигурационен файл обикновено се съхранява в директорията с данни в зависимост от операционната система, която използвате. Например, в Ubuntu PostgreSQL поставя конфигурациите (pg_hba.conf, postgresql.conf, pg_ident.conf) в директорията /etc/postgresql. Преди да можете да настроите вашата PostgreSQL база данни, първо трябва да намерите файловете postgresql.conf.

Но какви са правилните настройки за използване? и какви са първоначално зададените стойности? Използването на външни инструменти като PGTune (и алтернативни инструменти като ClusterControl) ще ви помогне да разрешите този конкретен проблем.

Какво е PGTune?

PGTune е съветник за конфигурация, който първоначално е създаден от Грег Смит от 2ndQuadrant. Той е базиран на скрипт на Python, който, за съжаление, вече не се поддържа. (Той не поддържа по-нови версии на PostgreSQL.) След това премина в pgtune.leopard.in.ua (който се базира на оригиналния PGTune) и сега е съветник за конфигурация, който можете да използвате за настройките за конфигурация на вашата база данни PG.

PGTune се използва за изчисляване на конфигурационните параметри за PostgreSQL въз основа на максималната производителност за дадена хардуерна конфигурация. Това обаче не е сребърен куршум, тъй като много настройки зависят не само от хардуерната конфигурация, но и от размера на базата данни, броя на клиентите и сложността на заявките.

Как да използвате PGTune

Старата версия на PGTune беше базирана на скрипт на python, който можете да извикате чрез команда на shell (с помощта на 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

Но новият е много по-лесен и по-удобен, тъй като можете просто да получите достъп чрез браузър. Просто отидете на https://pgtune.leopard.in.ua/. Добър пример е като по-долу:

Всичко, което трябва да направите, е да посочите следните полета по-долу:

  • Версия на DB - версията на вашия PostgreSQL. Той поддържа версии на PostgreSQL от 9.2, 9.3, 9.4, 9.5, 9.6, 10, 11 и 12.
  • Тип ОС - вида на ОС (Linux, OS X, Windows)
  • Тип DB - типът на базата данни, който е основно какъв вид обработка на транзакциите ще обработва вашата база данни (уеб приложение, OLTP, съхранение на данни, настолно приложение, смесен тип приложения)
  • Обща памет (RAM) - Общата памет, която вашият PG екземпляр ще обработва. Трябва да го посочите в GiB.
  • Брой процесори - Брой процесори, които PostgreSQL може да използва CPU =нишки на ядро ​​* ядра на сокет * гнезда
  • Брой връзки - Максимален брой клиентски връзки на PostgreSQL
  • Съхранение на данни - Тип устройство за съхранение на данни, което можете да избирате между SSD, HDD или SAN базирано хранилище.

След това натиснете бутона Генериране. Като алтернатива можете също да изпълните оператор ALTER SYSTEM, който генерира postgresql.auto.conf, но няма да отнеме, докато не натиснете рестарт на PostgreSQL.

Как задава стойностите

Алгоритъмът за този инструмент може да бъде намерен основно тук в configuration.js. Той споделя същия алгоритъм от стария PGTune, започвайки от тук pgtune#L477. Например, версиите на PostgreSQL <9.5 поддържат checkpoint_segments, но PG>=9.5 използва min_wal_size и max_wal_size.

Задаването на checkpoint_segments или min_wal_size/max_wal_size зависи от това какъв тип версия на PostgreSQL и типа DB на транзакцията на приложението на базата данни. Вижте как във фрагмента по-долу:

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

    }

  ]

}

Само да обясня накратко, той открива дали dbVersion <9.5, след което определя предложените стойности за променливи checkpoint_segments или min_wal_size/max_wal_size въз основа на типа стойност на dbType, зададена по време на формуляра за уеб потребителски интерфейс.

По принцип можете да научите повече за алгоритъма за това как той решава да предложи стойностите, като разгледате този скрипт configuration.js.

Настройка на PostgreSQL конфигурация с ClusterControl

Ако използвате ClusterControl за създаване, изграждане или импортиране на клъстер, той автоматично извършва първоначална настройка въз основа на дадените хардуерни спецификации. Например, създаване на клъстер със следните спецификации за работа по-долу,

{

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

}

Предоставя ми следната настройка, както е показано по-долу:

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

Освен това, той също така настройва вашата система или параметри на ядрото, като например,

192.168.30.50:5432: Tuning OS parameters.

192.168.30.50:5432: Setting vm.swappiness = 1.

Заключение

Параметрите за настройка на ClusterControl също се основават на алгоритъма, споделен в pgtune#L477. Не е изискано, но можете да го промените на каквито стойности искате. С тези стойности на настройките ви позволява да имате необработен старт, който е достатъчно готов, за да се справи с производствено натоварване въз основа на първоначалните зададени стойности.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пропускане на двойните кавички за извършване на заявка в PostgreSQL

  2. Как да вмъкнете в масив в PostgreSQL

  3. Преглед на инструментите за планиране на работа за PostgreSQL

  4. Деклариране на структурата на кортежа на запис в PL/pgSQL

  5. Конкатениране/сливане на стойности на масива по време на групиране/агрегиране