Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PostgreSQL Performance Monitoring
Search
soudai sone
PRO
October 20, 2017
Technology
4.8k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PostgreSQL Performance Monitoring
吉祥寺.pm #12 の登壇資料です
https://kichijojipm.connpass.com/event/64456/
soudai sone
PRO
October 20, 2017
More Decks by soudai sone
See All by soudai sone
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
770
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
3
750
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
5
840
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
780
形骸化しない社内勉強会の取り組み - オーナーシップの作り方 / In-house study session
soudai
PRO
1
480
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
1
360
AI時代における具体と抽象の往復 - 日常にチャンスがある / Moving Between the Concrete
soudai
PRO
9
4.7k
制約を設計する - 非決定性との境界線 / Designing constraints
soudai
PRO
6
4.9k
APMの世界から見るOpenTelemetryのTraceの世界 / OpenTelemetry in the Java
soudai
PRO
2
970
Other Decks in Technology
See All in Technology
SLOを阻む不安
sraku2159
0
230
Sizing, Benchmarking and Performance Tuning Apache Flink Clusters
rmetzger
0
130
仕様と現実の間で落とし所を探るリモートMCPの認証・認可 — Sansanの認証基盤における課題と実践
sansantech
PRO
1
120
公共分野での生成AI活用
toru_kubota
1
300
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
140
Sinatra on PicoRuby ローカルでセルフホスト
bash0c7
0
110
IBC 2026 動画技術関連レポート / IBC 2026 Report
cyberagentdevelopers
PRO
2
440
少ない人手 限られた予算 それでも守る 消せない・見つける・戻れる オールハザード型BCP on AWS / 20261107 Mitsutoshi Matsuo
shift_evolve
PRO
0
260
BALLAS Technology Deck
ballas_inc
0
230
AWS構成から考えるWebセキュリティ ― WordPressの構築経験から考える公開範囲と更新運用【JAWS FESTA 2026 in AKITA】
cscengineer
PRO
2
360
IoTとは〜? 数字で見るSORACOM UG【SORACOM UG Explorer 2026】
soracom
PRO
0
320
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
15k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
240
Making the Leap to Tech Lead
cromwellryan
135
10k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Balancing Empowerment & Direction
lara
6
1.4k
Become a Pro
speakerdeck
PRO
31
6.4k
Raft: Consensus for Rubyists
vanstee
143
7.9k
Color Theory Basics | Prateek | Gurzu
gurzu
1
510
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
Transcript
PostgreSQLͷ ύϑΥʔϚϯε ϞχλϦϯά ٢ࣉQN
What is it? ٢ࣉ.pm
What is it? ٢ࣉ.p(erformance)m(onitoring)
What is it? ϞχλϦϯάͯ͠·͔͢ʁ
What is it? ࠓ15͔͠ͳ͍ͷͰ ಘҙͳϠπͷ͠·͢
What is it? ٢ࣉ.pm
What is it? ٢ࣉ.pm ↓ ٢ࣉ. P(ostgreSQL) M(ySQL)
What is it? PostgreSQLͷ͠·͢
͋͐͡Μͩ ̍ɹࣗݾհ ̎ɹPostgreSQLͷ෦ߏ ̏ɹPostgreSQLͷ౷ܭใ ̐ɹPostgreSQLͷϞχλϦϯά ̑ɹ·ͱΊ
͋͐͡Μͩ ̍ɹࣗݾհ ̎ɹPostgreSQLͷ෦ߏ ̏ɹPostgreSQLͷ౷ܭใ ̐ɹPostgreSQLͷϞχλϦϯά ̑ɹ·ͱΊ
ࣗݾհ ໊લɿીࠜɹେʢͦͶɹ͚ͨͱʣ ྸɿ32ࡀʢࡾਓͷࢠڙ͕͍·͢ʣ ৬ۀɿCustomer Reliability Engineering ॴଐɿגࣜձࣾ ͯͳʢMackerelνʔϜʣ ɹɹɹຊPostgreSQLϢʔβձ ɹɹɹɹɹɹ
ษڧձ୲ ɹɹٕज़తʹLLܥݴޠͱ͔RDB͕͖Ͱ͢
ࣗݾհ ໊લɿીࠜɹେʢͦͶɹ͚ͨͱʣ ྸɿ32ࡀʢࡾਓͷࢠڙ͕͍·͢ʣ ৬ۀɿCustomer Reliability Engineering ॴଐɿגࣜձࣾ ͯͳʢMackerelνʔϜʣ ɹɹɹຊPostgreSQLϢʔβձ ɹɹɹɹɹɹ
ษڧձ୲ ɹɹٕज़తʹLLܥݴޠͱ͔RDB͕͖Ͱ͢
Mackerel
ͯͳؒΛ୳ͯ͠·͢ curl -sIL mackerel.io | grep engineer
ͯͳؒΛ୳ͯ͠·͢ curl -sIL mackerel.io | grep engineer ͜Εͩͱ$3&ग़ͯ͜ͳ͍ͷͰHSFQDSF͍ͯͩ͘͠͞ʂʂ
͋͐͡Μͩ ̍ɹࣗݾհ ̎ɹPostgreSQLͷ෦ߏ ̏ɹPostgreSQLͷ౷ܭใ ̐ɹPostgreSQLͷϞχλϦϯά ̑ɹ·ͱΊ
PostgreSQLͷ෦ߏ ԿΛϞχλϦϯά͢Δ͔ʁ
PostgreSQLͷ෦ߏ ԿΛϞχλϦϯά͢Δ͔ʁ ˣ ෦ߏΛΒͳ͍ͱ ͕ཧղͰ͖ͳ͍
ϓϩηε໊ આ໌ Ϛελʔαʔό ࠷ॳʹىಈ͞ΕΔϓϩηε ϥΠλ ڞ༗όοϑΝͷ༰ΛσʔλϑΝΠϧʹॻ͖ग़͢ɻ WALϥΠλ WALόοϑΝͷ༰ΛWALϑΝΠϧʹॻ͖ग़͢ɻ νΣοΫϙΠϯλ શͯͷμʔςΟʔϖʔδΛσʔλϑΝΠϧʹॻ͖ग़͢ɻ
ࣗಈVACUUMϥϯνϟ ઃఆʹ͕ͨͬͯࣗ͠ಈVACUUMϫʔΧΛىಈ͢Δɻ ࣗಈVACUUMϫʔΧ ࣗಈVACUUMΛ࣮ߦ͢Δɻෳىಈ͢Δ͜ͱ͕͋Δɻ ౷ܭใίϨΫλ σʔλϕʔεͷ׆ಈঢ়گʹؔ͢Δ౷ܭใΛऩू͢Δɻ όοΫΤϯυϓϩηε ΫϥΠΞϯτͷଓཁٻຖʹىಈ͠ɺཁٻʹରͯ͠ॲཧ͢Δɻ ϩΨʔ PostgreSQLͷϩάΛϑΝΠϧॻ͖ग़͢ɻ ΞʔΧΠό WALϩάΛΞʔΧΠϒ͢Δɻ WALηϯμ ϨϓϦέʔγϣϯ࣌ʹWALΛεϨʔϒαʔόʹసૹ͢Δɻ WALϨγʔό ϨϓϦέʔγϣϯ࣌ʹWALΛϚελʔαʔό͔Βड৴͢Δɻ ओͳϓϩηε܈
໊લ આ໌ σʔλϑΝΠϧ ςʔϒϧσʔλͷ࣮ମ͕อଘ͞ΕΔϑΝΠϧͰ͢ɻςʔϒϧϑΝΠϧෳͷ8192όΠτͷϖʔδ (OracleDBͰϒϩοΫ)ʹΑͬͯߏ͞Ε·͢ɻ INDEXϑΝΠϧ INDEXใ͕อଘ͞ΕΔϑΝΠϧͰ͢ɻςʔϒϧϑΝΠϧͱಉ༷ʹෳͷ8192όΠτͷϖʔδ(OracleDB ͰϒϩοΫ)ʹΑͬͯߏ͞Ε·͢ɻ WALϑΝΠϧ Write
Ahead LoggingͷུͰτϥϯβΫγϣϯϩάΛPostgreSQLͰWALͱݺͼ·͢ɻߋ৽ʹؔΘΔใ ΛهԱ͢Δ͜ͱͰσʔλϕʔεͷӬଓੑͷอূΛߦ͍ͬͯ·͢ɻpg_xlogσΟϨΫτϦԼʹอଘ͞Εɺ 16MBͷݻఆαΠζͰ࡞͞Ε·͢ɻ PostgreSQLͷ෦ߏ ओͳϑΝΠϧ܈
PostgreSQLͷ෦ߏ ओͳϝϞϦ܈ ໊લ આ໌ ڞ༗όοϑΝ (shared_buffers) ςʔϒϧΠϯσοΫεͷσʔλΛΩϟογϡ͢ΔྖҬͰ͢ɻ WALόοϑΝ (wal_buffers) σΟεΫʹॻ͖ࠐ·Ε͍ͯͳ͍τϥϯβΫγϣϯϩάΛΩϟογϡ͢ΔྖҬͰ͢ɻ
ՄࢹੑϚοϓ (Visibility Map) ςʔϒϧͷσʔλ͕ࢀরग़དྷΔ͔൱͔ཧ͢ΔใΛѻ͏ྖҬͰ͢ɻVACUUMॲཧͷࡍʹॲཧରͷ ϖʔδ͔அ͢Δࡍʹར༻͞Ε·͢ɻ·ͨՄࢹੑϚοϓVACUUMॲཧ֤ߋ৽ॲཧͷࡍʹߋ৽͞Ε ·͢ɻPostgreSQL 9.2Ҏ߱ͰΠϯσοΫεɾΦϯϦʔɾεΩϟϯͱݴ͏ͱͯߴͳݕࡧํࣜͷࡍʹ ۭ͖ྖҬϚοϓ (Free Scan Map) ςʔϒϧ্ͷར༻ՄೳͳྖҬΛࢦࣔ͢͠ใΛѻ͏ྖҬͰ͢ɻVACUUMॲཧͷࡍʹશ͘ࢀর͞Ε͍ͯ ͳ͍ߦΛ୳ۭ͖ͯ͠ྖҬͱͯ͠࠶ར༻ग़དྷΔঢ়ଶʹ͠·͢ɻͦͷޙɺՃߋ৽࣌ʹۭ͖ྖҬϚοϓΛ ୳ࡧ͠ɺۭ͖ྖҬΛ࠶ར༻͠·͢ɻ
PostgreSQLͷ෦ߏ L L E E L X E I N
D AE E W W E E
PostgreSQLͷ෦ߏ 2VFSZͷड৴ ߏจղੳ ॻ͖͑ ࣮ߦܭըੜ࠷దԽ ࣮ߦ ݁Ռૹ৴ 1BSTF 42-ͷߏจղੳɾจ๏Τϥʔݕग़ɾߏจͷੜ 3FXSJUF
7JFXɾ3PMFʹجͮ͘ߏจͷॻ͖͑ 1MBO0QUJNJ[F ࣮ߦܭըͷੜ౷ܭใͳͲΛར༻ͨ͠࠷దԽ &YFDVUF ࣮ߦܭըͷج͍ͮͨ2VFSZͷ࣮ߦɾ8"-ͷهͳͲ 42-จͷॲཧ͞ΕΔྲྀΕ
PostgreSQLͷ෦ߏ '30.۟ 0/۟ +0*/۟ 8)&3&۟ (3061#:۟ )"7*/(۟ 4&-&$5۟ %*45*/$5۟ 03%&3#:۟
-*.*5۟ 42-จͷධՁ͞ΕΔॱ IUUQTXXXQPTUHSFTRMKQEPDVNFOUIUNMTRMTFMFDUIUNM
PostgreSQLͷ෦ߏ 1 2 3 1
3 2 PostgreSQL(
PostgreSQLͷ෦ߏ 1 2 3 1
3 2 2 PostgreSQL(
PostgreSQLͷ෦ߏ Φεεϝຊʂ ͚ͩͲͷ
PostgreSQLͷ෦ߏ ɹQHͷ ೖهࣄ͕͋Δ
͋͐͡Μͩ ̍ɹࣗݾհ ̎ɹPostgreSQLͷ෦ߏ ̏ɹPostgreSQLͷ౷ܭใ ̐ɹPostgreSQLͷϞχλϦϯά ̑ɹ·ͱΊ
PostgreSQLͷ౷ܭใ ౷ܭใίϨΫλ͕ αʔόͷ׆ಈঢ়گʹؔ͢ΔใΛऩू
PostgreSQLͷ෦ߏ L L E E L X E I N
D AE E W W E E
PostgreSQLͷ౷ܭใ αʔόͷ׆ಈঢ়گʹؔ͢Δใ
PostgreSQLͷ౷ܭใ αʔόͷ׆ಈঢ়گʹؔ͢Δใ ˣ ౷ܭใ
PostgreSQLͷ౷ܭใ ౷ܭใ ެࣜυΩϡϝϯτ IUUQTXXXQPTUHSFTRMKQEPDVNFOUIUNMNPOJUPSJOHTUBUTIUNM
͋͐͡Μͩ ̍ɹࣗݾհ ̎ɹPostgreSQLͷ෦ߏ ̏ɹPostgreSQLͷ౷ܭใ ̐ɹPostgreSQLͷϞχλϦϯά ̑ɹ·ͱΊ
PostgreSQLͷϞχλϦϯά ౷ܭใΛ͏ͱ 1PTUHSF42-ΛϞχλϦϯάͰ͖Δ
PostgreSQLͷϞχλϦϯά ϞχλϦϯάͷྫ w ൃߦ͞Ε͍ͯΔ2VFSZ w ϩοΫͷ༰ w */%&9ͷར༻ঢ়گ w νΣοΫϙΠϯτͷॲཧঢ়گʜFUD
PostgreSQLͷϞχλϦϯά ͔͠͠ྺ࢙Λ࣋ͨͳ͍
PostgreSQLͷϞχλϦϯά ͔͠͠ྺ࢙Λ࣋ͨͳ͍ ˣ ࣌ܥྻ%#ʹอଘͯ͠ՄࢹԽ
PostgreSQLͷϞχλϦϯά
PostgreSQLͷϞχλϦϯά QH@TUBU@TUBUFNFOUTΛ͏ IUUQTXXXQPTUHSFTRMKQEPDVNFOUIUNMQHTUBUTUBUFNFOUTIUNM
PostgreSQLͷϞχλϦϯά QH@TUBU@TUBUFNFOUTΛ͏ ˣ 42-ͷ࣮ߦΛ͑Δ
PostgreSQLͷϞχλϦϯά QH@TUBU@TUBUFNFOUTΛ͏ ˣ 42-ͷ࣮ߦΛ͑Δ σϑΥϧτP⒎ ࣗͰ༗ޮʹͯ͠Δඞཁ͕͋Δ
PostgreSQLͷϞχλϦϯά ϞχλϦϯάͷྫ
εϧʔϓοτΤϥʔͷ֬ೝ =# SELECT datname, xact_commit, xact_rollback FROM pg_stat_database; datname |
xact_commit | xact_rollback -----------+-------------+--------------- template1 | 0 | 0 template0 | 0 | 0 postgres | 101216 | 1
Ωϟογϡώοτͷ֬ೝ =# SELECT datname, round(blks_hit*100/(blks_hit+blks_read), 2) AS cache_hit_ratio FROM pg_stat_database
WHERE blks_read > 0; datname | cache_hit_ratio ----------+----------------- postgres | 99.00 ※ blks_hit+blks_read ʹҙ
ςʔϒϧͷ Ωϟογϡώοτͷ֬ೝ =# SELECT relname, round(heap_blks_hit*100/(heap_blks_hit+heap_blks_read), 2) AS cache_hit_ratio FROM
pg_statio_user_tables WHERE heap_blks_read > 0 ORDER BY cache_hit_ratio; relname | cache_hit_ratio ------------------+----------------- pgbench_accounts | 97.00 pgbench_tellers | 99.00 pgbench_history | 99.00 pgbench_branches | 99.00
ΠϯσοΫεͷ Ωϟογϡώοτͷ֬ೝ =# SELECT relname, indexrelname, round(idx_blks_hit*100/(idx_blks_hit+idx_blks_read), 2) AS cache_hit_ratio
FROM pg_statio_user_indexes WHERE idx_blks_read > 0 ORDER BY cache_hit_ratio; relname | indexrelname | cache_hit_ratio ------------------+-----------------------+------------------ pgbench_tellers | pgbench_tellers_pkey | 90.00 pgbench_branches | pgbench_branches_pkey | 99.00 pgbench_accounts | pgbench_accounts_pkey | 99.00
දεΩϟϯ͋ͨΓͷಡΈऔΓߦͷ֬ೝ =# SELECT relname, seq_scan, seq_tup_read, seq_tup_read/seq_scan AS tup_per_read FROM
pg_stat_user_tables WHERE seq_scan > 0 ORDER BY tup_per_read DESC; relname | seq_scan | seq_tup_read | tup_per_read ------------------+----------+--------------+-------------- pgbench_accounts | 1 | 100000 | 100000 pgbench_tellers | 153613 | 1000010 | 6 pgbench_branches | 35659 | 16461 | 0
)05ߋ৽ͷൺͷ֬ೝ =# SELECT relname, n_tup_upd, n_tup_hot_upd, round(n_tup_hot_upd*100/n_tup_upd, 2) AS hot_upd_ratio
FROM pg_stat_user_tables WHERE n_tup_upd > 0 ORDER BY hot_upd_ratio; relname | n_tup_upd | n_tup_hot_upd | hot_upd_ratio ------------------+-----------+---------------+--------------- pgbench_accounts | 100000 | 96079 | 96.00 pgbench_tellers | 100000 | 99921 | 99.00 pgbench_branches | 100000 | 99548 | 99.00
ϩοΫͪॲཧͷ֬ೝ =# SELECT l.locktype, c.relname, l.pid, l.mode, substring(a.current_query, 1, 6)
AS query, (current_timestamp - xact_start)::interval(3) AS duration FROM pg_locks l LEFT OUTER JOIN pg_stat_activity a ON l.pid = a. procpid LEFT OUTER JOIN pg_class c ON l.relation = c.oid WHERE NOT l.granted ORDER BY l.pid; locktype | relname | pid | mode | query | duration ---------------+----------+------+---------------+--------+-------------- tuple | tellers | 2700 | ExclusiveLock | UPDATE | 00:00:00.013 transactionid | | 2701 | ShareLock | INSERT | 00:00:00.004 transactionid | | 2702 | ShareLock | UPDATE | 00:00:00.014 tuple | tellers | 2703 | ExclusiveLock | UPDATE | 00:00:00.004 tuple | tellers | 2704 | ExclusiveLock | UPDATE | 00:00:00.009 tuple | branches | 2705 | ExclusiveLock | UPDATE | 00:00:00.001 transactionid | | 2706 | ShareLock | UPDATE | 00:00:00.001 transactionid | | 2707 | ShareLock | UPDATE | 00:00:00.017 transactionid | | 2708 | ShareLock | UPDATE | 00:00:00.007
PostgreSQLͷϞχλϦϯά -FUT1PTUHSFT lՔಈ౷ܭใΛ׆༻͠Α͏z IUUQTMFUTQPTUHSFTRMKQEPDVNFOUTUFDIOJDBMTUBUJTUJDT
͋͐͡Μͩ ̍ɹࣗݾհ ̎ɹPostgreSQLͷ෦ߏ ̏ɹPostgreSQLͷ౷ܭใ ̐ɹPostgreSQLͷϞχλϦϯά ̑ɹ·ͱΊ
·ͱΊ ઌਓͷܙΛ͏
·ͱΊ ઌਓͷܙΛ͏ ˣ ެࣜυΩϡϝϯτΛಡ͏
·ͱΊ ઌਓͷܙΛ͏ ˣ ެࣜυΩϡϝϯτΛಡ͏ ҆৺ͷຊޠυΩϡϝϯτ
·ͱΊ ·ͣՄࢹԽΛ͢Δ
·ͱΊ ਪଌΑΓܭଌ
·ͱΊ ਪଌΑΓܭଌ ↓ ܭଌΑΓ؍ଌ
·ͱΊ ࣄ࣮ΛΑΓଟ͘ɺਖ਼͘͠Δ͜ͱͰ ະདྷΛਖ਼͘͠༧ଌͰ͖Δ
None
·ͱΊ ΤϯδχΞʹࠜڌ͕ඞཁ
·ͱΊ ΤϯδχΞʹࠜڌ͕ඞཁ ↓ ͳΜͱͳ͘Ͱࣄग़དྷͳ͍
·ͱΊ
·ͱΊ
·ͱΊ
·ͱΊ ςετίʔυϓϩάϥϜͷ࣭ͷՄࢹԽ ϞχλϦϯάαʔϏεͷ࣭ͷՄࢹԽ
·ͱΊ lߴʹൃୡͨ͠γεςϜͷҟৗ ਆͷౖΓͱݟ͚͕͔ͭͳ͍z Z@VVLJ
·ͱΊ ମॏܭʹΔ͚ͩͰ૫ͤͳ͍
·ͱΊ ମॏܭʹΔ͚ͩͰ૫ͤͳ͍ ↓ ࣭ΛՄࢹԽ͚ͨͩ͠Ͱվળ͞Εͳ͍
·ͱΊ lखΛಈ͔ͨ͠ਓ͚͕ͩੈքΛม͑Δz :BTVIJSP0OJTIJ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ