2016年8月10日水曜日

みんなのPython勉強会#15 に参加しました

みんなのPython勉強会#15に参加しました。

Pythonを書いたのは昨日が初めてですが。。。いろいろ教わりたい立場でありながら、お役に立てることもあろうと思って、のっけからLTなんかもさせていただきました。


自分なりの今のワクワクした気持ち、疑問、Pythonという言語にもっているイメージ、そして期待をふわっと詰め込んだ感じです。PostgreSQL愛とPythonへの期待が少しでも伝わると嬉しいです。笑

■参加してみて

率直に言ってとても楽しかったです。

運営のみなさま、会場提供やビアバッシュを開催してくださったであろうクリーク・アンド・リバー様、リーディング・エッジ様ありがとうございました!!

これからは、PostgreSQLの能力をちゃんと活かせる(試せる)よう、自分でコード書いたりしたいなーと思っていて、そのために知人のススメもあり選んだのが自分の場合Pythonでした。今日のセッションでも述べられていた「意思をもってPythonを選んだ大人」です。まさに。笑
今日LTでお話させていただいたように、PostgreSQLとPythonはとても相性がよい、これからのデータ分析とかの用途で絶対活きてくる組合せだと思っています。
会社も近所なので是非また参加させていただきたいと思いました。


2016年8月8日月曜日

sysbench 0.5 で PostgreSQL 9.5 のベンチマーク!
環境構築編

sysbenchはCPU、メモリ、ディスクなどに負荷をかけてベンチマークをとれるツールで、標準ではMySQLに対応したOLTP系の負荷掛けにも対応しています。

■本投稿の目的

最新(2016年8月8日現在)のsysbench 0.5 では、ネットに出回ってる情報と一部異なる手順であったのと、PostgreSQLで使用するにはマニュアルが無いなど、ちょっとしたつまづきがあったのでメモしておきます。

■環境

何度か本ブログで触れているCentOS 7.2環境、rpmでインストールしたPostgreSQL 9.5を使用します。

PostgreSQLインストール先(バイナリ配置先) /usr/pgsql-9.5/bin
PostgreSQL実行ユーザのホーム /var/lib/pgsql
PostgreSQLのデータディレクトリ($PGDATA) /var/lib/pgsql/9.5/data

PostgreSQLを起動しておきます。
# systemctl start postgresql-9.5.service

■sysbenchの入手


入手
https://github.com/akopytov/sysbench

rootユーザで適当なディレクトリに配置、解凍しておきました。
# cd /tmp
# unzip sysbench-0.5.zip

■sysbenchのインストール

sysbenchのマニュアルにはMySQL対応についてしか書かれていないため、この手順で少々試行錯誤しました。
# cd sysbench-0.5/
# ./autogen.sh
# ./configure --prefix=/usr/sysbench \
> --without-mysql \
> --with-pgsql=/usr/pgsql-9.5 \
> --with-pgsql-includes=/usr/pgsql-9.5/include \
> --with-pgsql-libs=/usr/pgsql-9.5/lib
# make

成功すると、以下の状態になっていることを確認
  • /tmp/sysbench-0.5/sysbench配下に、sysbenchコマンドが作成される。
  • /tmp/sysbench-0.5/sysbench/drivers/pgsql 配下に、ドライバモジュールが作成される。
# ls /tmp/sysbench-0.5/sysbench/drivers/pgsql
Makefile Makefile.am Makefile.in drv_pgsql.c libsbpgsql.a libsbpgsql_a-drv_pgsql.o

なお、実行ユーザでPATHを通しておくと便利なので、今回はpostgresユーザで環境変数を設定しておきます。
# su - postgres
$ vi .bash_profile
-----
export PATH=/tmp/sysbench-0.5/sysbench:.:$PATH
-----
$ source .bash_profile

■実行前のPostgreSQL側の作業

sysbenchでは、デフォルトでlocalhost、sbtestデータベース、sbtestユーザ、5432ポートでPostgreSQLにアクセスします。そのつもりでPostgreSQL側の環境を準備します。
$ psql
postgres=# CREATE ROLE sbuser login password 'sbpass';
CREATE ROLE
postgres=# CREATE DATABASE sbdb OWNER sbuser;
CREATE DATABASE 
postgres=# \q
今回はいろいろ試すべく、データベース名、ユーザ名、パスワードそれぞれ変えておきました。

■sysbenchの実行

oltpベンチマークの実行では、sysbenc 0.4までと違って、testモードを以下のように指定します。
sysbench/tests/db/ディレクトリを見ると、ベンチマークのパターンごとにluaファイルが用意されているので、これを指定しています。

まずは、prepareでテーブル等の準備をします。
$ sysbench --test=/tmp/sysbench-0.5/sysbench/tests/db/oltp.lua \
> --db-driver=pgsql \
> --pgsql-user=sbuser --pgsql-password=sbpass --pgsql-db=sbdb \
> prepare
sysbench 0.5: multi-threaded system evaluation benchmark
Creating table 'sbtest1'...
Inserting 10000 records into 'sbtest1'

つづいてベンチマークの取得です。
$ sysbench --test=/tmp/sysbench-0.5/sysbench/tests/db/oltp.lua \
> --db-driver=pgsql \
> --pgsql-user=sbuser --pgsql-password=sbpass --pgsql-db=sbdb \
> run
sysbench 0.5:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1
Random number generator seed is 0 and will be ignored


Initializing worker threads...

Threads started!

OLTP test statistics:
    queries performed:
        read:                            140000
        write:                           40000
        other:                           20000
        total:                           200000
    transactions:                        10000  (96.53 per sec.)
    read/write requests:                 180000 (1737.48 per sec.)
    other operations:                    20000  (193.05 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          103.5983s
    total number of events:              10000
    total time taken by event execution: 103.5635s
    response time:
         min:                                  4.04ms
         avg:                                 10.36ms
         max:                                 23.20ms
         approx.  95 percentile:              10.97ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   103.5635/0.00

実行時のオプションでは、OLTPの並列度や実行回数などを調整可能です。 その辺の実行方法や、結果の見方は別の機会に。

PostgreSQL11のJITコンパイリングを試す

llvm-postgres 開発中のPostgreSQL11でJIT(Just In Time=実行時)コンパイリングを行い、クエリ性能の高速化を期待する新機能が登場した。 本記事では 構築方法を確認したので紹介。JITコンパイ...