SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
2
自己紹介
● 竹内 尚也
DB(Oracle, PostgreSQL) に特化したお仕事を最近までし
ていました。今は主に PHP と MySQL で会計関連の Web
システムを作るバイトをしています。
python と PHP 要員
として来ました。
前職で DB の経験あるよね?
はい。 Oracle と PostgreSQL なら
じゃあ MySQL やって
え?
3
アジェンダ
1.はじめに
2.ポスグレ 13 の新機能を検証
1.log_statement_sample_rate
2.pgbench でパーティション
3.SQL をコピペしやすくなった
3.終わりに
4
1. はじめに
● 今は MySQL をやってるので PostgreSQL の最新情報
をしらない !!
・今の自分の知識だともう古いかもしれない…。
・ MySQL との比較的なので発表できないかネタ探し。
・気がついたら MySQL オンリー資料になってた。
・今更新しい検証をする時間がない。
13 のお手軽な新機能検証なら
すぐにできて、ネタ的にもよくね !?
5
2. ポスグレ 13 の新機能を検証
● とりあえず気になったのを触れてみた。
 まだ β 版もないので、 Git からソースをビルドしました。
今回検証したのは次の 3 つです。
● log_statement_sample_rate
●
pgbench でパーティション
●
SQL をコピペしやすくなった
6
2-1.log_statement_sample_rate
● スロークエリのログ出力を抑制
 今までは…
スロークエリが多すぎると、ログ肥大化 & 可読性の低下に繋がる。
 13 からは…
このパラメータでスロークエリの出力量を抑制できる!
※ 実は 12beta 版でも実装され、正式版で廃止されたのが 13 で蘇った。
7
2-1.log_statement_sample_rate
● 関連するパラメータ
log_min_duration_statement
昔からあるパラメータ。指定した時間以上かかった SQL を記録する。
log_min_duration_sample
追加されたパラメータ。指定した時間以上かかった SQL を記録する。
出力量は「 log_statement_sample_rate 」によって抑制される。
「 log_min_duration_statement 」より優先度は低い。
log_statement_sample_rate
追加されたパラメータ。
「 log_statement_sample_rate 」の出力ログ量を割合で抑制する。
1.0 は全てを記録、 0 の場合何も記録しない。
log_min_duration_statement より
高い値にした場合、無視される。
8
2-1.log_statement_sample_rate
● 検証 ~意図的にスロークエリを実行~
パラメータの設定
・ log_min_duration_statement = -1 ( 無効化 )
・ log_min_duration_sample = 500ms
・ log_statement_sample_rate = < 色々変えて試す >
実行する SQL
SELECT pg_sleep(1) AS label01;
SELECT pg_sleep(1) AS label02;
SELECT pg_sleep(1) AS label03;
SELECT pg_sleep(1) AS label04;
SELECT pg_sleep(1) AS label05;
SELECT pg_sleep(1) AS label06;
SELECT pg_sleep(1) AS label07;
SELECT pg_sleep(1) AS label08;
SELECT pg_sleep(1) AS label09;
SELECT pg_sleep(1) AS label10;
ラベルを付けて 10 個のうち
どの SQL が記録されたか確認する。
9
2-1.log_statement_sample_rate
● 検証 ~意図的にスロークエリを実行~
log_statement_sample_rate = 1.0 の場合
全てのクエリが記録される。
LOG: duration: 1001.968 ms statement: SELECT pg_sleep(1) AS label01;
LOG: duration: 1001.845 ms statement: SELECT pg_sleep(1) AS label02;
…
LOG: duration: 1001.822 ms statement: SELECT pg_sleep(1) AS label09;
LOG: duration: 1002.205 ms statement: SELECT pg_sleep(1) AS label10;
log_statement_sample_rate = 0.5 の場合
試行回数が少ないせいか、 7 割ほどログが記録される。順番も不規則。
LOG: duration: 1001.541 ms statement: SELECT pg_sleep(1) AS label02;
LOG: duration: 1002.212 ms statement: SELECT pg_sleep(1) AS label03;
LOG: duration: 1001.598 ms statement: SELECT pg_sleep(1) AS label04;
LOG: duration: 1001.119 ms statement: SELECT pg_sleep(1) AS label05;
LOG: duration: 1001.363 ms statement: SELECT pg_sleep(1) AS label06;
LOG: duration: 1002.117 ms statement: SELECT pg_sleep(1) AS label08;
LOG: duration: 1001.350 ms statement: SELECT pg_sleep(1) AS label10;
10
2-1.log_statement_sample_rate
● もっと試行回数を増やしたい
大量のクエリ実行の SQL ファイルを生成するバッチを作成
rm -rf sample.sql
for i in {1..1000}; do
echo "SELECT ${i}, pg_sleep(1) AS test;" >> sample.sql
done
log_statement_sample_rate = 0.5 の場合
「 test 」を含む行数をカウントする。
→509 行 (= 約半分 ) 取得されている。
$ grep -ic "test" postgresql-2019-12-06_200041.log
509
[sample.sal]
SELECT 1, pg_sleep(1) AS test;
SELECT 2, pg_sleep(1) AS test;
…
SELECT 1000, pg_sleep(1) AS test;
11
2-1.log_statement_sample_rate
● 別接続の場合どうなるか
大量の psql 接続 + スロークエリを実行するバッチを作成
for i in {1..1000}; do
psql -c "SELECT ${i}, pg_sleep(1) AS test2;"
done
log_statement_sample_rate = 0.5 の場合
「 test 」を含む行数をカウントする。
→512 行 (= 約半分 ) 取得されている。
$ grep -ic "test" postgresql-2019-12-06_202546.log
512
=全接続の SQL から指定された割合のログになるよう抑制している。
1 クエリ毎に psql 接続している。
12
2-2.pg_bench でパーティション
● pg_bench でパーティションテーブルが作れる
--partitions=<NUM>
pgbench_accounts テーブルに生成するパーティション数を指定する。
デフォルトは 0 で、パーティションは生成されない。
--partition-method=<NAME>
使用するパーティションの手法を指定する。
現在は「 range 」と「 hash 」が選べる。
13
2-2.pg_bench でパーティション
● さっそく作ってみた
100 万行の pgbench_accounts を 10 パーティションで区切る
$ pgbench -i -s 10 --partitions=10 --partition-method=range
スケールは「 -s 10 」なので
10 * 10 万行の 100 万行になるよ
14
2-2.pg_bench でパーティション
● 結果を見てみると
=# d+ pgbench_accounts
Partitioned table "public.pgbench_accounts"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
----------+---------------+-----------+----------+---------+----------+--------------+-------------
aid | integer | | not null | | plain | |
bid | integer | | | | plain | |
abalance | integer | | | | plain | |
filler | character(84) | | | | extended | |
Partition key: RANGE (aid)
Indexes:
"pgbench_accounts_pkey" PRIMARY KEY, btree (aid)
Partitions: pgbench_accounts_1 FOR VALUES FROM (MINVALUE) TO (100001),
pgbench_accounts_10 FOR VALUES FROM (900001) TO (MAXVALUE),
pgbench_accounts_2 FOR VALUES FROM (100001) TO (200001),
pgbench_accounts_3 FOR VALUES FROM (200001) TO (300001),
pgbench_accounts_4 FOR VALUES FROM (300001) TO (400001),
pgbench_accounts_5 FOR VALUES FROM (400001) TO (500001),
pgbench_accounts_6 FOR VALUES FROM (500001) TO (600001),
pgbench_accounts_7 FOR VALUES FROM (600001) TO (700001),
pgbench_accounts_8 FOR VALUES FROM (700001) TO (800001),
pgbench_accounts_9 FOR VALUES FROM (800001) TO (900001)
レンジパーティションとして 10 個に分割されている。
15
2-3.SQL をコピペしやすくなった
● 複数行の SQL はコピペしてもそのまま使いにくい
postgres=# SELECT
postgres-# '2019-12-01'::date + g
postgres-# FROM
postgres-# generate_series(0, 3) AS g;
?column?
------------
2019-12-01
2019-12-02
2019-12-03
2019-12-04
(4 rows)
2019/12/1 から 3 日後までの 4 日間を表示する SQL
そのままコピペして使えない。この辺りを削除しなければいけない。
16
2-3.SQL をコピペしやすくなった
● 13 の新機能「 SET PROMPT2 」を使うと
postgres=# set PROMPT2 ''
postgres=# SELECT
'2019-12-01'::date + g
FROM
generate_series(0, 3) AS g;
2 行目以降を空白など好きな文字列にできる。
※ コピペしやすくなった
空白以外も指定可能
postgres=# set PROMPT2 '> '
postgres=# SELECT
> '2019-12-01'::date + g
> FROM
> generate_series(0, 3) AS g;
17
3. 終わりに
● 12 もいいけど 13 も面白そうな情報が色々出てるよ。
● ログ出力の抑制は、使い所に注意が必要そう。
log_min_duration_statement と組み合わせるといい
感じにいけるか?
● pgbench で簡単にパーティションテーブルが生成でき
るので、パーティションの検証がしやすくなりそう。
● コピペがしやすくなったのはブログとかで記事を投稿し
ている身としては大変ありがたい。

Weitere ähnliche Inhalte

Was ist angesagt?

Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)Tetsu Yama
 
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Tetsu Yama
 
Powershell基礎_20180521用
Powershell基礎_20180521用Powershell基礎_20180521用
Powershell基礎_20180521用Tetsu Yama
 
MyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatypeMyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatypeToshi Harada
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)Hiromu Shioya
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLSatoshi Yamada
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwToshi Harada
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwToshi Harada
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017Shigeru Hanada
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうPostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうkasaharatt
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaShigeru Hanada
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205Toshi Harada
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会Satoshi Nagayasu
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeToshi Harada
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Toshi Harada
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会Nao Minami
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門だいすけ さとう
 

Was ist angesagt? (20)

Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
 
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
 
Powershell基礎_20180521用
Powershell基礎_20180521用Powershell基礎_20180521用
Powershell基礎_20180521用
 
MyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatypeMyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatype
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdw
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのかJSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうPostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
 

Ähnlich wie PostgreSQL13を検証してみた

PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLNoriyoshi Shinoda
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...Insight Technology, Inc.
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMikiya Okuno
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 TokyoYoshiyuki Asaba
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewMasayuki Ozawa
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会Mikiya Okuno
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンseiichi arai
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Toshi Harada
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -歩 柴田
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回Shigeharu Yamaoka
 
OSC沖縄2014_JPUG資料
OSC沖縄2014_JPUG資料OSC沖縄2014_JPUG資料
OSC沖縄2014_JPUG資料kasaharatt
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)Satoshi Yamada
 
Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。Toshi Harada
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5Toshi Harada
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoShigeru Hanada
 
PostgreSQL使いのエンジニアから見たMySQL
PostgreSQL使いのエンジニアから見たMySQLPostgreSQL使いのエンジニアから見たMySQL
PostgreSQL使いのエンジニアから見たMySQLtoshihiro_kitagawa
 

Ähnlich wie PostgreSQL13を検証してみた (20)

PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP Overview
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回
 
OSC沖縄2014_JPUG資料
OSC沖縄2014_JPUG資料OSC沖縄2014_JPUG資料
OSC沖縄2014_JPUG資料
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
 
Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
 
PostgreSQL使いのエンジニアから見たMySQL
PostgreSQL使いのエンジニアから見たMySQLPostgreSQL使いのエンジニアから見たMySQL
PostgreSQL使いのエンジニアから見たMySQL
 

Kürzlich hochgeladen

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Kürzlich hochgeladen (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

PostgreSQL13を検証してみた

  • 1.
  • 2. 2 自己紹介 ● 竹内 尚也 DB(Oracle, PostgreSQL) に特化したお仕事を最近までし ていました。今は主に PHP と MySQL で会計関連の Web システムを作るバイトをしています。 python と PHP 要員 として来ました。 前職で DB の経験あるよね? はい。 Oracle と PostgreSQL なら じゃあ MySQL やって え?
  • 3. 3 アジェンダ 1.はじめに 2.ポスグレ 13 の新機能を検証 1.log_statement_sample_rate 2.pgbench でパーティション 3.SQL をコピペしやすくなった 3.終わりに
  • 4. 4 1. はじめに ● 今は MySQL をやってるので PostgreSQL の最新情報 をしらない !! ・今の自分の知識だともう古いかもしれない…。 ・ MySQL との比較的なので発表できないかネタ探し。 ・気がついたら MySQL オンリー資料になってた。 ・今更新しい検証をする時間がない。 13 のお手軽な新機能検証なら すぐにできて、ネタ的にもよくね !?
  • 5. 5 2. ポスグレ 13 の新機能を検証 ● とりあえず気になったのを触れてみた。  まだ β 版もないので、 Git からソースをビルドしました。 今回検証したのは次の 3 つです。 ● log_statement_sample_rate ● pgbench でパーティション ● SQL をコピペしやすくなった
  • 6. 6 2-1.log_statement_sample_rate ● スロークエリのログ出力を抑制  今までは… スロークエリが多すぎると、ログ肥大化 & 可読性の低下に繋がる。  13 からは… このパラメータでスロークエリの出力量を抑制できる! ※ 実は 12beta 版でも実装され、正式版で廃止されたのが 13 で蘇った。
  • 7. 7 2-1.log_statement_sample_rate ● 関連するパラメータ log_min_duration_statement 昔からあるパラメータ。指定した時間以上かかった SQL を記録する。 log_min_duration_sample 追加されたパラメータ。指定した時間以上かかった SQL を記録する。 出力量は「 log_statement_sample_rate 」によって抑制される。 「 log_min_duration_statement 」より優先度は低い。 log_statement_sample_rate 追加されたパラメータ。 「 log_statement_sample_rate 」の出力ログ量を割合で抑制する。 1.0 は全てを記録、 0 の場合何も記録しない。 log_min_duration_statement より 高い値にした場合、無視される。
  • 8. 8 2-1.log_statement_sample_rate ● 検証 ~意図的にスロークエリを実行~ パラメータの設定 ・ log_min_duration_statement = -1 ( 無効化 ) ・ log_min_duration_sample = 500ms ・ log_statement_sample_rate = < 色々変えて試す > 実行する SQL SELECT pg_sleep(1) AS label01; SELECT pg_sleep(1) AS label02; SELECT pg_sleep(1) AS label03; SELECT pg_sleep(1) AS label04; SELECT pg_sleep(1) AS label05; SELECT pg_sleep(1) AS label06; SELECT pg_sleep(1) AS label07; SELECT pg_sleep(1) AS label08; SELECT pg_sleep(1) AS label09; SELECT pg_sleep(1) AS label10; ラベルを付けて 10 個のうち どの SQL が記録されたか確認する。
  • 9. 9 2-1.log_statement_sample_rate ● 検証 ~意図的にスロークエリを実行~ log_statement_sample_rate = 1.0 の場合 全てのクエリが記録される。 LOG: duration: 1001.968 ms statement: SELECT pg_sleep(1) AS label01; LOG: duration: 1001.845 ms statement: SELECT pg_sleep(1) AS label02; … LOG: duration: 1001.822 ms statement: SELECT pg_sleep(1) AS label09; LOG: duration: 1002.205 ms statement: SELECT pg_sleep(1) AS label10; log_statement_sample_rate = 0.5 の場合 試行回数が少ないせいか、 7 割ほどログが記録される。順番も不規則。 LOG: duration: 1001.541 ms statement: SELECT pg_sleep(1) AS label02; LOG: duration: 1002.212 ms statement: SELECT pg_sleep(1) AS label03; LOG: duration: 1001.598 ms statement: SELECT pg_sleep(1) AS label04; LOG: duration: 1001.119 ms statement: SELECT pg_sleep(1) AS label05; LOG: duration: 1001.363 ms statement: SELECT pg_sleep(1) AS label06; LOG: duration: 1002.117 ms statement: SELECT pg_sleep(1) AS label08; LOG: duration: 1001.350 ms statement: SELECT pg_sleep(1) AS label10;
  • 10. 10 2-1.log_statement_sample_rate ● もっと試行回数を増やしたい 大量のクエリ実行の SQL ファイルを生成するバッチを作成 rm -rf sample.sql for i in {1..1000}; do echo "SELECT ${i}, pg_sleep(1) AS test;" >> sample.sql done log_statement_sample_rate = 0.5 の場合 「 test 」を含む行数をカウントする。 →509 行 (= 約半分 ) 取得されている。 $ grep -ic "test" postgresql-2019-12-06_200041.log 509 [sample.sal] SELECT 1, pg_sleep(1) AS test; SELECT 2, pg_sleep(1) AS test; … SELECT 1000, pg_sleep(1) AS test;
  • 11. 11 2-1.log_statement_sample_rate ● 別接続の場合どうなるか 大量の psql 接続 + スロークエリを実行するバッチを作成 for i in {1..1000}; do psql -c "SELECT ${i}, pg_sleep(1) AS test2;" done log_statement_sample_rate = 0.5 の場合 「 test 」を含む行数をカウントする。 →512 行 (= 約半分 ) 取得されている。 $ grep -ic "test" postgresql-2019-12-06_202546.log 512 =全接続の SQL から指定された割合のログになるよう抑制している。 1 クエリ毎に psql 接続している。
  • 12. 12 2-2.pg_bench でパーティション ● pg_bench でパーティションテーブルが作れる --partitions=<NUM> pgbench_accounts テーブルに生成するパーティション数を指定する。 デフォルトは 0 で、パーティションは生成されない。 --partition-method=<NAME> 使用するパーティションの手法を指定する。 現在は「 range 」と「 hash 」が選べる。
  • 13. 13 2-2.pg_bench でパーティション ● さっそく作ってみた 100 万行の pgbench_accounts を 10 パーティションで区切る $ pgbench -i -s 10 --partitions=10 --partition-method=range スケールは「 -s 10 」なので 10 * 10 万行の 100 万行になるよ
  • 14. 14 2-2.pg_bench でパーティション ● 結果を見てみると =# d+ pgbench_accounts Partitioned table "public.pgbench_accounts" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description ----------+---------------+-----------+----------+---------+----------+--------------+------------- aid | integer | | not null | | plain | | bid | integer | | | | plain | | abalance | integer | | | | plain | | filler | character(84) | | | | extended | | Partition key: RANGE (aid) Indexes: "pgbench_accounts_pkey" PRIMARY KEY, btree (aid) Partitions: pgbench_accounts_1 FOR VALUES FROM (MINVALUE) TO (100001), pgbench_accounts_10 FOR VALUES FROM (900001) TO (MAXVALUE), pgbench_accounts_2 FOR VALUES FROM (100001) TO (200001), pgbench_accounts_3 FOR VALUES FROM (200001) TO (300001), pgbench_accounts_4 FOR VALUES FROM (300001) TO (400001), pgbench_accounts_5 FOR VALUES FROM (400001) TO (500001), pgbench_accounts_6 FOR VALUES FROM (500001) TO (600001), pgbench_accounts_7 FOR VALUES FROM (600001) TO (700001), pgbench_accounts_8 FOR VALUES FROM (700001) TO (800001), pgbench_accounts_9 FOR VALUES FROM (800001) TO (900001) レンジパーティションとして 10 個に分割されている。
  • 15. 15 2-3.SQL をコピペしやすくなった ● 複数行の SQL はコピペしてもそのまま使いにくい postgres=# SELECT postgres-# '2019-12-01'::date + g postgres-# FROM postgres-# generate_series(0, 3) AS g; ?column? ------------ 2019-12-01 2019-12-02 2019-12-03 2019-12-04 (4 rows) 2019/12/1 から 3 日後までの 4 日間を表示する SQL そのままコピペして使えない。この辺りを削除しなければいけない。
  • 16. 16 2-3.SQL をコピペしやすくなった ● 13 の新機能「 SET PROMPT2 」を使うと postgres=# set PROMPT2 '' postgres=# SELECT '2019-12-01'::date + g FROM generate_series(0, 3) AS g; 2 行目以降を空白など好きな文字列にできる。 ※ コピペしやすくなった 空白以外も指定可能 postgres=# set PROMPT2 '> ' postgres=# SELECT > '2019-12-01'::date + g > FROM > generate_series(0, 3) AS g;
  • 17. 17 3. 終わりに ● 12 もいいけど 13 も面白そうな情報が色々出てるよ。 ● ログ出力の抑制は、使い所に注意が必要そう。 log_min_duration_statement と組み合わせるといい 感じにいけるか? ● pgbench で簡単にパーティションテーブルが生成でき るので、パーティションの検証がしやすくなりそう。 ● コピペがしやすくなったのはブログとかで記事を投稿し ている身としては大変ありがたい。