Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PostgreSQL11 設定パラメーター解体新書 / PostgreSQL 11 para...
Search
ester41
January 26, 2019
Technology
2
3.9k
PostgreSQL11 設定パラメーター解体新書 / PostgreSQL 11 parameter
OSC 2019 Osakaの登壇資料です。
ester41
January 26, 2019
Tweet
Share
More Decks by ester41
See All by ester41
PostgreSQLのレプリケーションを使ってみよう / PostgreSQL 13 Replication
ester41
1
730
はじめてのPostgreSQLモニタリング入門 / PostgreSQL 11 Monitoring
ester41
17
3.5k
こわくないPostgreSQLのアップグレード
ester41
1
3.1k
PostgreSQLデプロイの基礎
ester41
1
1.2k
Other Decks in Technology
See All in Technology
いざ、BSC討伐の旅
nikinusu
2
780
安心してください、日本語使えますよ―Ubuntu日本語Remix提供休止に寄せて― 2024-11-17
nobutomurata
0
980
Amazon Personalizeのレコメンドシステム構築、実際何するの?〜大体10分で具体的なイメージをつかむ〜
kniino
1
100
Lexical Analysis
shigashiyama
1
150
Application Development WG Intro at AppDeveloperCon
salaboy
0
180
地理情報データをデータベースに格納しよう~ GPUを活用した爆速データベース PG-Stromの紹介 ~
sakaik
1
150
複雑なState管理からの脱却
sansantech
PRO
1
130
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
280
元旅行会社の情シス部員が教えるおすすめなre:Inventへの行き方 / What is the most efficient way to re:Invent
naospon
2
330
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.8k
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
180
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
470
Featured
See All Featured
Code Review Best Practice
trishagee
64
17k
Code Reviewing Like a Champion
maltzj
520
39k
Automating Front-end Workflow
addyosmani
1366
200k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Statistics for Hackers
jakevdp
796
220k
Designing Experiences People Love
moore
138
23k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
4 Signs Your Business is Dying
shpigford
180
21k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Transcript
PostgreSQL11 ઃఆύϥϝʔλʔ ղମ৽ॻ ΦʔϓϯιʔεΧϯϑΝϨϯε 2019 Osaka
͡Ίʹ ຊηογϣϯͰɺ࠷৽όʔδϣϯͰ͋Δ PostgreSQL11ͷίϯϑΟάϑΝΠϧͷղઆΛߦ͍·͢ɻ ύϥϝʔλʔશ෦Ͱ250߲ଘࡏ͢ΔͨΊɺ ͬͯΒ͍͍ͨ115߲Λରͱ͍ͯ͠·͢ɻ
͡Ίʹ ຊηογϣϯ࡞ʹ͋ͨΓɺҎԼͷॻ੶Λࢀߟʹ͍ͯ͠·͢ɻ
ΞδΣϯμ ࣗݾհ PostgreSQLͷ෦ߏʹ͍ͭͯ ଓઃఆɾػೳઃఆ ϨϓϦέʔγϣϯ ࢹؔ νϡʔχϯά ऴΘΓʹ
ࣗݾհ ໊લ: ࣉ େً(ͯΒ͏ͪ ͍͖ͨ) ॴଐ: ຊPostgreSQLϢʔβձ ؔࢧ෦ Twitter/GitHub: @ester41
ࣄ: อकɾઃܭɾ։ൃͳͲSE࡞ۀશൠ
͜ͷηογϣϯͰɺPostgreSQLͷઃఆϑΝΠϧͰ͋Δɺ postgresql.confͷઃఆʹ͍ͭͯղઆ͠·͢ɻ PostgreSQLͷ෦ߏ (σʔλϕʔεߏ) postgresϓϩηε σʔλϕʔεΫϥελ ઃఆϑΝΠϧ ɾpostgresql.conf ɾpg_hba.conf ͳͲ
σʔλϕʔε εΩʔϚ Ϣʔβʔ ɾpostgres ͳͲ ςʔϒϧ ͳͲ
PostgreSQLͷ෦ߏ (ϓϩηεߏ) postgres (όοΫΤϯυϓϩηε) postgres (ϥΠλʔ) postgres (νΣοΫϙΠϯλʔ) postgres (౷ܭใίϨΫλʔ)
postgres (ࣗಈόΩϡʔϜϥϯνϟʔ) postgres (ࣗಈόΩϡʔϜϫʔΧʔ) postgres (WALϥΠλʔ) postgres (Ϛελʔαʔόʔϓϩηε) WALόοϑΝʔ WALϑΝΠϧ σʔλϑΝΠϧ ڞ༗όοϑΝʔ ౷ܭใ ىಈ࣌ʹϓϩηεΛϑΥʔΫ ଓཁٻ͝ͱʹϓϩηεΛϑΥʔΫ ࣗಈόΩϡʔϜΛܖػʹϓϩηεΛϑΥʔΫ
PostgreSQLͷ෦ߏ (ϝϞϦʔߏ) ϓϩηεϝϞϦʔ όοΫΤϯυϓϩηε Ұ࣌όοϑΝʔ (temp_buffers) ࡞ۀϝϞϦʔ (work_mem) ϝϯςφϯε༻࡞ۀϝϞϦʔ (maintenance_work_mem)
ڞ༗ϝϞϦʔ WALόοϑΝʔ (wal_buffers) ڞ༗όοϑΝʔ (shard_buffers) σʔλϑΝΠϧ WALϑΝΠϧ WALϥΠλʔϓϩηε όΩϡʔϜϫʔΧʔϓϩηε ۭ͖ྖҬϚοϓ ՄࢹੑϚοϓ ϥΠλʔ/ νΣοΫϙΠϯλʔϓϩηε
postgresql.confʹ͍ͭͯ(1/3) postgresql.confɺPostgreSQLͷઃఆϑΝΠϧͱͳΓ·͢ɻ postgresql.confͱpostgresql.auto.confͷ̎छྨ͕ଘࡏ͠·͢ɻ ͡Ίʹpostgresql.conf͕ಡΈࠐ·Εͨޙʹ postgresql.auto.conf͕ಡΈࠐ·Ε·͢ɻ postgresql.auto.confɺϑΝΠϧࣗମΛ৮Δ͜ͱग़དྷ·ͤΜɻ ALTER SYSTEMจͰมߋͨ͠߹ʹॻ͖ࠐΈ͞Ε·͢ɻ ྫ) ALTER
SYSTEM SET wal_level = hot_standby; ·ͨɺSETจͰҰ࣌มߋͰ͖Δύϥϝʔλʔଘࡏ͠·͢ɻ ྫ) SET enable_seqscan = off;
postgresql.confʹ͍ͭͯ(2/3) ઃఆɺҎԼͷSQLͰ֬ೝ͢Δ͜ͱ͕ՄೳͰ͢ɻ SELECT name, setting, context FROM pg_settings; ग़ྗҎԼͷ௨ΓͱͳΓ·͢ɻ name
ύϥϝʔλʔ໊ setting ݱࡏͷઃఆ content ύϥϝʔλʔ͕༗ޮͱͳΔλΠϛϯά ɾinternal: ઃఆΛมߋ͢Δ͜ͱͰ͖·ͤΜɻ ɾpostmaster: αʔόʔىಈ࣌ͷΈมߋ͕ՄೳͰ͢ɻ ɾsighup: αʔόʔϦϩʔυͰมߋ͕ՄೳͰ͢ɻ ɾsuperuser: εʔύʔϢʔβʔͷΈมߋͰ͖ଈ࣌ө͞Ε·͢ɻ ɾuser: શϢʔβʔͰมߋͰ͖ଈ࣌ө͞Ε·͢ɻ
postgresql.confʹ͍ͭͯ(3/3) postgresql.confͷҰ෦ͷ ɺPGTune ( https://pgtune.leopard.in.ua/ ) ɹ Ͱαʔόʔڥʹ߹Θͤ ͨࢀߟΛੜ͢Δ͜ͱ ͕ग़དྷ·͢ɻ
ଓઃఆɾػೳઃఆ(1/22) ଓʹ༻͢ΔઃఆɺSQLͷղੳ࣌ʹ༻͢ΔεΩϟϯઃఆͳͲΛղઆ ͠·͢ɻ ೝূใʹ͍ͭͯOSଞαʔόʔ͕བྷΉઃఆ͕ଟଘࡏ͢ΔͨΊղઆ ߦ͍·ͤΜɻ ެࣜυΩϡϝϯτΛ͝ࢀর͍ͩ͘͞ɻ https://www.postgresql.jp/document/current/html/runtime-config- connection.html
ଓઃఆɾػೳઃఆ(2/22) ύϥϝʔλʔ໊ listen_addresses ө(ର) ཁϦελʔτ σϑΥϧτ localhost ղઆ ଓΛڐՄ͢ΔTCP/IPΞυϨεΛࢦఆ͠·͢ɻ “*”ͯ͢ͷଓΛڐՄ͠·͢ɻ
͜͜Ͱͯ͢ͷଓΛڐՄ͠ɺผઃఆϑΝΠϧͷ pg_hba.confϑΝΠϧͰࡉ͔͘ઃఆ͢Δ͜ͱΛਪ͠ ·͢ɻ ਪ *
ଓઃఆɾػೳઃఆ(3/22) ύϥϝʔλʔ໊ port ө(ର) ཁϦελʔτ σϑΥϧτ 5432 ղઆ ΫϥΠΞϯτ͔Βαʔόʔʹଓ͢Δࡍʹ༻͢Δ ϙʔτ൪߸Ͱ͢ɻ
σʔλϕʔεΫϥελͰϙʔτ൪߸͕ڞ༗͞Ε·͢ɻ 1ͭͷαʔόʔʹෳͷσʔλϕʔεΫϥελΛ࡞͢ Δࡍɺมߋ͍ͯͩ͘͠͞ɻ ਪ 5432(มߋͳ͠)
ଓઃఆɾػೳઃఆ(4/22) ύϥϝʔλʔ໊ max_connections ө(ର) ཁϦελʔτ σϑΥϧτ 100 ղઆ αʔόʔʹଓͰ͖Δ࠷େηογϣϯͰ͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ
ͳ͓ɺҰൠϢʔβʔ͕ଓͰ͖Δɺޙड़ͷ superuser_reserved_connectionsΛࠩ͠Ҿ͍ͨͱͳ Γ·͢ɻ ਪ 100(มߋͳ͠)
ଓઃఆɾػೳઃఆ(5/22) ύϥϝʔλʔ໊ superuser_reserved_connections ө(ର) ཁϦελʔτ σϑΥϧτ 3 ղઆ αʔόʔʹଓͰ͖ΔεʔύʔϢʔβʔͷ࠷େηογϣ ϯͰ͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 3(มߋͳ͠)
ଓઃఆɾػೳઃఆ(6/22) ύϥϝʔλʔ໊ max_prepared_transactions ө(ର) ཁϦελʔτ σϑΥϧτ 0 ղઆ ೋίϛοτ༻τϥϯβΫγϣϯͷ࠷େͰ͢ɻ “0”ͷ߹ೋίϛοτػೳ͕ແޮԽ͞Ε·͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 0(มߋͳ͠)
ଓઃఆɾػೳઃఆ(7/22) ύϥϝʔλʔ໊ db_user_namespace ө(ର) ཁϦϩʔυ σϑΥϧτ off ղઆ PostgreSQLͷϢʔβʔใɺσʔλϕʔεΫϥελ Ͱڞ༗͞Ε͍ͯ·͕͢ɺ͜ͷύϥʔϝʔλʔΛonʹ͢
Δ͜ͱͰɺσʔλϕʔε͝ͱʹϢʔβʔใΛઃఆ͢Δ ͜ͱ͕ՄೳͱͳΓ·͢ɻ Ϣʔβʔͷ࡞ɺusername@dbnameͷΑ͏ʹͳΓ ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ off(มߋͳ͠)
ଓઃఆɾػೳઃఆ(8/22) ύϥϝʔλʔ໊ default_transaction_isolation ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ read committed ղઆ SQLτϥϯβΫγϣϯϨϕϧΛઃఆ͠·͢ɻ
ҎԼͷઃఆ͕ଘࡏ͠·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ɾread uncommitted ɾread committed ɾrepeatable read ɾserializable ਪ read committed(มߋͳ͠)
ଓઃఆɾػೳઃఆ(9/22) ύϥϝʔλʔ໊ timezone ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ GMT ղઆ ࣌ؒදࣔ࣌ɺλΠϜελϯϓղऍ࣌ͷλΠϜκʔϯΛઃ ఆ͠·͢ɻ
initdbͰࢦఆͨ͠ϩέʔϧʹΑΓมΘΓ·͢ɻ ϩέʔϧ͕“C”ͷ߹ɺ“GMT”ͱͳΓ·͢ɻ ਪ Japan
ଓઃఆɾػೳઃఆ(10/22) ύϥϝʔλʔ໊ lc_messages ө(ର) ଈ࣌ө(εʔύʔϢʔβʔ) σϑΥϧτ C ղઆ දࣔ͢ΔϝοηʔδͷݴޠΛઃఆ͠·͢ɻ ༻Ͱ͖ΔݴޠγεςϜʹґଘ͠·͢ɻ
initdbͰࢦఆͨ͠ϩέʔϧʹΑΓมΘΓ·͢ɻ ϩέʔϧ͕“C”ͷ߹ɺ“C”ͱͳΓ·͢ɻ (“C”ͱσϑΥϧτઃఆͱ͍͏ҙຯͰ͢ɻͭ·Γӳޠͱͳ Γ·͢ɻ) ਪ ja_JP.UTF-8
ଓઃఆɾػೳઃఆ(11/22) ύϥϝʔλʔ໊ lc_monetary, lc_numeric, lc_time ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ C ղઆ
௨աॻࣜɺͷॻࣜɺ࣌ॻࣜΛઃఆ͠·͢ɻ ༻Ͱ͖ΔݴޠγεςϜʹґଘ͠·͢ɻ initdbͰࢦఆͨ͠ϩέʔϧʹΑΓมΘΓ·͢ɻ ϩέʔϧ͕“C”ͷ߹ɺ“C”ͱͳΓ·͢ɻ ਪ ja_JP.UTF-8
ύϥϝʔλʔ໊ datestyle ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ iso, mdy ղઆ ࣌ࠁͷॻࣜ(ग़ྗॻࣜ)ͱɺᐆດͳೖྗͷղऍن ଇ(/݄/ͷॱংͷೖग़ྗࢦఆ)Λઃఆ͠·͢ɻ
ਪ iso, ymd ଓઃఆɾػೳઃఆ(12/22)
ଓઃఆɾػೳઃఆ(13/22) ύϥϝʔλʔ໊ archive_mode ө(ର) ཁϦελʔτ σϑΥϧτ off ղઆ WALΞʔΧΠϏϯάػೳͷ༗ޮແޮΛઃఆ͠·͢ɻ archive_command͕ઃఆ͞Ε͓ͯΓɺwal_level͕minimalҎ্Ͱ͋
Δ͜ͱ͕ඞਢͱͳΓ·͢ɻ ҎԼͷઃఆ͕ଘࡏ͠·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ɾoff: ػೳΛແޮԽ͠·͢ɻ ɾon: ௨ৗӡ༻࣌(ΞʔΧΠϒϦΧόϦ͓Αͼ ελϯόΠϞʔυҎ֎)ͷΈػೳΛ༗ޮԽ͠·͢ɻ ɾalways: ͯ͢ͷঢ়ଶͰػೳΛ༗ޮԽ͠·͢ɻ ਪ off(มߋͳ͠)
ଓઃఆɾػೳઃఆ(14/22) ύϥϝʔλʔ໊ archive_command ө(ର) ཁϦϩʔυ σϑΥϧτ ’’(ۭന) ղઆ WALϑΝΠϧηάϝϯτΛΞʔΧΠϒ͢ΔγΣϧίϚ ϯυΛࢦఆ͠·͢ɻ
ίϚϯυதͷ%p֨ೲ͞ΕΔϑΝΠϧͷύεͰஔ͖ ͑ΒΕɺ%fϑΝΠϧ໊Ͱஔ͖͑ΒΕ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ ’’(มߋͳ͠)
ଓઃఆɾػೳઃఆ(15/22) ύϥϝʔλʔ໊ archive_timeout ө(ର) ཁϦϩʔυ σϑΥϧτ 0 ղઆ WALϑΝΠϧηάϝϯτΛΞʔΧΠϒ͢Δ·Ͱͷ࣌ؒ Λࢦఆ͠·͢ɻ
ඵͰࢦఆ͠ɺ0ͷ߹ແޮԽ͞Ε·͢ɻ Λখ͗͘͢͞͠ΔͱΞʔΧΠϒϑΝΠϧͷංେԽʹ ܨ͕ΔͨΊɺ60sҎ্ͷΛࢦఆ͢ΔΑ͏ʹͯͩ͘͠͞ ͍ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 0(มߋͳ͠)
ଓઃఆɾػೳઃఆ(16/22) ύϥϝʔλʔ໊ enable_material ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ on ղઆ ΦϓςΟϚΠβʔ͕༻͢ΔϚςϦΞϥΠζϊʔυͷ ༗ޮແޮΛઃఆ͠·͢ɻ
※ϚςϦΞϧɺԼҐϊʔυͷใΛϑΝΠϧʹ ॻ͖ग़্ͯ͠ҐϊʔυใΛ͢ࡍʹ ༻͞Ε·͢ɻ ਪ on(มߋͳ͠)
ଓઃఆɾػೳઃఆ(17/22) ύϥϝʔλʔ໊ enable_bitmapscan, enable_gathermerge, enable_hashagg, enable_hashjoin, enable_indexscan, enable_indexonlyscan ө(ର) ଈ࣌ө(શϢʔβʔ)
σϑΥϧτ on ղઆ ΦϓςΟϚΠβʔ͕༻͢Δϓϥϯϝιουͷ༗ޮແ ޮΛઃఆ͠·͢ɻ ॱʹϏοτϚοϓεΩϟϯܭըɺΪϟβʔϚʔδܭ ըɺϋογϡूܭըɺϋογϡ݁߹ܭըɺΠϯσο ΫεࠪܭըɺΠϯσοΫεΦϯϦʔεΩϟϯܭըͱ ͳΓ·͢ɻ ਪ on(มߋͳ͠)
ଓઃఆɾػೳઃఆ(18/22) ύϥϝʔλʔ໊ enable_mergejoin, enable_nestloop, enable_seqscan, enable_tidscan, enable_sort ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ
on ղઆ ΦϓςΟϚΠβʔ͕༻͢Δϓϥϯϝιουͷ༗ޮແ ޮΛઃఆ͠·͢ɻ ॱʹϚʔδ݁߹ܭըɺωεςουϧʔϓܭըɺγʔέ ϯγϟϧࠪܭըɺϋογϡ݁߹ܭըɺ໌ࣔతͳιʔ τɺTID ࠪܭըɺ໌ࣔతͳιʔτͱͳΓ·͢ɻ γʔέϯγϟϧࠪܭը͓Αͼ໌ࣔతͳιʔτશ ʹແޮԽ͢Δ͜ͱͰ͖·ͤΜɻ ਪ on(มߋͳ͠)
ଓઃఆɾػೳઃఆ(19/22) ύϥϝʔλʔ໊ enable_parallel_append ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ on ղઆ ΦϓςΟϚΠβʔ͕༻͢Δϓϥϯϝιουͷ༗ޮແ ޮΛઃఆ͠·͢ɻ
PostgreSQL11ͰՃ͞Εͨ৽ύϥϝʔλʔͰ͢ɻ ϋογϡύʔςΟγϣχϯά͞Εͨςʔϒϧʹରͯ͠༗ ޮͱͳΔɺύϥϨϧूܭըͱͳΓ·͢ɻ ਪ on(มߋͳ͠)
ଓઃఆɾػೳઃఆ(20/22) ύϥϝʔλʔ໊ enable_parallel_hash, enable_partition_pruning ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ on ղઆ ΦϓςΟϚΠβʔ͕༻͢Δϓϥϯϝιουͷ༗ޮແ
ޮΛઃఆ͠·͢ɻ PostgreSQL11ͰՃ͞Εͨ৽ύϥϝʔλʔͰ͢ɻ ॱʹύϥϨϧϋογϡ݁߹ܭըɺύϥϨϧύʔςΟγ ϣϯܭըͱͳΓ·͢ɻ ύϥϨϧύʔςΟγϣϯܭըɺϓϥϯχϯάͰฒྻ ॲཧͰύʔςΟγϣϯςʔϒϧʹରͯ͠ΞΫηε͢Δඞ ཁ͕͋Δ͔֬ೝͰ͖ΔػೳͰ͢ɻ ਪ on(มߋͳ͠)
ଓઃఆɾػೳઃఆ(21/22) ύϥϝʔλʔ໊ enable_partitionwise_join, enable_partitionwise_aggregate ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ off ղઆ ΦϓςΟϚΠβʔ͕༻͢Δϓϥϯϝιουͷ༗ޮແ
ޮΛઃఆ͠·͢ɻ PostgreSQL11ͰՃ͞Εͨ৽ύϥϝʔλʔͰ͢ɻ ॱʹύʔςΟγϣϯಉ࢜ͷ݁߹ɺύʔςΟγϣϯಉ࢜ ͷू߹ͱͳΓ·͢ɻ ϓϥϯχϯάͰCPU͓ΑͼϝϞϦΛଟ͘༻͢Δͨ ΊɺແޮԽ͞Ε͍ͯ·͢ɻ ਪ off(มߋͳ͠)
ଓઃఆɾػೳઃఆ(22/22) ύϥϝʔλʔ໊ jit ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ off ղઆ PostgreSQL11ͰՃ͞Εͨ৽ػೳͰ͋ΔɺJIT(Just In
Time)ίϯύΠϧΛ༗ޮԽ͠·͢ɻ PostgreSQL11ͰՃ͞Εͨ৽ύϥϝʔλʔͰ͢ɻ WHERE۟ूܭͳͲͰ༻͞Ε·͕͢ɺ·ͩ҆ఆԽ͠ ͍ͯͳ͍Α͏ͰɺσϑΥϧτͰແޮԽ͞Ε͍ͯ·͢ɻ ਪ off(มߋͳ͠)
ϨϓϦέʔγϣϯ(1/17) PostgreSQLͷϨϓϦέʔγϣϯͷઃఆʹ͍ͭͯղઆ͠·͢ɻ PostgreSQLɺετϦʔϛϯάϨϓϦέʔγϣϯͱϩδΧϧϨϓϦέʔγϣϯͷ2ͭΛ ఏڙ͍ͯ͠·͢ɻ ετϦʔϛϯάϨϓϦέʔγϣϯɺWAL(Write Ahead Logging)Λwalsenderϓϩηε ͕εϨʔϒαʔόʔ࿈ܞ͠ɺεϨʔϒαʔόʔͷwalreceiver͕ड৴ͯ͠ϨϓϦέʔ γϣϯΛఏڙ͠·͢ɻ ϩδΧϧϨϓϦέʔγϣϯɺϓϥΠϚϦʔαʔόʔ͕WALΛϩδΧϧσίʔσΟϯά
ͱݺΕΔػೳͰϩδΧϧϨϓϦέʔγϣϯͷϓϩτίϧʹม͠ɺwalsenderϓϩη ε͕εϨʔϒαʔόʔ࿈ܞ͠·͢ɻεϨʔϒαʔόʔɺόοΫάϥϯυϫʔΧʔ ͕ड৴ͯ͠ϨϓϦέʔγϣϯΛఏڙ͠·͢ɻ ৄ͘͠ɺϨϓϦέʔγϣϯͷղઆεϥΠυΛ͝ࢀর͍ͩ͘͞ɻ https://www.slideshare.net/masahikosawada98/postgresql-86891271
ύϥϝʔλʔ໊ wal_level ө(ର) ཁϦελʔτ σϑΥϧτ replica ղઆ WALʹอ࣋͢ΔใྔΛઃఆ͠·͢ɻ ҎԼͷઃఆ͕ଘࡏ͠·͢ɻ ͳ͓ɺ্ҐϨϕϧԼҐϨϕϧͷใΛαϙʔτ͠·͢ɻ
ɾminimal: Ϋϥογϡ࣌ଈ࣌ఀࢭ͔Βͷ෮ؼʹ ඞཁͳใͷΈอ࣋͠·͢ɻ ɾreplica: WALΞʔΧΠϒ͓ΑͼετϦʔϛϯά ϨϓϦέʔγϣϯʹඞཁͳใΛอ࣋͠·͢ɻ ɾlogical: ϩδΧϧσίʔσΟϯάʹඞཁͳใΛอ࣋͠·͢ɻ ਪ logical ϨϓϦέʔγϣϯ(2/17)
ύϥϝʔλʔ໊ max_wal_senders ө(ର) ཁϦελʔτ σϑΥϧτ 10 ղઆ εϨʔϒαʔόʔ͔Βͷಉ࣌ଓ࠷େΛࢦఆ͠·͢ɻ 0ͷ߹ϨϓϦέʔγϣϯ͕ແޮԽ͞Ε·͢ɻ ૯ଓʹΧϯτ͞ΕΔͨΊɺmax_connectionsͷ
Ҏ্ʹઃఆ͢Δ͜ͱͰ͖·ͤΜɻ ϚελʔʹઃఆΛߦ͍·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ (ετϦʔϛϯάϨϓϦέʔγϣϯͷεϨʔϒ + ϩδΧϧϨϓϦέʔγϣϯͷαϒεΫϦϓγϣϯ * 2) + 1 ϨϓϦέʔγϣϯ(3/17)
ύϥϝʔλʔ໊ max_replication_slots ө(ର) ཁϦελʔτ σϑΥϧτ 10 ղઆ αʔόʔ͕࡞Ͱ͖ΔϨϓϦέʔγϣϯεϩοτͷ࠷େ Λࢦఆ͠·͢ɻ ϚελʔɾεϨʔϒڞʹઃఆΛߦ͍·͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ※ϨϓϦέʔγϣϯεϩοτɺ εϨʔϒͷঢ়ଶΛϚελʔ͕ཧ͢ΔͨΊͷػೳͰ͢ɻ ਪ ϩδΧϧϨϓϦέʔγϣϯͷαϒεΫϦϓγϣϯ * 2 + ετϦʔϛϯάϨϓϦέʔγϣϯͰ࡞͢ΔϨϓϦέʔγϣϯεϩοτͷ ϨϓϦέʔγϣϯ(4/17)
ύϥϝʔλʔ໊ track_commit_timestamp ө(ର) ཁϦελʔτ σϑΥϧτ off ղઆ τϥϯβΫγϣϯͷίϛοτλΠϜΛه͠·͢ɻ ϚελʔɾεϨʔϒڞʹઃఆΛߦ͍·͢ɻ ਪ
on ϨϓϦέʔγϣϯ(5/17)
ύϥϝʔλʔ໊ wal_sender_timeout ө(ର) ཁϦϩʔυ σϑΥϧτ 60s ղઆ ࢦఆͨ࣌ؒ͠ΑΓ͘εϨʔϒ͔ΒͷԠ͕ͳ͍߹ ϨϓϦέʔγϣϯଓΛఀࢭ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
0ͷ߹λΠϜΞτػೳΛແޮԽ͠·͢ɻ ϚελʔʹઃఆΛߦ͍·͢ɻ ڥʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 60s(มߋͳ͠) ϨϓϦέʔγϣϯ(6/17)
ύϥϝʔλʔ໊ synchronous_standby_names ө(ର) ཁϦϩʔυ σϑΥϧτ ’’(ۭന) ղઆ ಉظ͢ΔεϨʔϒ໊ΛΧϯϚ۠ΓͰઃఆ͠·͢ɻ “*”Λઃఆ͢Δͱɺͯ͢ͷεϨʔϒ͕ରͱͳΓ·͢ɻ ਖ਼֬ͳॻࣜʹ͍ͭͯɺެࣜυΩϡϝϯτΛ͝ࢀরͩ͘
͍͞ɻ https://www.postgresql.jp/document/current/html/runtime- config-replication.html ϚελʔʹઃఆΛߦ͍·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ ’’(ۭന) ϨϓϦέʔγϣϯ(7/17)
ύϥϝʔλʔ໊ vacuum_defer_cleanup_age ө(ର) ཁϦϩʔυ σϑΥϧτ 0 ղઆ VACUUMHOTͰɺෆཁߦͷআԆΛߦ͏τϥϯβΫ γϣϯΛࢦఆ͠·͢ɻ 0ଈ࠲ʹআ͞Ε·͢ɻ
εϨʔϒͰίϯϑϦΫτ͕සൟʹൃੜ͢Δ߹ɺύϥ ϝʔλʔͷௐΛߦͳ͍ͬͯͩ͘͞ɻ ϚελʔʹઃఆΛߦ͍·͢ɻ ڥʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 0(มߋͳ͠) ϨϓϦέʔγϣϯ(8/17)
ύϥϝʔλʔ໊ hot_standby ө(ର) ཁϦελʔτ σϑΥϧτ on ղઆ εϨʔϒʹରͯ͠ͷ͍߹ΘͤΛ༗ޮԽ͠·͢ɻ εϨʔϒʹઃఆΛߦ͍·͢ɻ ਪ
on(มߋͳ͠) ϨϓϦέʔγϣϯ(9/17)
ύϥϝʔλʔ໊ max_standby_archive_delay ө(ର) ཁϦϩʔυ σϑΥϧτ 30s ղઆ ϗοτελϯόΠதɺελϯόΠ͕ΞʔΧΠϒϑΝΠϧΛ దԠ͍ͯ͠Δ࠷தʹൃੜͨ͠ίϯϑϦΫτͷͪ࣌ؒΛ ઃఆ͠·͢ɻ
ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ “-1”ͷ࣌ɺ͍߹Θ͕ͤऴྃ͢Δ·ͰదԠ͕ఀࢭ͠· ͢ɻ εϨʔϒʹઃఆΛߦ͍·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 30s(มߋͳ͠) ϨϓϦέʔγϣϯ(10/17)
ύϥϝʔλʔ໊ max_standby_streaming_delay ө(ର) ཁϦϩʔυ σϑΥϧτ 30s ղઆ ϗοτελϯόΠதɺελϯόΠ͕ϓϥΠϚϦʔ͔Βड ৴ͨ͠WALΛదԠ͍ͯ͠Δ࠷தʹൃੜͨ͠ίϯϑϦΫτ ͷͪ࣌ؒΛઃఆ͠·͢ɻ
ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ “-1”ͷ࣌ɺ͍߹Θ͕ͤऴྃ͢Δ·ͰదԠ͕ఀࢭ͠· ͢ɻ εϨʔϒʹઃఆΛߦ͍·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 30s(มߋͳ͠) ϨϓϦέʔγϣϯ(11/17)
ύϥϝʔλʔ໊ wal_receiver_status_interval ө(ର) ཁϦϩʔυ σϑΥϧτ 10s ղઆ ελϯόΠ͕WALͷड৴ਐḿঢ়ଶΛϓϥΠϚϦʔʹૹ৴ ͢Δִؒͷ࠷খ࣌ؒΛઃఆ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
wal_sender_timeoutΑΓখ͍͞Λઃఆ͍ͯͩ͘͠͞ɻ εϨʔϒʹઃఆΛߦ͍·͢ɻ ڥʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 10s(มߋͳ͠) ϨϓϦέʔγϣϯ(12/17)
ύϥϝʔλʔ໊ hot_standby_feedback ө(ର) ཁϦϩʔυ σϑΥϧτ off ղઆ εϨʔϒ͕ݱࡏॲཧ͍ͯ͠Δ͍߹Θͤʹ͍ͭͯɺϓϥ ΠϚϦʔʹϑΟʔυόοΫΛૹ৴͢ΔػೳΛ༗ޮԽ͠· ͢ɻ
ϨϓϦέʔγϣϯεϩοτΛ༻͍ͯ͠Δ߹มߋ͕ ඞਢͱͳΓ·͢ɻ εϨʔϒʹઃఆΛߦ͍·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ on ϨϓϦέʔγϣϯ(13/17)
ύϥϝʔλʔ໊ wal_receiver_timeout ө(ର) ཁϦϩʔυ σϑΥϧτ 60s ղઆ ࢦఆͨ࣌ؒ͠ΑΓ͘ϓϥΠϚϦʔ͔ΒͷԠ͕ͳ͍ ߹ϨϓϦέʔγϣϯଓΛఀࢭ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
0ͷ߹λΠϜΞτػೳΛແޮԽ͠·͢ɻ εϨʔϒʹઃఆΛߦ͍·͢ɻ ڥʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 60s(มߋͳ͠) ϨϓϦέʔγϣϯ(14/17)
ύϥϝʔλʔ໊ wal_retrieve_retry_interval ө(ର) ཁϦϩʔυ σϑΥϧτ 5s ղઆ ࢦఆͨ࣌ؒ͠ΑΓ͘Ϛελʔ͔ΒͷԠ͕ͳ͍߹ ϨϓϦέʔγϣϯଓΛఀࢭ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
εϨʔϒʹઃఆΛߦ͍·͢ɻ ڥʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 5s(มߋͳ͠) ϨϓϦέʔγϣϯ(15/17)
ύϥϝʔλʔ໊ max_logical_replication_workers ө(ର) ཁϦελʔτ σϑΥϧτ 4 ղઆ ϩδΧϧϨϓϦέʔγϣϯͷϫʔΧʔ࠷େΛࢦఆ͠· ͢ɻ దԠϫʔΧʔͱςʔϒϧಉظϫʔΧʔͷ྆ํؚ͕·Ε·
͢ɻ max_worker_processesͷΛڞ༗͠·͢ɻ Ϛελʔ(ύϒϦογϟʔ)ʹઃఆΛߦ͍·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 2(มߋͳ͠) ϨϓϦέʔγϣϯ(16/17)
ύϥϝʔλʔ໊ max_sync_workers_per_subscription ө(ର) ཁϦϩʔυ σϑΥϧτ 2 ղઆ αϒεΫϦϓγϣϯ͝ͱͷಉظϫʔΧʔͷ࠷େΛࢦఆ ͠·͢ɻ 1ςʔϒϧͷฒྻ1ͰݻఆԽ͞Ε͍ͯΔͨΊɺΛม
ߋ͢Δ͜ͱͰෳςʔϒϧʹର͢Δಉظॲཧͷฒྻ ্͕Γ·͢ɻ Ϛελʔ(ύϒϦογϟʔ)ʹઃఆΛߦ͍·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 2(มߋͳ͠) ϨϓϦέʔγϣϯ(17/17)
ࢹؔ(1/18) PostgreSQLͷࢹ(ϩά)ؔͷઃఆʹ͍ͭͯղઆ͠·͢ɻ %Τεέʔϓ͕ଟଘࡏ͠·͕͢ɺ͜͜ͰղઆΛߦ͍·ͤΜɻ ৄ͘͠ɺެࣜυΩϡϝϯτΛࢀর͍ͯͩ͘͠͞ɻ https://www.postgresql.jp/document/current/html/runtime-config- logging.html
ύϥϝʔλʔ໊ log_destination ө(ର) ཁϦϩʔυ σϑΥϧτ stderr ղઆ αʔόʔͷϩάग़ྗઌΛઃఆ͠·͢ɻ ड͚͚Δɺ“stderr”ɺ“csvlog”ɺ “syslog”ɺ“eventlog”ͱͳΓ·͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ stderr(มߋͳ͠) ࢹؔ(2/18)
ύϥϝʔλʔ໊ logging_collector ө(ର) ཁϦελʔτ σϑΥϧτ off ղઆ ඪ४Τϥʔ·ͨCSVॻࣜͷϩάग़ྗʹૹΒΕΔϝοη ʔδΛऔΓग़͠ɺϩάϑΝΠϧʹϦμΠϨΫτ͠·͢ɻ ͜ͷػೳ͕༗ޮͰͳ͍ͱɺϩάϑΝΠϧ࡞͞Ε·ͤ
Μɻ ਪ on ࢹؔ(3/18)
ύϥϝʔλʔ໊ log_directory ө(ର) ཁϦϩʔυ σϑΥϧτ log ղઆ αʔόʔͷϩάϑΝΠϧग़ྗઌΛઃఆ͠·͢ɻ σϑΥϧτ૬ରύεͱͳ͓ͬͯΓɺઈରύεʹม ͢Δͱ“$PGDATA/log”ͱͳΓ·͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ /var/log/pgsql ࢹؔ(4/18)
ύϥϝʔλʔ໊ log_filename ө(ର) ཁϦϩʔυ σϑΥϧτ postgresql-%Y-%m-%d_%H%M%S.log ղઆ ϩάϑΝΠϧͷϑΝΠϧ໊Λઃఆ͠·͢ɻ CSVग़ྗͷ߹ɺλΠϜελϯϓ͖ͷϩάϑΝΠϧ ໊ʹ.csvΛ༩ͨ͠ϑΝΠϧ໊͕࡞͞Ε·͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ postgresql%Y%m%d.log ࢹؔ(5/18)
ύϥϝʔλʔ໊ log_file_mode ө(ର) ཁϦϩʔυ σϑΥϧτ 0600 ղઆ ϩάϑΝΠϧͷύʔϛογϣϯΛઃఆ͠·͢ɻ Windowsͷ߹ແࢹ͞Ε·͢ɻ chmod͓ΑͼumaskγεςϜίʔϧͷϞʔυͰهड़
͠·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 0600(มߋͳ͠) ࢹؔ(6/18)
ύϥϝʔλʔ໊ log_rotation_age ө(ର) ཁϦϩʔυ σϑΥϧτ 1d ղઆ ϩάϑΝΠϧͷ࠷େण໋Λઃఆ͠·͢ɻ ࢦఆ͕࣌ؒܦա͢Δͱɺ৽͍͠ϑΝΠϧʹϩά͕ੜ͞ Ε·͢ɻ
“0”ͷ࣌ɺ࣌ؒʹΑΔϑΝΠϧͷੜ͕ແޮͱͳΓ· ͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 1d(มߋͳ͠) ࢹؔ(7/18)
ύϥϝʔλʔ໊ log_rotation_size ө(ର) ཁϦϩʔυ σϑΥϧτ 10MB ղઆ ϩάϑΝΠϧͷ࠷େ༰ྔΛઃఆ͠·͢ɻ ࢦఆ༰ྔΛΦʔόʔ͢Δͱɺ৽͍͠ϑΝΠϧʹϩά͕ੜ ͞Ε·͢ɻ
“0”ͷ࣌ɺ༰ྔʹΑΔϑΝΠϧͷੜ͕ແޮͱͳΓ· ͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 0 ࢹؔ(8/18)
ύϥϝʔλʔ໊ log_truncate_on_rotation ө(ର) ཁϦϩʔυ σϑΥϧτ off ղઆ ϩάϑΝΠϧͷ্ॻ͖Λઃఆ͠·͢ɻ ϩάϑΝΠϧͷϩʔςʔγϣϯ࣌ʹɺಉ͡ϑΝΠϧ໊͕ طʹଘࡏ͍ͯ͠Δͱ্ॻ͖͠·͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ on ࢹؔ(9/18)
ύϥϝʔλʔ໊ event_source ө(ର) ཁϦελʔτ σϑΥϧτ PostgreSQL ղઆ Πϕϯτϩάͷग़ྗ࣌ʹ༻͞ΕΔϓϩάϥϜ໊Λઃ ఆ͠·͢ɻ WindowsͷΈ༗ޮͱͳΓ·͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ PostgreSQL(มߋͳ͠) ࢹؔ(10/18)
ύϥϝʔλʔ໊ client_min_messages ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ notice ղઆ ΫϥΠΞϯτʹૹ৴͢Δϝοηʔδ֊Λઃఆ͠·͢ɻ “DEBUG5”ɺ“DEBUG4”ɺ“DEBUG3”ɺ“DEBUG2”ɺ “DEBUG1”ɺ“LOG”ɺ“NOTICE”ɺ“WARNING”ɺ
“ERROR”ɺ“FATAL”ɺ“PANIC”͔Βબ͠·͢ɻ ԼҐͷ֊ɺ্Ґͷ֊ͷϝοηʔδΛؚΈ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ notice(มߋͳ͠) ࢹؔ(11/18)
ύϥϝʔλʔ໊ log_min_messages ө(ର) ଈ࣌ө(εʔύʔϢʔβʔ) σϑΥϧτ warning ղઆ ϩάʹग़ྗ͢Δϝοηʔδ֊Λઃఆ͠·͢ɻ “DEBUG5”ɺ“DEBUG4”ɺ“DEBUG3”ɺ“DEBUG2”ɺ “DEBUG1”ɺ“LOG”ɺ“NOTICE”ɺ“WARNING”ɺ
“ERROR”ɺ“FATAL”ɺ“PANIC”͔Βબ͠·͢ɻ ԼҐͷ֊ɺ্Ґͷ֊ͷϝοηʔδΛؚΈ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ warning(มߋͳ͠) ࢹؔ(12/18)
ύϥϝʔλʔ໊ log_min_error_statement ө(ର) ଈ࣌ө(εʔύʔϢʔβʔ) σϑΥϧτ error ղઆ ΤϥʔͱͳͬͨSQLจΛɺϩάʹग़ྗ͢Δϝοηʔδ֊ Λઃఆ͠·͢ɻ “DEBUG5”ɺ“DEBUG4”ɺ“DEBUG3”ɺ“DEBUG2”ɺ
“DEBUG1”ɺ“LOG”ɺ“NOTICE”ɺ“WARNING”ɺ “ERROR”ɺ“FATAL”ɺ“PANIC”͔Βબ͠·͢ɻ ԼҐͷ֊ɺ্Ґͷ֊ͷϝοηʔδΛؚΈ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ error(มߋͳ͠) ࢹؔ(13/18)
ύϥϝʔλʔ໊ log_min_duration_statement ө(ର) ଈ࣌ө(εʔύʔϢʔβʔ) σϑΥϧτ -1 ղઆ ࣮ߦ͕͍࣌ؒSQLจΛϩάग़ྗ͢ΔͨΊͷ࠷খ࣌ؒΛ ઃఆ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
“0”ͷ߹શͯग़ྗ͞Εɺ“-1”ͷ߹ग़ྗ͕ແޮԽ͞ Ε·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 3s ࢹؔ(14/18)
ύϥϝʔλʔ໊ debug_print_parse, debug_print_rewritten, debug_print_plan ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ off ղઆ σόοάใͷग़ྗͷ༗ޮແޮΛઃఆ͠·͢ɻ
༗ޮԽ͢Δ͜ͱͰɺνϡʔχϯάʹ༗ޮͳใ͕ग़ྗ͞ ΕΔ͔͠Ε·ͤΜɻ ॱʹ“ղੳπϦʔ”ɺ“ϦϥΠλʔใ”ɺ “࣮ߦܭը”ͱͳΓ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ off(มߋͳ͠) ࢹؔ(15/18)
ύϥϝʔλʔ໊ log_hostname ө(ର) ཁϦϩʔυ σϑΥϧτ off ղઆ ϩάग़ྗʹΫϥΠΞϯτͷϗετ໊Λग़ྗ͢ΔઃఆΛߦ ͍·͢ɻ ϗετ໊ͷ໊લղܾΛߦ͏ͨΊɺஶ͍͠ੑೳྼԽ͕ൃੜ
͢ΔՄೳੑ͕͋Γ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ off(มߋͳ͠) ࢹؔ(16/18)
ύϥϝʔλʔ໊ log_line_prefix ө(ର) ཁϦϩʔυ σϑΥϧτ “%m [%p] ” ղઆ ϩάग़ྗ࣌ͷઌ಄෦ͷॻࣜจࣈྻΛઃఆ͠·͢ɻ
͜ͷจࣈྻͷޙΖʹϩά͕ग़ྗ͞Ε·͢ɻ %Τεέʔϓʹ͍ͭͯɺެࣜυΩϡϝϯτΛࢀরͯ͘͠ ͍ͩ͞ɻ https://www.postgresql.jp/document/10/html/runtime- config-logging.html#GUC-LOG-LINE-PREFIX ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ “[%m] [%p] [%u] [%d] [%h] ” ࢹؔ(17/18)
ύϥϝʔλʔ໊ log_timezone ө(ର) ཁϦϩʔυ σϑΥϧτ GMT ղઆ ϩάग़ྗ࣌ͷλΠϜκʔϯΛઃఆ͠·͢ɻ initdbͰࢦఆͨ͠ϩέʔϧʹΑΓมΘΓ·͢ɻ ϩέʔϧ͕“C”ͷ߹ɺ“GMT”ͱͳΓ·͢ɻ
ਪ Japan ࢹؔ(18/18)
νϡʔχϯά(1/46) PostgreSQLͷνϡʔχϯάڥσʔλྔɺ༻༻్ʹ߹Θͤͯઃఆ͢ Δඞཁ͕͋Γ·͢ɻ ݟੵΓ࣌ʹࡉ͔͘ݕ౼Λߦ͍ͬͯͯɺظӡ༻͍ͯ͠Δͱੑೳ͕Լ ͢Δ͜ͱ͕͋ΔͨΊɺαʔόʔঢ়ଶΛ֬ೝͯ͠νϡʔχϯάΛߦ͏ඞཁ͕ ͋Γ·͢ɻ
ύϥϝʔλʔ໊ shared_buffers ө(ର) ཁϦελʔτ σϑΥϧτ 32MB ղઆ σʔλϕʔεαʔόʔ͕༻͢Δڞ༗ϝϞϦʔྔΛઃఆ͠·͢ɻ shared_buffersΛมߋ͢Δ߹ɺmax_wal_sizeͷมߋߦ͍· ͢ɻ
ಉ࣌ʹɺΧʔωϧύϥϝʔλʔͷkernel.shmmax͓Αͼ kernel.shmallมߋ͍ͯͩ͘͠͞ɻ ڞ༗ϝϞϦʔͷ֓ࢉɺҎԼͷܭࢉࣜͰ֓ࢉͰ͖·͢ɻ = max_connections * 400 + max_prepared_transactions * 600 + max_locks_per_transaction * (max_connections + max_prepared_transactions) * 270 ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ γεςϜϝϞϦʔͷ25%ͷ༰ྔ νϡʔχϯά(2/46)
ύϥϝʔλʔ໊ temp_buffers ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 8MB ղઆ ηογϣϯதʹ༻͞ΕΔҰ࣌όοϑΝʔͷαΠζΛઃ ఆ͠·͢ɻ Ұ࣌όοϑΝʔΛଟ͘༻͢Δ߹มߋ͠·͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 8MB(มߋͳ͠) νϡʔχϯά(3/46)
ύϥϝʔλʔ໊ work_mem ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 4MB ղઆ ηογϣϯதͷιʔτϋογϡૢ࡞Ͱ༻͢ΔϝϞϦʔͷα ΠζΛઃఆ͠·͢ɻ େ͖͘͢Δ͜ͱͰ͍߹Θͤੑೳ্͕͠·͕͢ɺෳࡶͳ͍
߹Θͤͷ߹work_memͷഒ༻͞ΕΔ͜ͱ͕͋Γ·͢ɻ ·ͨɺηογϣϯ୯ҐʹඞཁͱͳΔͨΊϝϞϦʔཧʹؾΛͭ ͚͍ͯͩ͘͞ɻ (γεςϜϝϞϦʔ - shared_buffers) / max_connectionsҎ্ͷ ߹εϫοϓ͠ɺੑೳ͕Լ͠·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 4MB(มߋͳ͠) νϡʔχϯά(4/46)
ύϥϝʔλʔ໊ maintenance_work_mem ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 64MB ղઆ όΩϡʔϜΠϯσοΫε࡞ͳͲͷϝϯςφϯεૢ࡞ ࣌ʹ༻͢ΔϝϞϦʔͷαΠζΛઃఆ͠·͢ɻ ࣗಈόΩϡʔϜ͕ಈ࡞ͨ͠߹ɺ
autovacuum_max_workers * maintenance_work_mem ͷϝϞϦʔ͕༻͞Ε·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ 64MB(มߋͳ͠) νϡʔχϯά(5/46)
ύϥϝʔλʔ໊ max_stack_depth ө(ର) ଈ࣌ө(εʔύʔϢʔβʔ) σϑΥϧτ 2MB ղઆ σʔλϕʔεαʔόʔͷ࣮ߦελοΫͷαΠζΛઃఆ͠· ͢ɻ Χʔωϧͷ࠷େελοΫ༰ྔ͔Β҆શ༨ͷͨΊͷ1MB
Λࠩ͠Ҿ͍ͨΛઃఆ͍ͯͩ͘͠͞ɻ Χʔωϧͷ੍ݶҎ্Λઃఆ͢ΔͱɺόοΫΤϯυϓϩη ε͕Ϋϥογϡ͢ΔڪΕ͕͋Γ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ ulimit -sͷ݁Ռ(KB) - 1MB νϡʔχϯά(6/46)
ύϥϝʔλʔ໊ effective_io_concurrency ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 1 ղઆ σʔλϕʔεαʔόʔͷಉ࣌σΟεΫI/Oૢ࡞Λઃఆ͠·͢ɻ “0”Λઃఆ͢ΔͱɺඇಉظI/OϦΫΤετ͕ແޮԽ͞Ε·͢ɻ HDDͷ߹ɺRAIDΛߏ͢ΔυϥΠϒΛઃఆͯͩ͘͠͞
͍ɻ ͨͩ͠ɺύϦςΟ༻আ֎͍ͯͩ͘͠͞ɻ SSDͷ߹ɺඦͷ͕࠷దͱߟ͑ΒΕ·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ HDD: RAIDΛߏ͢ΔυϥΠϒ(ύϦςΟ༻আ֎) SSD: 200 νϡʔχϯά(7/46)
ύϥϝʔλʔ໊ max_worker_processes ө(ର) ཁϦελʔτ σϑΥϧτ 8 ղઆ σʔλϕʔεαʔόʔͷόοΫάϥϯυϓϩηεΛ ઃఆ͠·͢ɻ εϨʔϒαʔόʔɺϚελʔαʔόʔͷઃఆҎ্ઃ
ఆ͍ͯͩ͘͠͞ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ CPUͷཧίΞ νϡʔχϯά(8/46)
ύϥϝʔλʔ໊ max_parallel_maintenance_workers ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 2 ղઆ 1ͭͷϢʔςΟϦςΟίϚϯυ͔ΒىಈͰ͖ΔฒྻϫʔΧ ʔͷ࠷େΛઃఆ͠·͢ɻ ݱࡏɺBπϦʔΠϯσοΫε࡞࣌ͷΈ༗ޮͱͳΓ·
͢ɻ PostgreSQL11ͰՃ͞Εͨ৽ύϥϝʔλʔͰ͢ɻ ਪ 2(มߋͳ͠) νϡʔχϯά(9/46)
ύϥϝʔλʔ໊ max_parallel_workers_per_gather ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 2 ղઆ 1ͭͷGather·ͨGather Mergeϊʔυʹରͯ͠ىಈͰ ͖ΔϫʔΧʔͷ࠷େΛઃఆ͠·͢ɻ
“0”Λઃఆ͢ΔͱύϥϨϧΫΤϦʔ͕༻͞Εͳ͘ͳΓ· ͢ɻ max_parallel_workersͰϓʔϧ͞Εͨϓϩηε͔Βऔಘ ͞Ε·͢ɻ ਪ CPUͷཧίΞ / 2 νϡʔχϯά(10/46)
ύϥϝʔλʔ໊ max_parallel_workers ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 8 ղઆ ύϥϨϧΫΤϦʔ༻ͷ࠷େϫʔΧʔΛઃఆ͠·͢ɻ ͜ͷɺmax_worker_processesͷͷ੍ݶΛड͚· ͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ CPUͷཧίΞ νϡʔχϯά(11/46)
ύϥϝʔλʔ໊ synchronous_commit ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ on ղઆ τϥϯβΫγϣϯͷίϛοτ͕ΫϥΠΞϯτʹ“ྃ”Λใࠂ͢ΔલʹWALϨ ίʔυ͕σΟεΫ্ʹॻ͖ࠐ·ΕΔ·Ͱ͔ͭͲ͏͔ͷઃఆΛߦ͍·͢ɻ ϨϓϦέʔγϣϯ࣌ʹӨڹ͕͋Γɺઃఆͷҧ͍ҎԼͷ௨ΓͰ͢ɻ
ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ on(มߋͳ͠) νϡʔχϯά(12/46) ઃఆ ಉظ/ඇಉظ ϓϥΠϚϦʔ εϨʔϒ off ඇಉظ ͨͳ͍ ͨͳ͍ local ඇಉظ ͭ ͨͳ͍ remote_write ಉظ ͭ ϝϞϦॻ͖ࠐΈ·Ͱͭ on ಉظ ͭ σΟεΫॻ͖ࠐΈ·Ͱͭ remote_apply ಉظ ͭ WALదԠ·Ͱͭ
ύϥϝʔλʔ໊ wal_buffers ө(ର) ཁϦελʔτ σϑΥϧτ -1 ղઆ σΟεΫʹॻ͖ࠐ·Ε͍ͯͳ͍WALσʔλ͕༻͢Δڞ ༗ϝϞϦʔͷྔΛઃఆ͠·͢ɻ “-1”ͷ߹ɺshared_buffersͷ32ͷ1͕ઃఆ͞Ε·
͢ɻ shared_buffers͕େ͖͍߹ɺWALηάϝϯτͷେ͖͞ Ͱ͋Δ16MBΛ͑ΔՄೳੑ͕͋ΔͨΊɺ16MBΛઃఆ͠ ·͢ɻ ਪ 16MB νϡʔχϯά(13/46)
ύϥϝʔλʔ໊ checkpoint_timeout ө(ର) ཁϦϩʔυ σϑΥϧτ 5min ղઆ WALνΣοΫϙΠϯτͷλΠϜΞτ࣌ؒΛઃఆ͠· ͢ɻ ͕খ͗͢͞Δͱɺϩάʹϫʔχϯάϝοηʔδ͕ग़ྗ
͞Ε·͢ɻ ਪ 30min νϡʔχϯά(14/46)
ύϥϝʔλʔ໊ checkpoint_completion_target ө(ର) ཁϦϩʔυ σϑΥϧτ 0.5 ղઆ ࣍ͷνΣοΫϙΠϯτ͕࣮ߦ͞ΕΔ·ͰͷؒʹͲΕ͘Β ͍ͷ࣌ؒΛֻ͚ͯॻ͖ग़͔͢Λઃఆ͠·͢ɻ ਪ
(checkpoint_timeout - 2min) / checkpoint_timeout νϡʔχϯά(15/46)
ύϥϝʔλʔ໊ max_wal_size ө(ର) ཁϦϩʔυ σϑΥϧτ 1GB ղઆ ࣍ͷνΣοΫϙΠϯτ͕࣮ࢪ͞ΕΔWALϑΝΠϧͷαΠ ζΛઃఆ͠·͢ɻ ιϑτϦϛοτͷͨΊɺ݅ʹΑͬͯ͑Δ͜ͱ͕͋Γ
·͢ɻ ߋ৽͕සൟʹى͜Δ߹ɺνΣοΫϙΠϯτ͕සൟʹൃ ੜ͢ΔͨΊੑೳ͕Լ͠·͢ɻ ϩάʹϫʔχϯά͕ग़͍ͯΔ߹มߋ͍ͯͩ͘͠͞ɻ ਪ 1GB(มߋແ͠) νϡʔχϯά(16/46)
ύϥϝʔλʔ໊ min_wal_size ө(ର) ཁϦϩʔυ σϑΥϧτ 80MB ղઆ WALϑΝΠϧͷ࠷খαΠζΛઃఆ͠·͢ɻ WALϑΝΠϧΛ࠶ར༻ɾআ͢Δࡍͷܭࢉࣜʹ༻͞ Ε·͢ɻ
ਪ 80MB(มߋແ͠) νϡʔχϯά(17/46)
ύϥϝʔλʔ໊ seq_page_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 1.0 ղઆ σΟεΫ͔Β1ϖʔδσʔλΛγʔέϯγϟϧʹऔಘ͢ ΔࡍͷɺϓϥϯφʔͷਪఆίετΛઃఆ͠·͢ɻ ਪ
1.0(มߋແ͠) νϡʔχϯά(18/46)
ύϥϝʔλʔ໊ random_page_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 4.0 ղઆ σΟεΫ͔Β1ϖʔδσʔλΛϥϯμϜʹऔಘ͢Δࡍ ͷɺϓϥϯφʔͷਪఆίετΛઃఆ͠·͢ɻ HDDΛج४ʹઃఆ͞Ε͍ͯ·͢ɻ
γʔέϯγϟϧͱϥϯμϜΞΫηεεϐʔυ͕ಉ͡SSD ͷ߹ɺseq_page_costͷͱಉ͡ͱ͢Δ͜ͱͰߴ ԽͰ͖·͢ɻ ਪ HDD: 4.0(มߋແ͠) SSD: 1.0 νϡʔχϯά(19/46)
ύϥϝʔλʔ໊ cpu_tuple_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 0.01 ղઆ ͍߹Θͤ࣌ͷߦͷॲཧίετʹର͢Δɺϓϥϯφʔͷ ਪఆίετΛઃఆ͠·͢ɻ ਪ
0.01(มߋແ͠) νϡʔχϯά(20/46)
ύϥϝʔλʔ໊ cpu_index_tuple_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 0.005 ղઆ ΠϯσοΫεࠪ࣌ͷΠϯσοΫεߦͷॲཧίετʹର ͢ΔɺϓϥϯφʔͷਪఆΛઃఆ͠·͢ɻ ਪ
0.005(มߋແ͠) νϡʔχϯά(21/46)
ύϥϝʔλʔ໊ cpu_operator_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 0.0025 ղઆ ͍߹Θͤ࣌ʹ࣮ߦ͞ΕΔ֤ԋࢉࢠؔͷॲཧίετ ʹର͢ΔɺϓϥϯφʔͷਪఆΛઃఆ͠·͢ɻ ਪ
0.0025(มߋແ͠) νϡʔχϯά(22/46)
ύϥϝʔλʔ໊ parallel_tuple_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 0.1 ղઆ ύϥϨϧϫʔΧʔϓϩηε͔Βɺ1ߦΛଞͷϓϩηεʹస ૹ͢ΔͨΊͷίετʹର͢ΔɺϓϥϯφʔͷਪఆΛઃ ఆ͠·͢ɻ
ਪ 0.1(มߋແ͠) νϡʔχϯά(23/46)
ύϥϝʔλʔ໊ parallel_setup_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 1000.0 ղઆ ύϥϨϧϫʔΧʔϓϩηεΛىಈ͢ΔͨΊͷίετʹର ͢ΔɺϓϥϯφʔͷਪఆΛઃఆ͠·͢ɻ ਪ
1000.0(มߋແ͠) νϡʔχϯά(24/46)
ύϥϝʔλʔ໊ jit_above_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 100000 ղઆ JITίϯύΠϧ͕༗ޮʹͳΔΫΤϦͷίετΛઃఆ͠· ͢ɻ JITͷىಈʹ͕͔͔࣌ؒΔͨΊɺ͙͢ʹىಈ͠ͳ͍Α
͏ʹͳ͍ͬͯ·͢ɻ “-1”Λઃఆ͢ΔͱJITίϯύΠϧ͕ແޮԽ͞Ε·͢ɻ ਪ 100000(มߋແ͠) νϡʔχϯά(25/46)
ύϥϝʔλʔ໊ jit_inline_above_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 500000 ղઆ JITίϯύΠϧ͕ؔԋࢉࢠΛΠϯϥΠϯԽ͢Δ߹ͷ ΫΤϦίετΛઃఆ͠·͢ɻ “-1”Λઃఆ͢ΔͱJITίϯύΠϧʹΑΔΠϯϥΠϯԽ͕ແ
ޮԽ͞Ε·͢ɻ ਪ 500000(มߋແ͠) νϡʔχϯά(26/46)
ύϥϝʔλʔ໊ jit_optimize_above_cost ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 500000 ղઆ JITίϯύΠϧͷ࠷దԽʹ͔͔ΔΫΤϦίετΛઃఆ͠· ͢ɻ “-1”Λઃఆ͢ΔͱJITίϯύΠϧͷ࠷దԽ͕ແޮԽ͞Ε·
͢ɻ ਪ 500000(มߋແ͠) νϡʔχϯά(27/46)
ύϥϝʔλʔ໊ min_parallel_table_scan_size ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 8MB ղઆ ύϥϨϧεΩϟϯΛߟྀ͢Δ࠷খͷςʔϒϧͷσʔλα ΠζΛઃఆ͠·͢ɻ ਪ
8MB(มߋແ͠) νϡʔχϯά(28/46)
ύϥϝʔλʔ໊ min_parallel_index_scan_size ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 512KB ղઆ ύϥϨϧεΩϟϯ࣮ߦ࣌ʹඞͣεΩϟϯ͢ΔΠϯσοΫ εσʔλͷ࠷খΛઃఆ͠·͢ɻ ϓϥϯφʔͷίετਪఆ༻ͱͳΓ·͢ɻ
ਪ 512KB(มߋແ͠) νϡʔχϯά(29/46)
ύϥϝʔλʔ໊ effective_cache_size ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 4GB ղઆ ͍߹Θͤ࣌ʹͲͷఔΩϟογϡώοτ͢Δ͔Λ༧ଌ ͢ΔͨΊͷΩϟογϡαΠζΛઃఆ͠·͢ɻ PostgreSQLͷڞ༗όοϑΝʔ͚ͩͰͳ͘ɺOSͷϑΝΠ
ϧΩϟογϡσΟεΫΩϟογϡΛߟྀ͢Δඞཁ͕ ͋Γ·͢ɻ ࣮ࡍʹϝϞϦʔͷ֬อߦΘΕͣɺϓϥϯφʔͷίε τਪఆ༻ͱͳΓ·͢ɻ ਪ γεςϜϝϞϦʔͷ50%ͷ༰ྔ νϡʔχϯά(30/46)
ύϥϝʔλʔ໊ autovacuum_max_workers ө(ର) ཁϦελʔτ σϑΥϧτ 3 ղઆ ಉ࣌ʹ࣮ߦ͢ΔࣗಈόΩϡʔϜॲཧͷ࠷େϫʔΧʔΛ ઃఆ͠·͢ɻ ਪ
σʔλϕʔεαΠζͷ20%Λ͑Δେ͖ͳςʔϒϧ + 1 νϡʔχϯά(31/46)
ύϥϝʔλʔ໊ autovacuum_vacuum_threshold ө(ର) ཁϦϩʔυ σϑΥϧτ 50 ղઆ όΩϡʔϜॲཧʹඞཁͳɺߋ৽·ͨআ͞Εͨλϓϧ ͷ࠷খΛઃఆ͠·͢ɻ ͜ͷύϥϝʔλʔɺશςʔϒϧʹରͯ͠దԠ͞Ε·
͢ɻ ਪ 50(มߋແ͠) νϡʔχϯά(32/46)
ύϥϝʔλʔ໊ autovacuum_analyze_threshold ө(ର) ཁϦϩʔυ σϑΥϧτ 50 ղઆ ߋ৽ॲཧʹඞཁͳɺߋ৽·ͨআ͞Εͨλϓϧͷ࠷ খΛઃఆ͠·͢ɻ ͜ͷύϥϝʔλʔɺશςʔϒϧʹରͯ͠దԠ͞Ε·
͢ɻ ਪ 50(มߋແ͠) νϡʔχϯά(33/46)
ύϥϝʔλʔ໊ autovacuum_vacuum_scale_factor ө(ର) ཁϦϩʔυ σϑΥϧτ 0.2 ղઆ όΩϡʔϜॲཧʹඞཁͳɺߋ৽͞Εͨςʔϒϧߦͷׂ ߹Λઃఆ͠·͢ɻ ͜ͷύϥϝʔλʔɺશςʔϒϧʹରͯ͠దԠ͞Ε·
͢ɻ ਪ 0.2(มߋແ͠) νϡʔχϯά(34/46)
ύϥϝʔλʔ໊ autovacuum_analyze_scale_factor ө(ର) ཁϦϩʔυ σϑΥϧτ 0.1 ղઆ ߋ৽ॲཧʹඞཁͳɺߋ৽͞Εͨςʔϒϧߦͷׂ߹Λઃ ఆ͠·͢ɻ ͜ͷύϥϝʔλʔɺશςʔϒϧʹରͯ͠దԠ͞Ε·
͢ɻ ਪ 0.1(มߋແ͠) νϡʔχϯά(35/46)
ύϥϝʔλʔ໊ search_path ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ "$user", public ղઆ ΫΤϦ͕εΩʔϚΛࢦఆ͍ͯ͠ͳ͍߹ɺεΩʔϚΛ ݕࡧ͢Δॱ൪Λઃఆ͠·͢ɻ
“$user”ɺSESSION_USERͱಉ͡εΩʔϚ͕͋Εɺ ஔ͞Ε·͢ɻ ཁ݅ʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ "$user", public(มߋແ͠) νϡʔχϯά(36/46)
ύϥϝʔλʔ໊ row_security ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ on ղઆ ߦηΩϡϦςΟϙϦγʔͷదԠʹΑͬͯΤϥʔΛൃੜ͞ ͤΔ͔ઃఆ͠·͢ɻ “off”ɺҰͭͰϙϦγʔ͕దԠ͞ΕͨΫΤϦ͕Τϥʔ
ͱͳΓ·͢ɻ ߦηΩϡϦςΟϙϦγʔʹ͍ͭͯɺެࣜυΩϡϝϯτ Λ͝ࢀর͍ͩ͘͞ɻ https://www.postgresql.jp/document/10/html/sql- createpolicy.html ਪ on(มߋແ͠) νϡʔχϯά(37/46)
ύϥϝʔλʔ໊ default_tablespace ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ ’’(ۭന) ղઆ CREATEίϚϯυͰ໌ࣔతʹςʔϒϧεϖʔεΛࢦఆͯ͠ ͍ͳ͍߹ʹɺΦϒδΣΫτͷ࡞ઌͱͳΔσϑΥϧτ ͷςʔϒϧεϖʔεΛઃఆ͠·͢ɻ
ۭനͷ߹ɺݱࡏͷσʔλϕʔεͷσϑΥϧτςʔϒϧ εϖʔεΛ༻͠·͢ɻ Ұ࣌ςʔϒϧɺtemp_tablespacesͰࢦఆ͠·͢ɻ ਪ ’’(มߋͳ͠) νϡʔχϯά(38/46)
ύϥϝʔλʔ໊ temp_tablespaces ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ ’’(ۭന) ղઆ CREATEίϚϯυͰ໌ࣔతʹςʔϒϧεϖʔεΛࢦఆͯ͠ ͍ͳ͍߹ʹɺҰ࣌ΦϒδΣΫτͷ࡞ઌͱͳΔσϑΥ ϧτͷςʔϒϧεϖʔεΛઃఆ͠·͢ɻ
ۭനͷ߹ɺݱࡏͷσʔλϕʔεͷσϑΥϧτςʔϒϧ εϖʔεΛ༻͠·͢ɻ ਪ ’’(มߋͳ͠) νϡʔχϯά(39/46)
ύϥϝʔλʔ໊ statement_timeout ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 0 ղઆ ίϚϯυ͕ΫϥΠΞϯτ͔Βαʔόʔʹ౸ୡ͔ͯ͠Βλ ΠϜΞτ͢Δ·Ͱͷ࣌ؒΛઃఆ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
0ͷ߹λΠϜΞτػೳΛແޮԽ͠·͢ɻ ਪ 0(มߋͳ͠) νϡʔχϯά(40/46)
ύϥϝʔλʔ໊ lock_timeout ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 0 ղઆ σʔλϕʔεΦϒδΣΫτͷϩοΫͪͰλΠϜΞτ ͢Δ·Ͱͷ࣌ؒΛઃఆ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
0ͷ߹λΠϜΞτػೳΛແޮԽ͠·͢ɻ ਪ 0(มߋͳ͠) νϡʔχϯά(41/46)
ύϥϝʔλʔ໊ idle_in_transaction_session_timeout ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 0 ղઆ ΞΠυϧঢ়ଶͷτϥϯβΫγϣϯ͕ηογϣϯλΠϜΞ τ͢Δ·Ͱͷ࣌ؒΛઃఆ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
0ͷ߹λΠϜΞτػೳΛແޮԽ͠·͢ɻ ਪ 0(มߋͳ͠) νϡʔχϯά(42/46)
ύϥϝʔλʔ໊ vacuum_cleanup_index_scale_factor ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ 0.1 ղઆ B-treeΠϯσοΫεͷόΩϡʔϜॲཧΛ࣮ߦ͢ΔͨΊ ͷɺલճͷόΩϡʔϜॲཧ͔Βมߋ͞Εͨߦͷׂ߹ Λઃఆ͠·͢ɻ
σϑΥϧτͰɺ0.1%ͷมߋ͕͋ΔςʔϒϧͷΈΠ ϯσοΫεͷόΩϡʔϜ͕࣮ߦ͞Ε·͢ɻ PostgreSQL11ͰՃ͞Εͨ৽ύϥϝʔλʔͰ͢ɻ ਪ 0.1(มߋͳ͠) νϡʔχϯά(43/46)
ύϥϝʔλʔ໊ client_encoding ө(ର) ଈ࣌ө(શϢʔβʔ) σϑΥϧτ sql_ascii ղઆ ΫϥΠΞϯτଆͷจࣈηοτΛઃఆ͠·͢ɻ ΞϓϦέʔγϣϯʹ߹Θͤͯมߋ͍ͯͩ͘͠͞ɻ ਪ
sql_ascii(มߋͳ͠) νϡʔχϯά(44/46)
ύϥϝʔλʔ໊ deadlock_timeout ө(ର) ଈ࣌ө(εʔύʔϢʔβʔ) σϑΥϧτ 1s ղઆ ϩοΫͪͷঢ়ଶʹͳͬͨࡍʹɺσουϩοΫͷݕग़ॲ ཧΛ։࢝͢Δ·Ͱͷͪ࣌ؒΛઃఆ͠·͢ɻ ϛϦඵ୯ҐͰࢦఆ͕ՄೳͰ͢ɻ
σουϩοΫͷݕग़ʹίετ͕ߴ͍ͨΊɺΞϓϦέʔ γϣϯଆͰσουϩοΫ͕ى͜Βͳ͍Α͏ʹͯ͘͠ ͍ͩ͞ɻ ਪ 10s νϡʔχϯά(45/46)
ύϥϝʔλʔ໊ max_locks_per_transaction, max_pred_locks_per_transaction ө(ର) ཁϦελʔτ σϑΥϧτ 64 ղઆ τϥϯβΫγϣϯͷฏۉϩοΫͷΛઃఆ͠·͢ɻ ୯ҰͷτϥϯβΫγϣϯͰɺଟͷςʔϒϧͷϩοΫ͕
ൃੜ͢ΔΞϓϦέʔγϣϯͷ߹ɺΛ૿͢ඞཁ͕ ͋Γ·͢ɻ ਪ 64(มߋແ͠) νϡʔχϯά(46/46)
͓·͚: ϝϞϦʔͷׂΓͯྫ GB 0 1 2 3 4 5 6
7 8 9 10 11 12 13 14 15 16 2.1GB 7.4GB 4GB 2.5GB OSɾͦͷଞ shared_buffers όοΫΤϯυϓϩηε ۭ͖༰ྔ αʔόʔϝϞϦʔ͕16GBͰOSͦͷଞΞϓϦͰ2.5GBΛ༻͠ɺ όοΫΤϯυϓϩηεͷίϯϑΟάઃఆ͕σϑΥϧτͷ߹ ҎԼͷΑ͏ʹͳΓ·͢ɻ γεςϜϝϞϦʔͷ25% (8MB + 4MB + 64MB) * 100ଓ = 7600MB ≒ 7.4GB
͓·͚: ΧʔωϧϦιʔεͷมߋ LinuxΧʔωϧͰͷϦιʔεมߋʹ͍ͭͯهࡌ͠·͢ɻ • ڞ༗ϝϞϦɾηάϝϯτͷ্ݶઃఆύϥϝʔλʔ: kernel.shmmax ׂΓ͍ͯͨϝϞϦͷόΠτΛɺgetconf PAGE_SIZEͷͰׂͬͨ • γεςϜશମͷڞ༗ϝϞϦɾϖʔδͷ࠷େઃఆύϥϝʔλʔ:
kernel.shmall kernel.shmmax * kernel.shmmni / getconf PAGE_SIZE / 16 • ώϡʔδϖʔδͷઃఆ: vm.nr_hugepages ώϡʔδϖʔδͷνϡʔχϯάɺ࣮ࡍʹPostgreSQLΛ࣮ߦͯ֬͠ೝΛߦ͍·͢ɻ 1. ԾϝϞϦͷϐʔΫ࣌αΠζΛௐࠪ͠·͢ɻ grep ^VmPeak /proc/`cat /var/run/postgresql*.pid | head -1`/status 2. ώϡʔδϖʔδαΠζΛௐࠪ͠·͢ɻ grep ^Hugepagesize /proc/meminfo 3. ώϡʔδϖʔδઃఆύϥϝʔλʔʹܭࢉΛઃఆ͠·͢ɻ: vm.nr_hugepages ceil( 2ͷ / 3ͷ )
ऴΘΓʹ ύϥϝʔλʔʹΑΔνϡʔχϯάɺ ࣮ࡍͷӡ༻Ͱαʔόʔߏೖ͞ΕΔσʔλྔɺ ൃߦ͞ΕΔSQLʹ߹Θͤͯɺ࠷దͳ͕ҟͳΓ·͢ɻ ͜·ΊʹPostgreSQLͷঢ়ଶΛ֬ೝ͠ɺ ҆ఆՔಇΛࢦ͍ͯͩ͘͠͞ɻ
ྑ͍PostgreSQLϥΠΫΛʂ ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ