●Postgresql 10のインストール
参考URL:PostgreSQL 10 : インストール
postgresqlバージョン10をインストールします。
なお、どのバージョンがインストール可能か確認したい場合は、下記のように実行します。
認証方式の詳細は公式ドキュメントを参照ください。
ローカルホストでをpostgresqlのリッスン状態を確認します。
●データベース活動状況の監視
参考URL:第28章 データベース活動状況の監視
psコマンドを利用した確認方法
プロセスをブロックしている場合、pg_locksシステムビューを確認することで、どのプロセスがどのプロセスをブロックしているのか判別できます。
統計情報収集のための設定は、postgresql.conf内で設定される設定パラメータによって制御されます。
track_activitiesパラメータにより、すべてのサーバプロセスで現在実行されているコマンドを監視することができます。
track_countsパラメータは、テーブルおよびインデックスアクセスに関する統計情報を収集するかどうか制御します。
track_functionsパラメータは、ユーザ定義関数の使用状況を追跡するかどうかを指定できます。
track_io_timingパラメータは、ブロック読み取りおよび書き込み回数の監視するかどうかを指定できます。
システムの現在の状態を表示(統計情報の表示)するために、いくつかの定義済みのビューが存在します。
動的統計情報ビュー
収集済み統計情報ビュー
参考URL:PostgreSQL 10 : インストール
postgresqlバージョン10をインストールします。
なお、どのバージョンがインストール可能か確認したい場合は、下記のように実行します。
# dnf module list postgresql milter-manager_repos 399 B/s | 833 B 00:02 milter-manager_repos-source 445 B/s | 833 B 00:01 CentOS Stream 8 - AppStream Name Stream Profiles Summary postgresql 9.6 client, server [d] PostgreSQL server and client module postgresql 10 [d] client, server [d] PostgreSQL server and client module postgresql 12 client, server [d] PostgreSQL server and client module postgresql 13 client, server [d] PostgreSQL server and client module ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalledでは、インストールします。
# dnf module -y install postgresql:10 # postgresql-setup --initdb * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log # systemctl enable --now postgresqlデフォルト設定では、ローカルホストからのみ接続可能で、かつ、ローカル接続は [peer] 認証のみとなっています。
認証方式の詳細は公式ドキュメントを参照ください。
ローカルホストでをpostgresqlのリッスン状態を確認します。
# grep listen_addresses /var/lib/pgsql/data/postgresql.conf #listen_addresses = 'localhost' # what IP address(es) to listen on;認証方式を確認します。
# grep -v -E "^#|^$" /var/lib/pgsql/data/pg_hba.conf local all all peer host all all 127.0.0.1/32 ident host all all ::1/128 ident local replication all peer host replication all 127.0.0.1/32 ident host replication all ::1/128 identpeer認証の場合、任意の PostgreSQLユーザを追加して利用するには、同名のOSユーザも必要になります。
OSユーザの追加 # useradd redmine PostgreSQL管理ユーザで、PostgreSQLユーザとデータベースの追加 # su - postgres $ createuser redmine $ createdb testdb -O redmine 確認 $ psql -c "select usename from pg_user;" usename ---------- postgres redmine (2 行) $ psql -l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限 -----------+----------+------------------+-------------+-------------------+----------------------- postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres testdb | redmine | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | (4 行) postgresユーザから抜けます。 $ exit新規追加したユーザ(redmine)で PostgreSQLを利用する場合の基本操作を記載します。
# su - redmine テストDBに接続 $ psql testdb psql (10.19) "help" でヘルプを表示します。 ユーザロール一覧を表示 testdb=# \du ロール一覧 ロール名 | 属性 | 所属グループ ----------+------------------------------------------------------------------------------+-------------- postgres | スーパーユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {} redmine | | {} データベース一覧を表示 testdb=# \l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限 -----------+----------+------------------+-------------+-------------------+----------------------- postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres testdb | redmine | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | (4 行) テストテーブルを作成 testdb=# create table test_table (no int, name text); CREATE TABLE テーブル一覧を表示 testdb=# \dt リレーション一覧 スキーマ | 名前 | 型 | 所有者 ----------+------------+----------+--------- public | test_table | テーブル | redmine (1 行) テストテーブルにテストデータを挿入 testdb=> insert into test_table (no,name) values (01,'Rocky'); INSERT 0 1 確認 testdb=> select * from test_table; no | name ----+------- 1 | Rocky (1 行) テストテーブルを削除 testdb=> drop table test_table; DROP TABLE testdb=> \dt リレーションが見つかりませんでした。 exit する testdb=> \q テストデータベースを削除 $ dropdb testdb $ psql -l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限 -----------+----------+------------------+-------------+-------------------+----------------------- postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (3 行)
●データベース活動状況の監視
参考URL:第28章 データベース活動状況の監視
psコマンドを利用した確認方法
$ ps aux | grep ^postgres postgres 1498 0.0 0.1 244760 12440 ? Ss 7月22 1:52 /usr/bin/postmaster -D /var/lib/pgsql/data postgres 1641 0.0 0.0 99676 2132 ? Ss 7月22 0:00 postgres: logger process postgres 1802 0.0 0.0 244872 3816 ? Ss 7月22 0:00 postgres: checkpointer process postgres 1803 0.0 0.0 244760 2164 ? Ss 7月22 0:03 postgres: writer process postgres 1804 0.0 0.0 244760 2932 ? Ss 7月22 0:03 postgres: wal writer process postgres 1805 0.0 0.0 245316 5256 ? Ss 7月22 0:08 postgres: autovacuum launcher process postgres 1806 0.0 0.0 99972 2368 ? Ss 7月22 1:03 postgres: stats collector process postgres 1807 0.0 0.0 245044 2928 ? Ss 7月22 0:00 postgres: bgworker: logical replication launcher postgres 1265760 0.0 0.2 247832 17424 ? Ss 09:30 0:00 postgres: redmine redmine 127.0.0.1(57582) idle活動状況は、idle(つまり、クライアントからのコマンド待ち状態)、idle in transaction(BEGINブロックの内側でのクライアントの待ち状態)、または、SELECTのようなコマンド種類名のいずれかとなります。また、そのサーバプロセスが他のセッションによって保持されたロックを待っている状態の場合は、waitingが追加されます。
プロセスをブロックしている場合、pg_locksシステムビューを確認することで、どのプロセスがどのプロセスをブロックしているのか判別できます。
統計情報収集のための設定は、postgresql.conf内で設定される設定パラメータによって制御されます。
track_activitiesパラメータにより、すべてのサーバプロセスで現在実行されているコマンドを監視することができます。
track_countsパラメータは、テーブルおよびインデックスアクセスに関する統計情報を収集するかどうか制御します。
track_functionsパラメータは、ユーザ定義関数の使用状況を追跡するかどうかを指定できます。
track_io_timingパラメータは、ブロック読み取りおよび書き込み回数の監視するかどうかを指定できます。
システムの現在の状態を表示(統計情報の表示)するために、いくつかの定義済みのビューが存在します。
ビュー名 | 説明 |
---|---|
pg_stat_activity | サーバ当たり1行の形式で、状態や現在の問い合わせ等のプロセスの現在の活動状況に関連した情報を表示します。 詳細についてはpg_stat_activityを参照してください。 |
pg_stat_replication | AL送信プロセス毎に1行の形式で、送信サーバが接続したスタンバイサーバへのレプリケーションに関する統計情報を表示します。 詳細についてはpg_stat_replicationを参照して下さい。 |
pg_stat_wal_receiver | 1行の形式で、受信サーバが接続したサーバからWALレシーバに関する統計情報を表示します。 詳細についてはpg_stat_wal_receiverを参照してください。 |
pg_stat_subscription | 1つのサブスクリプションにつき少なくとも1行の形式で、サブスクリプションワーカに関する情報を表示します。 詳細についてはpg_stat_subscriptionを参照してください。 |
pg_stat_ssl | 接続(通常およびレプリケーション)あたり1行の形式で、接続に使われるSSLの情報を表示します。 詳しくはpg_stat_sslを参照して下さい。 |
pg_stat_progress_vacuum | VACUUMを実行している(自動バキュームワーカプロセスを含んだ)それぞれのバックエンドごとに1行の形で、現在の進捗を示します。 28.4.1を参照してください。 |
ビュー名 | 説明 |
---|---|
pg_stat_archiver | WALアーカイバプロセスの活動状況に関する統計情報を1行のみで表示します 詳細については pg_stat_archiverを参照してください。 |
pg_stat_bgwriter | バックグラウンドライタプロセスの活動状況に関する統計情報を1行のみで表示します。 詳細についてはpg_stat_bgwriterを参照してください。 |
pg_stat_database | データベース当たり1行の形で、データベース全体の情報を表示します。 詳細についてはpg_stat_databaseを参照してください。 |
pg_stat_database_conflicts | データベース毎に1行の形式で、スタンバイサーバにおける復旧との競合のためにキャンセルされた問い合わせについてのデータベース全体の統計情報を表示します。 詳細についてはpg_stat_database_conflictsを参照して下さい。 |
pg_stat_all_tables | 現在のデータベースの各テーブルごとに1行の形で、特定のテーブルへのアクセスに関する統計情報を示します。 詳細についてはpg_stat_all_tablesを参照してください。 |
pg_stat_sys_tables | システムテーブルのみが表示される点を除き、pg_stat_all_tablesと同じです。 |
pg_stat_user_tables | ユーザテーブルのみが表示される点を除き、pg_stat_all_tablesと同じです。 |
pg_stat_xact_all_tables | pg_stat_all_tablesと似ていますが、現在のトランザクションにて実施された処理結果をカウントします。(数値が見える時点では、これらの数値はpg_stat_all_tablesと関連するビューに含まれていません。) このビューでは、有効行数、無効行数、およびバキュームやアナライズの活動は表示しません。 |
pg_stat_xact_sys_tables | システムテーブルのみが表示される点を除き、pg_stat_xact_all_tablesと同じです。 |
pg_stat_xact_user_tables | ユーザテーブルのみが表示される点を除き、pg_stat_xact_all_tablesと同じです。 |
pg_stat_all_indexes | 現在のデータベースのインデックスごとに1行の形で、特定のインデックスへのアクセスに関する統計情報を示します。 詳細についてはpg_stat_all_indexesを参照してください。 |
pg_stat_sys_indexes | システムテーブルのインデックスのみが表示される点を除き、pg_stat_all_indexesと同じです。 |
pg_stat_user_indexes | ユーザテーブルのインデックスのみが表示される点を除き、pg_stat_all_indexesと同じです。 |
pg_statio_all_tables | 現在のデータベース内のテーブルごとに1行の形で、特定のテーブルに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_tablesを参照してください。 |
pg_statio_sys_tables | システムテーブルのみが表示される点を除き、pg_statio_all_tablesと同じです。 |
pg_statio_user_tables | ユーザテーブルのみが表示される点を除き、pg_statio_all_tablesと同じです。 |
pg_statio_all_indexes | 現在のデータベース内のインデックスごとに1行の形で、特定のインデックスに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_indexesを示します。 |
pg_statio_sys_indexes | システムテーブルのインデックスのみが表示される点を除き、pg_statio_all_indexes と同じです。 |
pg_statio_user_indexes | ユーザテーブルのインデックスのみが表示される点を除き、pg_statio_all_indexesと同じです。 |
pg_statio_all_sequences | 現在のデータベース内のシーケンスごとに1行の形で、特定のシーケンスに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_sequencesを参照してください。 |
pg_statio_sys_sequences | システムシーケンスのみが表示される点を除き、pg_statio_all_sequencesと同じです (現時点では、システムシーケンスは定義されていませんので、このビューは常に空です)。 |
pg_statio_user_sequences | ユーザシーケンスのみが表示される点を除き、pg_statio_all_sequencesと同じです。 |
pg_stat_user_functions | 追跡された関数ごとに1行の形で、関数の実行に関する統計情報を示します。 詳細についてはpg_stat_user_functionsを参照してください。 |
pg_stat_xact_user_functions | pg_stat_user_functionsと似ていますが、現在のトランザクション中に呼び出されたものだけをカウントします。 (数値が見える時点では、これらの数値はpg_stat_user_functionsに含まれていません。) |