PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PGTune Alternatives - ClusterControl PostgreSQL Configuration

Nếu bạn chưa quen với PostgreSQL, thách thức phổ biến nhất mà bạn phải đối mặt là làm thế nào để điều chỉnh môi trường cơ sở dữ liệu của bạn.

Khi PostgreSQL được cài đặt, nó sẽ tự động tạo ra một tệp postgresql.conf cơ bản. Tệp cấu hình này thường được giữ bên trong thư mục dữ liệu tùy thuộc vào hệ điều hành bạn đang sử dụng. Ví dụ, trong Ubuntu PostgreSQL đặt các cấu hình (pg_hba.conf, postgresql.conf, pg_ident.conf) bên trong thư mục / etc / postgresql. Trước khi bạn có thể điều chỉnh cơ sở dữ liệu PostgreSQL của mình, trước tiên bạn phải xác định vị trí các tệp postgresql.conf.

Nhưng cài đặt phù hợp để sử dụng là gì? và các giá trị được đặt ban đầu là gì? Sử dụng các công cụ bên ngoài như PGTune (và các công cụ thay thế như ClusterControl) sẽ giúp bạn giải quyết vấn đề cụ thể này.

PGTune là gì?

PGTune là một trình hướng dẫn cấu hình ban đầu được tạo ra bởi Greg Smith từ 2ndQuadrant. Nó dựa trên một tập lệnh Python, thật không may, không còn được hỗ trợ nữa. (Nó không hỗ trợ các phiên bản PostgreSQL mới hơn.) Sau đó, nó được chuyển đổi thành pgtune.leopard.in.ua (dựa trên PGTune gốc) và hiện là một trình hướng dẫn cấu hình mà bạn có thể sử dụng cho cài đặt cấu hình cơ sở dữ liệu PG của mình.

PGTune được sử dụng để tính toán các thông số cấu hình cho PostgreSQL dựa trên hiệu suất tối đa cho một cấu hình phần cứng nhất định. Tuy nhiên, nó không phải là một viên đạn bạc, vì nhiều cài đặt không chỉ phụ thuộc vào cấu hình phần cứng mà còn phụ thuộc vào kích thước của cơ sở dữ liệu, số lượng khách hàng và độ phức tạp của các truy vấn.

Cách sử dụng PGTune

Phiên bản cũ của PGTune dựa trên tập lệnh python mà bạn có thể gọi thông qua lệnh shell (sử dụng 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

Nhưng cái mới dễ dàng hơn và thuận tiện hơn nhiều vì bạn chỉ có thể truy cập thông qua trình duyệt. Chỉ cần truy cập https://pgtune.leopard.in.ua/. Một ví dụ điển hình như sau:

Tất cả những gì bạn cần làm là chỉ định các trường sau:

  • Phiên bản DB - phiên bản PostgreSQL của bạn. Nó hỗ trợ các phiên bản PostgreSQL từ 9.2, 9.3, 9.4, 9.5, 9.6, 10, 11 và 12.
  • Loại hệ điều hành - loại hệ điều hành (Linux, OS X, Windows)
  • Loại DB - loại cơ sở dữ liệu chủ yếu là loại xử lý giao dịch mà cơ sở dữ liệu của bạn sẽ xử lý (Ứng dụng web, OLTP, Kho dữ liệu, Ứng dụng trên máy tính để bàn, Loại ứng dụng hỗn hợp)
  • Tổng bộ nhớ (RAM) - Tổng bộ nhớ mà phiên bản PG của bạn sẽ xử lý. Cần chỉ định nó trong GiB.
  • Số lượng CPU - Số lượng CPU mà PostgreSQL có thể sử dụng CPU =luồng trên mỗi lõi * lõi trên mỗi ổ cắm * ổ cắm
  • Số lượng kết nối - Số lượng kết nối máy khách PostgreSQL tối đa
  • Lưu trữ dữ liệu - Loại thiết bị lưu trữ dữ liệu mà bạn có thể chọn từ bộ lưu trữ dựa trên SSD, HDD hoặc SAN.

Sau đó nhấn nút Tạo. Ngoài ra, bạn cũng có thể chạy câu lệnh ALTER SYSTEM tạo ra postgresql.auto.conf, nhưng sẽ không mất thời gian cho đến khi bạn khởi động lại PostgreSQL.

Nó đặt giá trị như thế nào

Về cơ bản, bạn có thể tìm thấy thuật toán cho công cụ này tại đây trong configuration.js. Nó chia sẻ cùng một thuật toán từ PGTune cũ bắt đầu từ đây pgtune # L477. Ví dụ:các phiên bản của PostgreSQL <9.5 hỗ trợ checkpoint_segment, nhưng PG> =9.5 sử dụng min_wal_size và max_wal_size.

Đặt điểm kiểm tra hoặc min_wal_size / max_wal_size phụ thuộc vào loại phiên bản PostgreSQL và loại giao dịch ứng dụng cơ sở dữ liệu DB. Xem cách thực hiện trong đoạn mã dưới đây:

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

    }

  ]

}

Chỉ để giải thích ngắn gọn, nó phát hiện nếu dbVersion <9.5, sau đó nó xác định các giá trị được đề xuất cho các biến checkpoint_segment hoặc min_wal_size / max_wal_size dựa trên loại giá trị dbType được đặt trong biểu mẫu giao diện người dùng web.

Về cơ bản, bạn có thể tìm hiểu thêm về thuật toán về cách nó quyết định đề xuất các giá trị bằng cách xem script config.js này.

Điều chỉnh Cấu hình PostgreSQL với ClusterControl

Nếu bạn đang sử dụng ClusterControl để tạo, xây dựng hoặc nhập một cụm, nó sẽ tự động thực hiện điều chỉnh ban đầu dựa trên các thông số kỹ thuật phần cứng đã cho. Ví dụ:tạo một cụm với các thông số công việc sau đây,

{

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

}

Cung cấp cho tôi điều chỉnh sau như hình dưới đây:

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

Ngoài ra, nó cũng điều chỉnh các thông số hệ thống hoặc hạt nhân của bạn, chẳng hạn như

192.168.30.50:5432: Tuning OS parameters.

192.168.30.50:5432: Setting vm.swappiness = 1.

Kết luận

Các tham số điều chỉnh ClusterControl cũng dựa trên thuật toán được chia sẻ trong pgtune # L477. Nó không lạ mắt, nhưng bạn có thể thay đổi nó thành bất kỳ giá trị nào bạn muốn. Với các giá trị cài đặt này, nó cho phép bạn có một khởi đầu thô đủ sẵn sàng để xử lý tải sản xuất dựa trên các giá trị đã cho ban đầu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham gia SQL cột bí danh

  2. Làm cách nào để tạo tiện ích mở rộng postgres bên trong vùng chứa?

  3. Cách kích hoạt SSL trong PostgreSQL

  4. Nhiều CTE trong một truy vấn

  5. Cách Tầng () hoạt động trong PostgreSQL