sql >> データベース >  >> RDS >> PostgreSQL

PGTuneの代替-ClusterControlPostgreSQL構成

    PostgreSQLを初めて使用する場合、直面する最も一般的な課題は、データベース環境を調整する方法です。

    PostgreSQLをインストールすると、基本的なpostgresql.confファイルが自動的に生成されます。この構成ファイルは通常、使用しているオペレーティングシステムに応じて、データディレクトリ内に保持されます。たとえば、Ubuntuでは、PostgreSQLは構成(pg_hba.conf、postgresql.conf、pg_ident.conf)を/ etc/postgresqlディレクトリ内に配置します。 PostgreSQLデータベースを調整する前に、まずpostgresql.confファイルを見つける必要があります。

    しかし、使用する適切な設定は何ですか?そして、最初に設定された値は何ですか? PGTuneなどの外部ツール(およびClusterControlなどの代替ツール)を使用すると、この特定の問題を解決するのに役立ちます。

    PGTuneとは何ですか?

    PGTuneは、2ndQuadrantのGregSmithによって最初に作成された構成ウィザードです。これは、残念ながらサポートされなくなったPythonスクリプトに基づいています。 (新しいバージョンのPostgreSQLはサポートされていません。)その後、pgtune.leopard.in.ua(元のPGTuneに基づく)に移行し、PGデータベースの構成設定に使用できる構成ウィザードになりました。

    >

    PGTuneは、特定のハードウェア構成の最大パフォーマンスに基づいてPostgreSQLの構成パラメーターを計算するために使用されます。ただし、多くの設定はハードウェア構成だけでなく、データベースのサイズ、クライアントの数、およびクエリの複雑さにも依存するため、これは特効薬ではありません。

    PGTuneの使用方法

    古いバージョンのPGTuneは、シェルコマンド(Ubuntuを使用)から呼び出すことができるPythonスクリプトに基づいていました:

    [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のバージョン。 9.2、9.3、9.4、9.5、9.6、10、11、および12のバージョンのPostgreSQLをサポートします。
    • OSタイプ -OSの種類(Linux、OS X、Windows)
    • DBタイプ -主にデータベースが処理するトランザクション処理の種類であるデータベースタイプ(Webアプリケーション、OLTP、データウェアハウス、デスクトップアプリケーション、混合タイプのアプリケーション)
    • トータルメモリ(RAM) -PGインスタンスが処理する合計メモリ。 GiBで指定する必要があります。
    • CPUの数 -PostgreSQLが使用できるCPUの数CPU=コアあたりのスレッド数*ソケットあたりのコア数*ソケット
    • 接続数 -PostgreSQLクライアント接続の最大数
    • データストレージ -SSD、HDD、またはSANベースのストレージから選択できるデータストレージデバイスのタイプ。

    次に、[生成]ボタンを押します。または、postgresql.auto.confを生成するALTER SYSTEMステートメントを実行することもできますが、PostgreSQLを再起動するまで実行されません。

    値の設定方法

    このツールのアルゴリズムは、基本的にここconfiguration.jsにあります。ここでpgtune#L477から始まる古いPGTuneと同じアルゴリズムを共有します。たとえば、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かどうかを検出し、WebUIフォームで設定されたdbType値のタイプに基づいて変数checkpoint_segmentsまたはmin_wal_size/max_wal_sizeの推奨値を決定します。

    >

    基本的に、このスクリプトconfiguration.jsを見ると、アルゴリズムが値を提案する方法を決定する方法について詳しく知ることができます。

    ClusterControlを使用したPostgreSQL構成の調整

    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. このPL/SQLの何が問題になっていますか?バインド変数*は宣言されていません

    2. ランダムタプルを取得するためのTablesampleおよびその他の方法

    3. MySQLクエリをCSVに変換するPHPコード

    4. 自動車教習所の予約システムのデータベースモデル。パート2