SlideShare a Scribd company logo
MySQLメインの人が
PostgreSQLの
ベンチマークをしてみた話
第2回 MySQL・PostgreSQLユーザグループ(MyNA・JPUG)
合同DB勉強会
2016/02/20
自己紹介
• いとう ひろゆき
• サーバ運用・保守が仕事
• MySQL好き、酒好き
方向性
• 高負荷が続いても安定した性能が出るパラメ
ータ設定を探す
• そのため、瞬間的で良いから最大性能を出そ
うとする場合は異なるパラメータになると考
えられます
謝辞
• PostgreSQLのパラメータやビューについて教
えて頂いたsoudaiさん、kkidaさん、
nuko.yokohamaさん、PostgresSQL Slackの方
々、有難うございました
環境
• PostgreSQL 9.5.0
• File System
• ext4(nobarrier,discard)
• ベンチマークソフト
• LinkBench
• https://github.com/mdcallag/linkbench
LinkBenchの補足1
• 元々はFacebookがMySQL向けに作成したベン
チマークソフト(I/Oヘビー)
• Facebookの中の人であるMark Callaghan宛に
PostgreSQL対応のプルリクがあり、マージさ
れたため試してみました
LinkBenchの補足2
• 微妙にバグがあり、LinkStorePgsql.javaを修
正しています(データロードしてもnodetableが
空になるため)
• なおFacebookのgithubのLinkBenchにはマー
ジされていないはずです
LinkBenchの補足3
• 同じようなクエリではあるけどテーブル定義
とか微妙にMySQLと異なっていたりします
ベンチマーク環境
• HP DL360 G8v2
• Intel Xeon E5-2643 v2 3.50GHz x 2 (2P12C24T)
• MEM 8GB x 8 = 64GB
• ioDrive2 785G (Driver version: 3.2.6)
• NIC Intel I350
• CentOS 6.6(2.6.32-504.12.2.el6.x86_64)
postgresql.conf
• shared_buffers = 16GB
• work_mem = 16MB
• bgwriter_delay = 10ms
• wal_level = archive
• wal_sync_method = open_datasync
• wal_buffers = 32MB
• wal_max_size = 16GB
• checkpoint_timeout = 60min
• checkpoint_completion_target = 0.9
• archive_mode = on
• archive_command = 'test ! -f
/var/lib/pgsql/linkdb/archivedir/%f && pigz <
%p > /var/lib/pgsql/linkdb/archivedir/%f’
• effective_cache_size = 4GB
• log_checkpoints = on
• autovaccum = off
LinkBenchのオプション
• FBWorkload.properties にてmaxid1 = 20000001
• pg_xlogを除いて約36GB
• 実行コマンド(試験中)
• /bin/linkbench -c config/LinkConfigPgsql.properties -D
maxtime=600 -D requests=10000000 -D requesters=64 -r
• maxtimeはパラメータが固まったら3600(1時間)
初期から変更した設定1
• max_wal_sizeの変更(1GB -> 16GB)
• HINT: Consider increasing the configuration parameter
“max_wal_size”.
• 8GBも試したが今回の環境では1割ちょっと16GBの方が
高スコア
• archive_commandの圧縮をgzipからpigzへ変更
• pg_xlog以下が40GB超えたりしたので
初期から変更した設定2
• shared_buffers (40GB -> 16GB)
• データ量に対してshared_buffersが十分に大きいと
background writer(bgwriter)が仕事をしないため
• LinkBenchのようにI/O負荷が高いベンチマークでは
チェックポイントの際の書き込み負荷が高く、
bgwriterにより少しずつで良いから吐き出してもらう
ため
不安定なI/O状況
• 取得間隔は15秒
• 定期的に書き込みが跳ねる
• 頑張ってもLinkBenchのスコアは36000前後をふらふら
多少安定させる事に成功
割と安定した時のI/O状況
• 取得間隔は15秒
• checkpointの際に書き込みが跳ねるが割と安定
• LinkBenchのスコアは38000前後に向上
割と安定させた設定
• PostgreSQLの設定ではなくOSの設定
• sysctl.conf
• vm.dirty_background_bytes = 33554432
• vm.dirty_bytes = 268435456
• 以下設定でもデフォルトと比較するとマシ
• vm.dirty_ratio = 3
• vm.dirty_background_ratio = 1
• いくらbgwriterが頑張ってもメモリのダーティペー
ジ(/proc/meminfoのDirty)を吐き出す処理が重い
• ダーティページのメモリに対する割合を小さくし
、積極的に書き出させることで瞬間的な書き込み
量を削減(SSDに優しく無い)
• dstat --top-io --top-bioで以下のようにダーティペ
ージの書き出しががっつり来てる事が確認できま
す
• postgres: a 112M 47M|flush-252:0 0 509M
• PostgreSQLのSlackでKernel 3.2以降だと
I/O less dirty throttlingが使えるとのことなので環
境違いますがCentOS7.2で同じベンチマークを実
施
ベンチマーク環境2
• 自作サーバ
• Intel Xeon E5-2630 2.30GHz x 2 (2P12C24T)
• MEM 8GB x 8 = 64GB
• Intel SSD 910 Series 400GB (200GB x 2, RAID0(md0), ext4)
• NIC Intel I350
• CentOS 7.2
環境違い過ぎるので参考まで
• dstatで経過を見ているとメモリのダーティページ
の書き出しが最も高い書き込み量となることはあ
りませんでした
• 環境や設定次第ですがCentOS7系やKernel3.2系
の機能が入ってるOSを使うだけでメモリのダー
ティページのフラッシュによるスローダウンが減
少するかもしれません
話しを戻して
まだ何か出来ないか?
• とにかく書き込みが多い(300MB/s前後とか)
• 読み取りは一定時間経過すればメモリに収まるので
block readはほとんど発生しなくなる
• パラメータ何か無いかSHOW ALL;を眺める
• wal_compressionを見つける
• 圧縮なのでCPUの負荷は上がるだろうけど、まだ余裕があり
そうなので試してみた
書き込み状況
• 書き込み量が最大でも200MBちょっとに減少
• 10分間で4回発生していたチェックポイントが
2回に減少し、スコアも40057に上昇
比較のために
wal_compression off/on
で1時間実行
結果
OFF
33657
ON
39152
wal_compressionの効果
• OFFの場合、時間と共に性能が落ちていく
• ONの場合、性能は同様に落ちていく傾向にあ
るが、減少幅が非常に小さい
推測
• PCI-E SSDのように高速なI/Oデバイスを使用してお
り、そのI/Oデバイスが主に書き込みにより限界近く
で動いている場合、wal_compressionは有効に働く
と考えられる
• HDDの場合もI/O負荷が高い場合はCPUが余る傾向に
なるはずなので、効果はあると考えられるがI/O負荷
が低い環境では性能劣化に繋がると考えられる
グラフから
考察
左wal_compression off, 右on
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
さて
ここまでは
autovacuum
OFF
ということで
autovacuum
ON
結果
38004
あまり
性能低下
しなかった
改めて
グラフ
左autovacuum off, 右on
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
autovacuum off/on
• グラフからは明確な差は確認出来ないレベル
となりました
• wal_compressionを有効にした事でI/Oについ
てはある程度余裕が出来ていたためvacuumに
よるI/Oが増えても影響が軽微で済んだと考え
られます
MySQLユーザから見て
• 開発方針の違いとはいえOSの影響をここまで受けるとは思わなかった
• MySQLではメモリのダーティページは最近のバージョンを利用して
いる場合、増えることは基本無いため
• 高負荷が続くことの多いソーシャルゲームでMySQLが利用される事が
多いのは高負荷が続く場合に安定させるのが大変というのも理由なの
かな、と感じた
• 適材適所ですよね。とはいえこのぐらいの性能出るならほとんどの
サービスで問題の無い処理時間で動作すると思います
• チェックポイントの書き込み量はもっと細く
制御出来ると良さそう
• 一定の負荷が続く場合、このぐらい書き込
み一定にして性能を安定させたい
今後
• 今回はメモリに収まる範囲のデータ量でベン
チマークを行ったので、MySQLでも行ってる
ように200GBぐらいのデータ量でも安定する
か測定してみたい
ここから
追加スライド
質問で
• transparent huge pages(THP)は無効ですか?
• に対して私が勘違いして無効と答えてて、懇
親会で間違いに気づいて追加でベンチを取っ
たりした内容になります。
結果
38465
THP never
wal_compression on
autovaccum on
やや落ちたけど
色々コマンド発行し
てたから誤差程度
かと思います
THPが悪さしているのか
• 分からないのかなー、と色々教えてもらった
り調べたりしていたら割とperfと
FrameGraphsで分かりそうなのでTHP
always, neverのそれぞれ1時間のベンチマーク
を実行
• 1分毎にperfで元データ収集しました
perfの取得方法
• perf record -a -g -F 99 -o [ファイル] sleep 10
• 1ファイル2.5M前後
• 終わったとのFrameGraphsにしました
THP alwaysの30分後の
FlameGraphs
THP neverの30分後の
FlameGraphs
見た感じ
• postmaster(PostgreSQL)のpglz_compress(た
ぶんwal_compressionの処理)や
archive_commandで指定したpigzに時間がか
かるのは仕方無い
• THP alwaysだとJava(LinkBench)側に
平らな場所があって怪しいので拡大してみる
THP alwaysのJavaの所を拡大
THP neverのJavaの所を拡大
ということで
• Java(LinkBench)についてはTHP alwaysでは
page_faultからの積み上げでcompactionがいて
THPの影響をそれなりに受けていたようです
• postmaster(PostgreSQL)は今回のケースに
おいてはTHPの影響は軽微という結果になりま
した
とはいえ
• 今回はデータ量がメモリに収まる程度でした
ので100GB単位のデータ量にすると傾向が変
わったり、ワークロードによっても傾向が変
わるかもしれません
• きちんとそれぞれの環境で計測しましょう
厳密に比較するなら
• LinkBench(Java)自体が割とTHPの影響を受け
てしまうので別のサーバからネットワーク越
しに負荷をかける必要がある
• 繰り返しになりますがFrameGraphsを見る限
りは今回PostgreSQLに与える影響は少なそう
なので大きな差は出ないと考えられます

More Related Content

PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PDF
MySQLレプリケーションあれやこれや
PPTX
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
Redis at LINE
PDF
pg_trgmと全文検索
PDF
あなたの知らないPostgreSQL監視の世界
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
NTT DATA と PostgreSQL が挑んだ総力戦
MySQLレプリケーションあれやこれや
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
Redis at LINE
pg_trgmと全文検索
あなたの知らないPostgreSQL監視の世界
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック

What's hot (20)

PDF
PostgreSQL 15 開発最新情報
PDF
DBスキーマもバージョン管理したい!
PDF
MySQLアーキテクチャ図解講座
PDF
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PPTX
地理分散DBについて
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PDF
まずやっとくPostgreSQLチューニング
PDF
Inside vacuum - 第一回PostgreSQLプレ勉強会
PDF
AWS で Presto を徹底的に使いこなすワザ
PDF
[Postgre sql9.4新機能]レプリケーション・スロットの活用
PDF
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLレプリケーション徹底紹介
PDF
MongoDBのアレをアレする
PPTX
MongoDBの監視
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
PDF
PostgreSQLの関数属性を知ろう
PDF
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
PDF
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
PostgreSQL 15 開発最新情報
DBスキーマもバージョン管理したい!
MySQLアーキテクチャ図解講座
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
地理分散DBについて
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
まずやっとくPostgreSQLチューニング
Inside vacuum - 第一回PostgreSQLプレ勉強会
AWS で Presto を徹底的に使いこなすワザ
[Postgre sql9.4新機能]レプリケーション・スロットの活用
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLレプリケーション徹底紹介
MongoDBのアレをアレする
MongoDBの監視
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
PostgreSQLの関数属性を知ろう
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Ad

Viewers also liked (20)

PDF
MySQL Clusterのトラブル事例
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PDF
InnoDB Table Compression
PDF
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PDF
MySQLからPostgreSQLへのマイグレーションのハマリ所
PDF
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
PPTX
POWER8サーバでMariaDBベンチマーク
PDF
MySQL 監査システムを作った話 #mysqlcasual
PPTX
Cloud Formationで既存のインフラを増築した話
PDF
オープンソース・データベースの最新事情
PPTX
オープンセミナー2015@広島プレゼン
PPTX
innodb_thread_concurrencyとtransparent hugepageの影響
PDF
もっと気軽にCloudFormation
PDF
業務システムにおけるMongoDB活用法
PDF
Muninは舞い降りた ~リソース監視を通して、運用現場を変える話~
PDF
PostgreSQLレプリケーション徹底紹介
PPTX
20151205 中国地方db勉強会 dbm_fs
PPT
意外と知らないFilemakerの世界
MySQL Clusterのトラブル事例
ヤフー社内でやってるMySQLチューニングセミナー大公開
InnoDB Table Compression
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
MyNA JPUG study 20160220-postgresql-json-datatype
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
MySQLからPostgreSQLへのマイグレーションのハマリ所
プロビジョニングの今 ーフルマネージド・サービスを目指してー #cmdevio2016 #E
POWER8サーバでMariaDBベンチマーク
MySQL 監査システムを作った話 #mysqlcasual
Cloud Formationで既存のインフラを増築した話
オープンソース・データベースの最新事情
オープンセミナー2015@広島プレゼン
innodb_thread_concurrencyとtransparent hugepageの影響
もっと気軽にCloudFormation
業務システムにおけるMongoDB活用法
Muninは舞い降りた ~リソース監視を通して、運用現場を変える話~
PostgreSQLレプリケーション徹底紹介
20151205 中国地方db勉強会 dbm_fs
意外と知らないFilemakerの世界
Ad

Similar to MySQLメインの人がPostgreSQLのベンチマークをしてみた話 (20)

PDF
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PDF
オンプレのDbaがazureのデータベースを使ってみた
PDF
CPUの同時実行機能
PPTX
Mvp road show_0830_rev1
PDF
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
PDF
JJUG CCC 2017 Spring LT about JPA
PDF
松本克彦 ピグにおけるリアルタイムランキングの導入
PDF
Amazon Aurora Deep Dive (db tech showcase 2016)
ODP
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PPTX
Sql database のご紹介
PDF
AWSのデータベースサービス全体像
PDF
[db tech showcase Tokyo 2015] A33:Amazon Aurora Deep Dive by アマゾン データ サービス ジャ...
PPTX
EmbulkとDigdagとデータ分析基盤と
PPTX
EmbulkとDigdagとデータ分析基盤と
PPTX
Ctb57 with god7
PDF
ioMemoryとAtomic Writeによるデータベース高速化
 
PDF
Zabbixのパフォーマンスチューニング & インストール時の注意点
PPTX
初心者向け負荷軽減のはなし
PPTX
第51回NDS PostgreSQLのデータ型 #nds51
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
オンプレのDbaがazureのデータベースを使ってみた
CPUの同時実行機能
Mvp road show_0830_rev1
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
JJUG CCC 2017 Spring LT about JPA
松本克彦 ピグにおけるリアルタイムランキングの導入
Amazon Aurora Deep Dive (db tech showcase 2016)
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Sql database のご紹介
AWSのデータベースサービス全体像
[db tech showcase Tokyo 2015] A33:Amazon Aurora Deep Dive by アマゾン データ サービス ジャ...
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
Ctb57 with god7
ioMemoryとAtomic Writeによるデータベース高速化
 
Zabbixのパフォーマンスチューニング & インストール時の注意点
初心者向け負荷軽減のはなし
第51回NDS PostgreSQLのデータ型 #nds51

MySQLメインの人がPostgreSQLのベンチマークをしてみた話