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
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
1
520
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
600
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
680
形骸化しない社内勉強会の取り組み - オーナーシップの作り方 / In-house study session
soudai
PRO
1
270
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
1
320
AI時代における具体と抽象の往復 - 日常にチャンスがある / Moving Between the Concrete
soudai
PRO
9
4.3k
制約を設計する - 非決定性との境界線 / Designing constraints
soudai
PRO
6
4.5k
APMの世界から見るOpenTelemetryのTraceの世界 / OpenTelemetry in the Java
soudai
PRO
2
820
失敗できる意思決定とソフトウェアとの正しい歩き方_-_変化と向き合う選択肢/ Designing for Reversible Decisions
soudai
PRO
16
7.1k
Other Decks in Technology
See All in Technology
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
12
6.8k
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
790
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
300
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
190
10分で知る最近のOmarchy
komagata
0
310
品質と信頼性を地続きにする
grimoh
0
350
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
3
1.6k
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
130
AI de Idea
kawaguti
PRO
2
100
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
150
安心して変更できるWebフロントエンドの作り方
pirosikick
4
2.4k
Podは生きているのにGoだけが落ちる:GOGCとGOMEMLIMITで追うInvisible OOM Killの謎
tkc66buzz
1
730
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Mobile First: as difficult as doing things right
swwweet
225
10k
Accessibility Awareness
sabderemane
1
210
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
New Earth Scene 8
popppiees
4
2.6k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
280
The Cost Of JavaScript in 2023
addyosmani
55
10k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
We Are The Robots
honzajavorek
0
370
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
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
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ