SlideShare a Scribd company logo
1 of 14
Download to read offline
PostgreSQL プロセス障害の話
Noriyoshi Shinoda
February 2, 2021
PostgreSQL Un-Conference #20
SPEAKER
篠田典良(しのだのりよし)
– 所属
– 日本ヒューレット・パッカード株式会社
– 現在の業務
– PostgreSQL をはじめ、Oracle Database, Microsoft SQL Server, Vertica 等 RDBMS 全般に関するシステムの
設計、移行、チューニング、コンサルティング
– Oracle ACE (2009 年 4 月~)
– Oracle Database 関連書籍15冊の執筆
– オープンソース製品に関する調査、検証
– 関連する URL
– 「PostgreSQL 虎の巻」シリーズ
–http://h30507.www3.hp.com/t5/user/viewprofilepage/user-id/838802
– Oracle ACE ってどんな人?
–http://www.oracle.com/technetwork/jp/database/articles/vivadeveloper/index-1838335-ja.html
1
最近の活動
PostgreSQL 14 向け
– CREATE OR REPLACE TRIGGER 文に対する psql コマンドの TAB 補完
– Committed
– pg_stat_replication_slot カタログの列名変更
– Committed
– オンライン整合性チェック関数(pg_relation_check_pages)
– バグ・レポートを提出
– Revert !
– 暗号化のための鍵管理システム
– バグ・フィックス・パッチを提出(Committed)
– Revert !!
– psql コマンドから拡張統計の一覧を出力する(¥dX)
– バグ・レポートを提出
– Revert !!! ⇒ Committed
2
プロセス障害の話
インスタンスのプロセス構成
3
– Postmaster を親とするプロセス群
– クライアント・バックエンド
– 必須バックエンド・プロセス
– その他ワーカー等
postmaster
client
backend
checkpointer
background
writer
autovacuum
launcher
Application
logger
stats
collector
wal writer
プロセス障害の話
プロセス障害時の挙動
– restart_after_crash パラメーター(デフォルト on)により変化する
– PostgreSQL 12 のマニュアル
When set to on, which is the default, PostgreSQL will automatically reinitialize after a backend crash.
Leaving this value set to on is normally the best way to maximize the availability of the database.
However, in some circumstances, such as when PostgreSQL is being invoked by clusterware, it may be
useful to disable the restart so that the clusterware can gain control and take any actions it deems
appropriate.
デフォルトであるonの場合、PostgreSQLはバックエンドのクラッシュの後、自動的に再初期化を行います。この値
を真のままにしておくことが、通常データベースの可用性を最大化する最適の方法です。しかし、PostgreSQLがク
ラスタウェアにより起動された時のような状況では、クラスタウェアが制御を獲得して、適切とみなすいかなる振
る舞いをも行えるように再起動を無効にすることが有益かもしれません。
– PostgreSQL 13 のマニュアル
4
プロセス障害の話
プロセス障害時の挙動
– 「バックエンドのクラッシュ」とは?
– KILL シグナルで強制終了
– Segmentation Fault (SEGV) 等による異常終了
– 「src/backend/postmaster/postmaster.c」の reaper() で処理
– restart_after_crash = on (デフォルト)の場合
– 異常終了したプロセスだけでなく、関連する全プロセスが再起動される
– 全クライアント・セッションがリセットされ、全トランザクションがロールバックされる
– restart_after_crash = off の場合
– Postmaster プロセスを含めインスタンス全体が停止する
5
プロセス障害の話
プロセス障害時の挙動
– 再初期化後のプロセスID例
プロセス 停止前PID 停止 再起動後PID 備考
postmaster 38786 38786
logger 38787 38787
checkpointer 38789 38908
background writer 38790 38909
walwriter 38791 kill –9 38910
autovacuum launcher 38792 38911
archiver 38793 38912
stats collector 38794 38913
logical replication launcher 38795 38914
postgres 38830 - client backend
6
プロセス障害の話
プロセス障害時の挙動
7
-n
これはサーバプロセスが異常終了する問題をデバッグするためのオプションです。 このような状態では、他のす
べてのサーバプロセスに対し、 終了し、 共有メモリやセマフォを再初期化するように通知するのが、 通常の戦
略です。 これはエラーが起きたサーバプロセスが、 終了する前に、 何かしら共有状態を破損したかもしれない
からです。 このオプションは、 postgresが共有データ構造を再初期化しないように指定します。 知識のあるシ
ステムプログラマであれば、 その後にデバッガを使用して共有メモリやセマフォの状態を検証することができま
す。
– PostgreSQL 12 のマニュアル
– パート VI. リファレンス / PostgreSQLサーバアプリケーション / postgres
プロセス障害の話
プロセス障害時の挙動
– 要求に応じて起動されるので再起動されない
– クライアント・バックエンド
– autovacuum worker
– autoprewarm worker
– logical replication worker
– parallel worker
– walsender
8
プロセス障害の話
プロセス障害時の挙動
9
– 異常終了すると restart_after_crash を無視して再起動するプロセス
– logger
– stats collector
– archiver
– 異常終了すると restart_after_crash を無視してインスタンス全体が停止するプロセス
– postmaster
– startup
⇒ 全プロセスの再初期化は行われない
プロセス障害の話
クライアント・バックエンドの停止
– プロセス操作関数
関数名 説明 送信シグナル 備考
pg_cancel_backend(pid) SQL文の停止 INT
pg_terminate_backend(pid) セッションの停止 TERM
pg_reload_conf() 構成ファイルの再ロード HUP Postmaster ⇒ 全バックエンドへ
pg_rotate_log() ログ・ローテーション USR1 Postmaster ⇒ Loggerへ
10
– Pid は pg_stat_activity カタログの pid 列から参照
プロセス障害の話
クライアント・バックエンドの停止
– KILL シグナルを送ると
– Parallel Worker を強制終了した例
postgres=> EXPLAIN ANALYZE SELECT COUNT(*) FROM data1 a, data1 b;
WARNING: terminating connection because of crash of another server process
DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit,
because another server process exited abnormally and possibly corrupted shared memory.
HINT: In a moment you should be able to reconnect to the database and repeat your command.
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!?>
11
– クライアント・バックエンドや Parallel Worker も restart_after_crash の影響を受ける
– OOM Killer 等による単一プロセス停止が全体に波及する
プロセス障害の話
archive_command の障害
– archive_command に指定されたコマンドの障害
– src/backend/postmaster/pgarch.c 内の pgarch_archiveXlog 関数で実行
– pgarch_archiveXlog 関数が false を返すと1秒待って再実行
12
pgarch_archiveXlog(void)
{
rc = system(xlogarchcmd);
if (rc != 0)
{
if (WIFEXITED(rc))
{
ereport(lev, (errmsg("archive command failed with exit code %d" …
} …
return false;
}
THANK YOU
Mail: noriyoshi.shinoda@hpe.com
Twitter: @nori_shinoda

More Related Content

More from Noriyoshi Shinoda

Add PLEASE clause to Oracle Database
Add PLEASE clause to Oracle DatabaseAdd PLEASE clause to Oracle Database
Add PLEASE clause to Oracle DatabaseNoriyoshi Shinoda
 
PostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GAPostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GANoriyoshi Shinoda
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New FeaturesNoriyoshi Shinoda
 
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features  with Examples (Japanese)PostgreSQL 12 Beta 1 New Features  with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)Noriyoshi Shinoda
 
PostgreSQL 12 Beta 1 New Features with Examples (English)
PostgreSQL 12 Beta 1 New Features with Examples (English)PostgreSQL 12 Beta 1 New Features with Examples (English)
PostgreSQL 12 Beta 1 New Features with Examples (English)Noriyoshi Shinoda
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Noriyoshi Shinoda
 
Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Noriyoshi Shinoda
 
PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (Japanese)PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (Japanese)Noriyoshi Shinoda
 
PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)Noriyoshi Shinoda
 
PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features Japanese version (Beta 1)PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features Japanese version (Beta 1)Noriyoshi Shinoda
 
PostgreSQL 11 New Features English version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)PostgreSQL 11 New Features English version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)Noriyoshi Shinoda
 
PGConf.ASIA 2017 Logical Replication Internals (English)
PGConf.ASIA 2017 Logical Replication Internals (English)PGConf.ASIA 2017 Logical Replication Internals (English)
PGConf.ASIA 2017 Logical Replication Internals (English)Noriyoshi Shinoda
 
PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)Noriyoshi Shinoda
 
PostgreSQL 10 Beta1 New Features (Japanese)
PostgreSQL 10 Beta1 New Features (Japanese)PostgreSQL 10 Beta1 New Features (Japanese)
PostgreSQL 10 Beta1 New Features (Japanese)Noriyoshi Shinoda
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Noriyoshi Shinoda
 
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)Noriyoshi Shinoda
 

More from Noriyoshi Shinoda (18)

Add PLEASE clause to Oracle Database
Add PLEASE clause to Oracle DatabaseAdd PLEASE clause to Oracle Database
Add PLEASE clause to Oracle Database
 
PostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GAPostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GA
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
 
EDB Postgres Vision 2019
EDB Postgres Vision 2019 EDB Postgres Vision 2019
EDB Postgres Vision 2019
 
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features  with Examples (Japanese)PostgreSQL 12 Beta 1 New Features  with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)
 
PostgreSQL 12 Beta 1 New Features with Examples (English)
PostgreSQL 12 Beta 1 New Features with Examples (English)PostgreSQL 12 Beta 1 New Features with Examples (English)
PostgreSQL 12 Beta 1 New Features with Examples (English)
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)
 
Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)
 
PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (Japanese)PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (Japanese)
 
PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)
 
Citus 7.5 Beta 検証結果
Citus 7.5 Beta 検証結果Citus 7.5 Beta 検証結果
Citus 7.5 Beta 検証結果
 
PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features Japanese version (Beta 1)PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features Japanese version (Beta 1)
 
PostgreSQL 11 New Features English version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)PostgreSQL 11 New Features English version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)
 
PGConf.ASIA 2017 Logical Replication Internals (English)
PGConf.ASIA 2017 Logical Replication Internals (English)PGConf.ASIA 2017 Logical Replication Internals (English)
PGConf.ASIA 2017 Logical Replication Internals (English)
 
PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)
 
PostgreSQL 10 Beta1 New Features (Japanese)
PostgreSQL 10 Beta1 New Features (Japanese)PostgreSQL 10 Beta1 New Features (Japanese)
PostgreSQL 10 Beta1 New Features (Japanese)
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1
 
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
 

Recently uploaded

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (7)

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

PostgreSQLUnConference 2021 #20 behavior of process fail