postgresql

CentOS6.8にPostgreSQL9.6のインストール

ひさしぶりに更新。。

いろいろあってサーバを初期化、CentOSを6.8にしてPostgreSQLを再インストール!

最新バージョンは「9.6」。技術の進歩は早い。

過去記事を参考にしたが、CentOSのバージョン違いや理解不足もあったので再び記事にしようっと。

CentOS7にPostgreSQL9.4のインストール

 

PostgreSQLをダウンロード&インストール

1.PostgreSQLをダウンロード

[xxx@localhost ~]$ wget http://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm

2. PostgreSQLをインストール

[xxx@localhost ~]$ sudo rpm -ivh pgdg-centos96-9.6-3.noarch.rpm
[xxx@localhost ~]$ sudo yum -y install postgresql96-server postgresql96-devel postgresql96-contrib

※パッケージの説明
postgresql96-server:サーバ本体
postgresql96-devel:開発用モジュール
postgresql96-contrib:contribモジュール

PostgreSQLの設定

3.データベースを初期化

[xxx@localhost ~]$ sudo su - postgres
$ /usr/pgsql-9.6/bin/initdb --no-locale --encoding=UTF8

4.データベースを起動

[xxx@localhost ~]$ sudo service postgresql-9.6 start

5.自動起動設定

システム起動時にPostgreSQLが自動で起動するようにします。

[xxx@localhost ~]$ sudo chkconfig postgresql-9.6 on

6.postgresユーザのパスワード設定

[xxx@localhost ~]$ sudo passwd postgres

7.環境変数設定

PostgreSQLのコマンドへのパスを設定します。

[xxx@localhost ~]$ sudo su
[root@localhost xxx] cd /var/lib/pgsql/
[root@localhost xxx] vi .bash_profile
※ファイルの末尾に追加
export PATH=$PATH:/usr/pgsql-9.6/bin

以上。
Encoding「UTF8」、ロケール設定なしになっています。

postgresql.confの場所とアクセス(編集)方法

postgresql.confの場所とアクセス(編集)方法について
postgreSQLのバージョンが9.4でサーバーはlinuxです。

postgresql.confの場所

デフォルトで
/var/lib/pgsql/9.4/data
配下にあります。

postgresql.confへアクセス(編集)

pgsqlフォルダ配下にアクセスするにはpostgresユーザでログインします。
その後、viコマンドで編集。

$ su - postgres
$ vi /var/lib/pgsql/9.4/data/postgresql.conf

設定変更後に反映するにはリロードもしくは再起動が必要です。
postgresql.confに「change requires restart」と記述されている設定は再起動が必要です。

リロード、再起動コマンド

$ sudo systemctl reload postgresql-9.4
$ sudo systemctl restart postgresql-9.4

pgbench使用方法

pgbenchとは

postgresqlのベンチマークツールで、postgresqlのパフォーマンスを計測できます。
postgresqlをチューニングする際に、とても役に立ちます。

使用方法

以下、コマンドラインで作業

1.postgresqlをインストール

こではバージョン9.4をインストールしました。
インストール情報はこちら
※postgresql9.4ではpgbenchが既にインストールされている状態ですので、個別でインストールする必要はありません。

2.postgresqlのスーパユーザアカウントでログイン

$ su - postgres

3.sqlを使用できるツールpsqlを起動

$ psql -U postgres

4.テスト用のデータベースを作成

ここでは「test」という名称のDBを作成しました。CREATE DATABASEと表示されればOKです。

postgres=# create database test;
CREATE DATABASE

5.psqlを¥qで終了する

$ ¥q

6.以下コマンドを実行し、ベンチマークデータを初期化する

$ pgbench -i test

実行履歴

NOTICE:  table "pgbench_history" does not exist, skipping
NOTICE:  table "pgbench_tellers" does not exist, skipping
NOTICE:  table "pgbench_accounts" does not exist, skipping
NOTICE:  table "pgbench_branches" does not exist, skipping
creating tables...
100000 of 100000 tuples (100%) done (elapsed 0.64 s, remaining 0.00 s).
vacuum...
set primary keys...
done.

んっ、失敗・・・?
もう一回同じコマンドを実行

実行履歴

creating tables...
100000 of 100000 tuples (100%) done (elapsed 0.70 s, remaining 0.00 s).
vacuum...
set primary keys...
done.

成功したぽい
ひとまず次へ進んでみよう・・・

7.以下コマンドでベンチマーク実行

pgbench -c 2 -t 100 test

実行結果

starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 2
number of threads: 1
number of transactions per client: 100
number of transactions actually processed: 200/200
latency average: 0.000 ms
tps = 187.624829 (including connections establishing)
tps = 199.760088 (excluding connections establishing)

実行できました。
初期化を2回実行しましたが、1回目の初期化で成功してたみたいでした。

コマンドの説明
「-c 2」:同時に2本の接続
「-t 100」:各接続で100本のトランザクションを実行
「test」:データベースの指定

実行結果
「number of transactions actually processed: 200/200」:2本の接続×100本のトランザクション=200回中、200回正常に実行できたことを示しています。
「tps = 187.624829 (including connections establishing)」:1秒間に実行できたトランザクション数(PostgreSQLへの接続含む)
「tps = 199.760088 (excluding connections establishing)」:1秒間に実行できたトランザクション数(PostgreSQLへの接続含まない)
※tpsは数値が高いほど性能が良いです。

pgbenchがデフォルトで実行する1トランザクションのSQLは以下です。

a.pgbench_accountsを1件更新
b.pgbench_accountsから1件検索
c.pgbench_tellersを1件更新
d.pgbench_branchesを1件更新
e.pgbench_historyに1件行を追加

以下オプションを付けることでデフォルトの実行SQLを制御できます。
「-N」
cとdを除いたSQLを実行します。
pgbench -c 2 -t 100 -N test

「-S」
更新処理を除いたSQLを実行します。
pgbench -c 2 -t 100 -S test

次回は、pgbenchで計測しながら実際にチューニングを行っていきたいと思います。

CentOS7にPostgreSQL9.4のインストール

PostgreSQLをインストールしたので、そのインストール手順と初期設定を書いておきます!

PostgreSQLをダウンロード&インストール

1.PostgreSQLをダウンロード

[xxx@localhost ~]$ wget http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm

2. PostgreSQLをインストール

[xxx@localhost ~]$ sudo rpm -ivh pgdg-centos94-9.4-1.noarch.rpm
[xxx@localhost ~]$ sudo yum -y install postgresql94-server postgresql94-devel postgresql94-contrib

PostgreSQLの設定

3.データベースを初期化

[xxx@localhost ~]$ sudo /usr/pgsql-9.4/bin/postgresql94-setup initdb
Initializing database ... OK

4.データベースを起動

[xxx@localhost ~]$ sudo systemctl start postgresql-9.4

5.自動起動設定

システム起動時にPostgreSQLが自動で起動するようにします。

[xxx@localhost ~]$ sudo systemctl enable postgresql-9.4

6.postgresユーザのパスワード設定

PostgreSQLをインストールすると、自動でpostgresユーザが作成されます。
作成直後はパスワードが設定されていないため、設定します。

[xxx@localhost ~]$ sudo passwd postgres

7.環境変数設定

PostgreSQLのコマンドへのパスを設定します。

[xxx@localhost ~]$ sudo su
[root@localhost xxx] cd /var/lib/pgsql/
[root@localhost xxx] vi .bash_profile
※ファイルの末尾に追加※
export PATH=$PATH:/usr/pgsql-9.4/bin

以上です。

と言いたいところでしたが、

データベースのEncodingが「SQL_ASCII」になっていました。
Encodingを「UTF8」にしたいと思い、この後行った手順が下記となります。

8.データベースを初期化(データベースクラスタ作成)

[root@localhost xxx] systemctl stop postgresql-9.4
[root@localhost xxx] su - postgres
-bash-4.2$ cd /var/lib/pgsql/9.4
-bash-4.2$ rm -rf data
-bash-4.2$ initdb --encoding=UTF8 --no-locale --pgdata=/var/lib/pgsql/9.4/data --auth=ident

データベースを初期化し直しました。手順3で指定すれば多分うまくいったのかもしれません。
あとロケールは設定しませんでした。
PostgreSQLでロケールを選択した場合、検索性能に問題が出るらしく、 ロケールを選択しないことが推奨とされています。

9.データベース起動&自動起動設定

[root@localhost xxx] systemctl start postgresql-9.4
[root@localhost xxx] systemctl enable postgresql-9.4

10.確認

[root@localhost xxx] su - postgres
-bash-4.2$ psql -l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     |
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres

以上、参考にしていただけたらと思います!!