web-dev-qa-db-ja.com

Postgresqlでテーブルスペースを作成するためのベストプラクティス

PostgreSQLバージョン:11.2
OS:RHELまたはOracle Linux 7.6(未定)

私は実動データベースをセットアップする設計段階にいます。本番環境では、DBのサイズは約300 GB〜400 GBになります。

これは私が考えていることです。これがPostgreSQLの本番環境への展開に適しているかどうかをお知らせください。

次のファイルシステムを次のサイズでマウントします。

/db ----> 50 GB
/pgdata ---> 500 GB

カスタムの場所/db/postgres/pg11/dataでデータベースクラスターを初期化します。
そして最初から、次のようなテーブルスペースの作成を開始します。

CREATE TABLESPACE orders_tbs LOCATION '/pgdata/<db_name>/orders_tbs';

...次のように、これらのテーブルスペースにビジネスオブジェクトを配置します。

CREATE TABLE orders (id int, order_item text) tablespace orders_tbs;

ありがとうArkhena、CL

上記の場合、データファイル(/pgdata)用に別のファイルシステムを作成し、構成ファイルとログを/dbに保存することを考えました。だから、私の考えは悪かった。

私はRHEL/Oracle Linuxを使用しているため、デフォルトでは、私の$PGDATA/var/lib/pgsql/11/dataになります。
しかし、私は$PGDATA/db/postgres/pg11/dataのようなカスタムの場所に置くことを好みます

データファイルは$PGDATA/baseディレクトリにあるので、LVMを使用して以下のようなディスクレイアウトを作成してみませんか?

$ PGDATAの最上位の親ディレクトリ/db用の5​​0GBファイルシステムと$PGDATA/baseディレクトリ用の個別の500 GBファイルシステム?

[root@localhost ~]# df -Ph
Filesystem                      Size  Used Avail Use% Mounted on
<output snipped>
.
.
/dev/mapper/VolGroup1-LogVol02  50G    23M  49.9G   1% /db
/dev/mapper/VolGroup1-LogVol04  500G  2.7M  499.9G  1% /db/postgres/pg11/data/base

ストレージのボトルネックを発生させずに上記のディスクレイアウトを最適に作成する方法について、Linux管理者に確認する必要があります。

1
Keith Brabant

PostgreSQLのテーブルスペースは、いくつかの本当に特定のニーズ(そして、その場合は500 GB未満であるとは思えません)とSQLコンプライアンスのために存在します。最終的にすべてを同じディスクに格納するためのテーブルスペースを作成する場合は、作成しないでください。 $ PGDATA内にテーブルスペースを作成する予定がある場合は、作成しないでください。

表スペースは、より複雑なリカバリー操作につながります(必要な場合)。後で自分をのろいますよ、私を信じてください。

Christophe Pettusのスライドには多くの優れたアドバイスがあります( 自分の仕事でない場合はPostgreSQL )。スライド27はテーブルスペースについてであり、なぜそれらを使用しないのかについてです。

2
Arkhena

最終的にどのソリューションを採用したかわかりませんが、$PGDATAをデフォルトの場所に置きたくない場合は この記事では カスタム$PGDATAの作成方法を見つけることができます。この記事は、Postgresql 10を搭載したCentOS 7に関するものです。

(例)/ pgdata/10/dataにデータを配置したい場合は、適切な権限でディレクトリを作成します(これを追加する必要があります:所有者と権限です。これはpostgres:postgresです。および700):

# mkdir -p /pgdata/10/data
# chown -R postgres:postgres /pgdata

次に、systemdサービスをカスタマイズします。

# systemctl edit postgresql-10.service

次のコンテンツを追加します。

[Service]
Environment=PGDATA=/pgdata/10/data

これにより、元のサービスファイルとマージされる/etc/systemd/system/postgresql-10.service.d/override.confファイルが作成されます。

その内容を確認するには:

# cat /etc/systemd/system/postgresql-10.service.d/override.conf
[Service]
Environment=PGDATA=/pgdata/10/data

Systemdをリロードします。

# systemctl daemon-reload

PostgreSQLデータディレクトリを初期化します。

# /usr/pgsql-10/bin/postgresql-10-setup initdb

サービスを開始して有効にします。

# systemctl enable postgresql-10
# systemctl start postgresql-10

postgresqlXX.serviceファイルを変更して$PGDATAの場所を変更できない、または変更できない場合は、systemctlを使用する代わりに手動でクラスターを起動できます。

cd /<location_of_your_PGDATA>
su postgres -c 'pg_ctl start -D  <location_of_your_PGDATA> -l <name_of_file_to_log_startup>'
0
EAmez