SlideShare a Scribd company logo
PostgreSQL エラーが出ない話
Noriyoshi Shinoda
August 24, 2021
PostgreSQL Un-Conference #26
SPEAKER
篠田典良(しのだのりよし)
– 所属
– 日本ヒューレット・パッカード株式会社
– 現在の業務
– PostgreSQL をはじめ、Oracle Database, Microsoft SQL Server, Vertica 等 RDBMS 全般に関するシステムの
設計、移行、チューニング、コンサルティング
– Oracle ACE (2009 年 4 月~)
– オープンソース製品に関する調査、検証
– PostgreSQL 14 に対して
– psql コマンドに CREATE OR REPLACE TRIGGER 文のタブ補完(bf0aa7c4)
– pg_stat_replication_slots カタログの列名変更(03d51b77)など
– 関連する 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
SPEAKER
篠田典良(しのだのりよし)
– PostgreSQL Unconference #15
– 2020年7月30日
– 検知できない破壊の話
– PostgreSQL Unconference #20
– 2021年2月2日
– プロセス障害の話
– PostgreSQL Unconference #26
– 2021年8月24日
– エラーが出ない話
– スライドはこちら
– https://www.slideshare.net/noriyoshishinoda
2
Huge Pages
Huge Pages とは?
– Linux における複数サイズのメモリー・ページを管理する仕組み
– 通常 4KB のページで管理する領域以外に 2MB ページ(デフォルト)の領域を追加
– Huge Pages を意識させない Transparent Huge Pages 機能もあるが DBMS サーバには非推奨
– カーネル・パラメーター vm.nr_hugepages にページ数を指定(デフォルト 0)
– 参考:
– Huge Page とは何ですか? これを使用する利点は?
–https://access.redhat.com/ja/solutions/293173
– Tuning Red Hat Enterprise Linux Family for PostgreSQL
–https://www.enterprisedb.com/blog/tuning-red-hat-enterprise-linux-family-postgresql
3
Huge Pages
MySQL では?
– 設定
– PostgreSQL の huge_pages = try に近い動作
[System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.24) starting as process 116322
[System] [MY-013576] [InnoDB] InnoDB initialization has started.
[Warning] [MY-012677] [InnoDB] Failed to allocate 138412032 bytes. errno 1
[Warning] [MY-012679] [InnoDB] Using conventional memory pool
[System] [MY-013577] [InnoDB] InnoDB initialization has ended.
# cat /etc/my.cnf
[mysqld]
large-pages
– 起動ログ
– Huge Pages 領域が確保できないので通常メモリーを使用するログが出力される
4
Huge Pages
Oracle Database では?
– 設定
– PostgreSQL の huge_pages = try に近い動作
Supported system pagesize(s):
PAGESIZE AVAILABLE_PAGES EXPECTED_PAGES ALLOCATED_PAGES ERROR(s)
4K Configured 4 309127 NONE
2048K 600 1200 597 NONE
RECOMMENDATION:
1. For optimal performance, configure system with expected number of pages for every supported system
pagesize prior to the next instance restart operation.
SQL> SHOW PARAMETER use_large_pages
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
use_large_pages string TRUE
– 起動ログ
– Huge Pages 領域が確保できない場合は、確保できる部分のみ Huge Pages を使用するとログが出力される
5
Huge Pages
PostgreSQL では?
– GUC huge_pages = try がデフォルト
– Huge Pages 領域を確保しようとするが、必要な領域が不足した場合は Huge Pages を一切使わない
– 成功も失敗もログには何も出力されないので /proc/meminfo とかで確認する必要がある
– 確保しようとした共有メモリー量は「log_min_messages = DEBUG3」にしないと出力されない
– ログ出力例
6
DEBUG: invoking IpcMemoryCreate(size=148324352)
DEBUG: mmap(148897792) with MAP_HUGETLB failed, huge pages disabled: Cannot allocate memory
Logical Replication
必要なリソース
– 多くの機能が関係する
– WAL にロジカル・レプリケーションに必要な情報を付与(wal_level = logical)
– WAL Sender プロセスの使用 (max_wal_senders > 0)
– Replication Slot の使用 (max_replication_slots > 0)
7
Primary Database Standby Database
wal_level = replica
max_wal_senders = 0
max_replication_slots = 0
CREATE SUBSCRIPTION sub1
ERROR: could not create replication slot "sub1":
ERROR: logical decoding requires wal_level >= logical
ERROR: could not connect to the publisher: connection to server on
socket …" failed: FATAL: number of requested standby connections
exceeds max_wal_senders (currently 0)
ERROR: could not create replication slot "sub1": ERROR:
replication slots can only be used if max_replication_slots > 0
Logical Replication
必要なリソース
– 現状ではプライマリ・インスタンスのリソース不足時 CREATE SUBSCRIPTION文は成功する
– プライマリ・インスタンスでは以下のエラー・ログが定期的に出力される
– max_wal_senders 不足時のプライマリ・インスタンスのエラー
8
FATAL: number of requested standby connections exceeds max_wal_senders (currently 1)
ERROR: all replication slots are in use
HINT: Free one or increase max_replication_slots.
STATEMENT: CREATE_REPLICATION_SLOT "pg_32786_sync_32778_6997334902875904787" LOGICAL
pgoutput USE_SNAPSHOT
ERROR: replication slot "pg_32786_sync_32778_6997334902875904787" does not exist
STATEMENT: DROP_REPLICATION_SLOT pg_32786_sync_32778_6997334902875904787 WAIT
– max_replication_slots 不足時のプライマリ・インスタンスのエラー
Logical Replication
必要なリソース
– PostgreSQL 14 における変更
– PostgreSQL 13 では、初期データ移行と差分更新が同一のトランザクションで実施されていた
– PostgreSQL 14 ではそれぞれ独立したトランザクションで実行される(Commit Hash: ce0fdbfe)
– それぞれレプリケーション・スロットと WAL Sender が割り当てられるため、一時的に2倍のリソースが必要
– 現状では一度リソース不足のエラー・メッセージが出力されると、SUBSCRIPTION を削除するまでエ
ラーが解消されない?
9
コマンド・パラメーター
数値型のパラメーターに文字列を指定
– エラーが発生するコマンドは?
10
$ pg_basebackup -D data.bck --compress=ABC
$ pg_ctl --wait --timeout=DEF start
$ pg_ctl kill TERM GHI
$ pg_dump --compress=JKL --extra-float-digits=MNO
$ pg_dumpall --extra-float-digits=PQR
$ pg_receivewal -D data.rcv --compress=STU --status-interval=VWX
$ pg_recvlogical --fsync-interval=YZA --status-interval=BCD
$ pgbench pgbench --initialize --partitions=EFG
$ vacuumdb --parallel=HIJ
– 全部動作します。
– PostgreSQL 14 Beta 3 まで
コマンド・パラメーター
数値型のパラメーターに文字列を指定
– ソースコード
11
case 'Z': /* Compression Level */
compressLevel = atoi(optarg);
if (compressLevel < 0 || compressLevel > 9)
{
pg_log_error("compression level must be in range 0..9");
…
– PostgreSQL 15dev では改善
– 2021/7/24: Unify parsing logic for command-line integer options / Commit Hash: b859d94c で修正
case 'Z': /* Compression Level */
if (!option_parse_int(optarg, "-Z/--compress", 0, 9,
&compressLevel))
exit_nicely(1);
…
UNLOGGED TABLE
クラッシュ・リカバリ中のデータ削除
– マニュアル(CREATE TABLE)
12
クラッシュまたは異常停止の後、ログを取らないテーブルは自動的に切り詰められます。
– クラッシュ・リカバリ中のログ
LOG: listening on IPv4 address "127.0.0.1", port 5432
LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
LOG: database system was interrupted; last known up at 2021-08-23 12:54:55 JST
LOG: database system was not properly shut down; automatic recovery in progress
LOG: redo starts at 0/96F8E68
invalid record length at 0/FB7E220: wanted 24, got 0
LOG: redo done at 0/FB7E1B8 system usage: CPU: user: 0.21 s, system: 0.04 s, elapsed: 0.25 s
LOG: database system is ready to accept connections
– 「log_min_messages = DEBUG1」設定時のログ
DEBUG: resetting unlogged relations: cleanup 0 init 1
予告
篠田の虎の巻
– Citus 10 の検証資料を作成中
– Columnar Table
– Shard Rebalancer
– Etc.
– Azure Database for PostgreSQL – Hyperscale (Citus) now GA
– https://azure.microsoft.com/en-us/updates/azure-database-for-postgresql-hyperscale-citus-columnar-
compression-now-generally-available/
– 9月前半には公開予定
13
THANK YOU
Mail: noriyoshi.shinoda@hpe.com
Twitter: @nori_shinoda
Ad

Recommended

db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
Noriyoshi Shinoda
 
PostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVS
Noriyoshi Shinoda
 
PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10
Noriyoshi Shinoda
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)
Noriyoshi Shinoda
 
Babelfish Compatibility
Babelfish Compatibility
Noriyoshi Shinoda
 
Add PLEASE clause to Oracle Database
Add PLEASE clause to Oracle Database
Noriyoshi Shinoda
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1
Noriyoshi Shinoda
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
 
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
Shinya Sugiyama
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要
Shinya Sugiyama
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
Michitoshi Yoshida
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理
Shinya Sugiyama
 
MySQL Partition Engine
MySQL Partition Engine
Shinya Sugiyama
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
Migr8.rb チュートリアル
Migr8.rb チュートリアル
kwatch
 
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
Shinya Sugiyama
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介
Shinya Sugiyama
 
MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較
Shinya Sugiyama
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
Insight Technology, Inc.
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
 
MySQLとPostgreSQLの基本的なレプリケーション設定比較
MySQLとPostgreSQLの基本的なレプリケーション設定比較
Shinya Sugiyama
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_body
kasaharatt
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
kasaharatt
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
yoku0825
 
EDB Postgres Vision 2019
EDB Postgres Vision 2019
Noriyoshi Shinoda
 
MySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したこと
Satoshi Suzuki
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
Yoshiyuki Asaba
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
NTT DATA Technology & Innovation
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
 

More Related Content

What's hot (18)

MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
Shinya Sugiyama
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要
Shinya Sugiyama
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
Michitoshi Yoshida
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理
Shinya Sugiyama
 
MySQL Partition Engine
MySQL Partition Engine
Shinya Sugiyama
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
Migr8.rb チュートリアル
Migr8.rb チュートリアル
kwatch
 
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
Shinya Sugiyama
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介
Shinya Sugiyama
 
MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較
Shinya Sugiyama
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
Insight Technology, Inc.
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
 
MySQLとPostgreSQLの基本的なレプリケーション設定比較
MySQLとPostgreSQLの基本的なレプリケーション設定比較
Shinya Sugiyama
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_body
kasaharatt
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
kasaharatt
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
yoku0825
 
EDB Postgres Vision 2019
EDB Postgres Vision 2019
Noriyoshi Shinoda
 
MySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したこと
Satoshi Suzuki
 
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
Shinya Sugiyama
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要
Shinya Sugiyama
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
Michitoshi Yoshida
 
MySQLとPostgreSQLにおける基本的なアカウント管理
MySQLとPostgreSQLにおける基本的なアカウント管理
Shinya Sugiyama
 
Migr8.rb チュートリアル
Migr8.rb チュートリアル
kwatch
 
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
Shinya Sugiyama
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介
Shinya Sugiyama
 
MySQLとPostgreSQLの基本的なパラメータ比較
MySQLとPostgreSQLの基本的なパラメータ比較
Shinya Sugiyama
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
Insight Technology, Inc.
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
 
MySQLとPostgreSQLの基本的なレプリケーション設定比較
MySQLとPostgreSQLの基本的なレプリケーション設定比較
Shinya Sugiyama
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_body
kasaharatt
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
kasaharatt
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
yoku0825
 
MySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したこと
Satoshi Suzuki
 

Similar to PostgreSQL Unconference #26 No Error on PostgreSQL (20)

位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
Yoshiyuki Asaba
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
NTT DATA Technology & Innovation
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA OSS Professional Services
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
NTT DATA Technology & Innovation
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
Shigeru Hanada
 
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
 
PostgreSQLのソース・ターゲットエンドポイントとしての利用
PostgreSQLのソース・ターゲットエンドポイントとしての利用
QlikPresalesJapan
 
A Tour of PostgreSQL
A Tour of PostgreSQL
EDB
 
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
 
Heroku Postgres
Heroku Postgres
Salesforce Developers Japan
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
Uptime Technologies LLC (JP)
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
Yoshiyuki Asaba
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
NTT DATA Technology & Innovation
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説
Masahiko Sawada
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
NTT DATA Technology & Innovation
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
Shigeru Hanada
 
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Uptime Technologies LLC (JP)
 
PostgreSQLのソース・ターゲットエンドポイントとしての利用
PostgreSQLのソース・ターゲットエンドポイントとしての利用
QlikPresalesJapan
 
A Tour of PostgreSQL
A Tour of PostgreSQL
EDB
 
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
 
Ad

More from Noriyoshi Shinoda (17)

PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU Collation
Noriyoshi Shinoda
 
Citus 10 verification result (Japanese)
Citus 10 verification result (Japanese)
Noriyoshi Shinoda
 
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
Noriyoshi Shinoda
 
PostgreSQL 14 Beta 1 New Features with Examples (English)
PostgreSQL 14 Beta 1 New Features with Examples (English)
Noriyoshi Shinoda
 
PostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GA
Noriyoshi Shinoda
 
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)
Noriyoshi Shinoda
 
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)
Noriyoshi Shinoda
 
PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)
Noriyoshi Shinoda
 
Citus 7.5 Beta 検証結果
Citus 7.5 Beta 検証結果
Noriyoshi Shinoda
 
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)
Noriyoshi Shinoda
 
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)
Noriyoshi Shinoda
 
PostgreSQL 10 Beta1 New Features (Japanese)
PostgreSQL 10 Beta1 New Features (Japanese)
Noriyoshi Shinoda
 
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
Noriyoshi Shinoda
 
PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU Collation
Noriyoshi Shinoda
 
Citus 10 verification result (Japanese)
Citus 10 verification result (Japanese)
Noriyoshi Shinoda
 
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
Noriyoshi Shinoda
 
PostgreSQL 14 Beta 1 New Features with Examples (English)
PostgreSQL 14 Beta 1 New Features with Examples (English)
Noriyoshi Shinoda
 
PostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GA
Noriyoshi Shinoda
 
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)
Noriyoshi Shinoda
 
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)
Noriyoshi Shinoda
 
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)
Noriyoshi Shinoda
 
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)
Noriyoshi Shinoda
 
PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)
Noriyoshi Shinoda
 
PostgreSQL 10 Beta1 New Features (Japanese)
PostgreSQL 10 Beta1 New Features (Japanese)
Noriyoshi Shinoda
 
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
Noriyoshi Shinoda
 
Ad

PostgreSQL Unconference #26 No Error on PostgreSQL

  • 1. PostgreSQL エラーが出ない話 Noriyoshi Shinoda August 24, 2021 PostgreSQL Un-Conference #26
  • 2. SPEAKER 篠田典良(しのだのりよし) – 所属 – 日本ヒューレット・パッカード株式会社 – 現在の業務 – PostgreSQL をはじめ、Oracle Database, Microsoft SQL Server, Vertica 等 RDBMS 全般に関するシステムの 設計、移行、チューニング、コンサルティング – Oracle ACE (2009 年 4 月~) – オープンソース製品に関する調査、検証 – PostgreSQL 14 に対して – psql コマンドに CREATE OR REPLACE TRIGGER 文のタブ補完(bf0aa7c4) – pg_stat_replication_slots カタログの列名変更(03d51b77)など – 関連する 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
  • 3. SPEAKER 篠田典良(しのだのりよし) – PostgreSQL Unconference #15 – 2020年7月30日 – 検知できない破壊の話 – PostgreSQL Unconference #20 – 2021年2月2日 – プロセス障害の話 – PostgreSQL Unconference #26 – 2021年8月24日 – エラーが出ない話 – スライドはこちら – https://www.slideshare.net/noriyoshishinoda 2
  • 4. Huge Pages Huge Pages とは? – Linux における複数サイズのメモリー・ページを管理する仕組み – 通常 4KB のページで管理する領域以外に 2MB ページ(デフォルト)の領域を追加 – Huge Pages を意識させない Transparent Huge Pages 機能もあるが DBMS サーバには非推奨 – カーネル・パラメーター vm.nr_hugepages にページ数を指定(デフォルト 0) – 参考: – Huge Page とは何ですか? これを使用する利点は? –https://access.redhat.com/ja/solutions/293173 – Tuning Red Hat Enterprise Linux Family for PostgreSQL –https://www.enterprisedb.com/blog/tuning-red-hat-enterprise-linux-family-postgresql 3
  • 5. Huge Pages MySQL では? – 設定 – PostgreSQL の huge_pages = try に近い動作 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.24) starting as process 116322 [System] [MY-013576] [InnoDB] InnoDB initialization has started. [Warning] [MY-012677] [InnoDB] Failed to allocate 138412032 bytes. errno 1 [Warning] [MY-012679] [InnoDB] Using conventional memory pool [System] [MY-013577] [InnoDB] InnoDB initialization has ended. # cat /etc/my.cnf [mysqld] large-pages – 起動ログ – Huge Pages 領域が確保できないので通常メモリーを使用するログが出力される 4
  • 6. Huge Pages Oracle Database では? – 設定 – PostgreSQL の huge_pages = try に近い動作 Supported system pagesize(s): PAGESIZE AVAILABLE_PAGES EXPECTED_PAGES ALLOCATED_PAGES ERROR(s) 4K Configured 4 309127 NONE 2048K 600 1200 597 NONE RECOMMENDATION: 1. For optimal performance, configure system with expected number of pages for every supported system pagesize prior to the next instance restart operation. SQL> SHOW PARAMETER use_large_pages NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ use_large_pages string TRUE – 起動ログ – Huge Pages 領域が確保できない場合は、確保できる部分のみ Huge Pages を使用するとログが出力される 5
  • 7. Huge Pages PostgreSQL では? – GUC huge_pages = try がデフォルト – Huge Pages 領域を確保しようとするが、必要な領域が不足した場合は Huge Pages を一切使わない – 成功も失敗もログには何も出力されないので /proc/meminfo とかで確認する必要がある – 確保しようとした共有メモリー量は「log_min_messages = DEBUG3」にしないと出力されない – ログ出力例 6 DEBUG: invoking IpcMemoryCreate(size=148324352) DEBUG: mmap(148897792) with MAP_HUGETLB failed, huge pages disabled: Cannot allocate memory
  • 8. Logical Replication 必要なリソース – 多くの機能が関係する – WAL にロジカル・レプリケーションに必要な情報を付与(wal_level = logical) – WAL Sender プロセスの使用 (max_wal_senders > 0) – Replication Slot の使用 (max_replication_slots > 0) 7 Primary Database Standby Database wal_level = replica max_wal_senders = 0 max_replication_slots = 0 CREATE SUBSCRIPTION sub1 ERROR: could not create replication slot "sub1": ERROR: logical decoding requires wal_level >= logical ERROR: could not connect to the publisher: connection to server on socket …" failed: FATAL: number of requested standby connections exceeds max_wal_senders (currently 0) ERROR: could not create replication slot "sub1": ERROR: replication slots can only be used if max_replication_slots > 0
  • 9. Logical Replication 必要なリソース – 現状ではプライマリ・インスタンスのリソース不足時 CREATE SUBSCRIPTION文は成功する – プライマリ・インスタンスでは以下のエラー・ログが定期的に出力される – max_wal_senders 不足時のプライマリ・インスタンスのエラー 8 FATAL: number of requested standby connections exceeds max_wal_senders (currently 1) ERROR: all replication slots are in use HINT: Free one or increase max_replication_slots. STATEMENT: CREATE_REPLICATION_SLOT "pg_32786_sync_32778_6997334902875904787" LOGICAL pgoutput USE_SNAPSHOT ERROR: replication slot "pg_32786_sync_32778_6997334902875904787" does not exist STATEMENT: DROP_REPLICATION_SLOT pg_32786_sync_32778_6997334902875904787 WAIT – max_replication_slots 不足時のプライマリ・インスタンスのエラー
  • 10. Logical Replication 必要なリソース – PostgreSQL 14 における変更 – PostgreSQL 13 では、初期データ移行と差分更新が同一のトランザクションで実施されていた – PostgreSQL 14 ではそれぞれ独立したトランザクションで実行される(Commit Hash: ce0fdbfe) – それぞれレプリケーション・スロットと WAL Sender が割り当てられるため、一時的に2倍のリソースが必要 – 現状では一度リソース不足のエラー・メッセージが出力されると、SUBSCRIPTION を削除するまでエ ラーが解消されない? 9
  • 11. コマンド・パラメーター 数値型のパラメーターに文字列を指定 – エラーが発生するコマンドは? 10 $ pg_basebackup -D data.bck --compress=ABC $ pg_ctl --wait --timeout=DEF start $ pg_ctl kill TERM GHI $ pg_dump --compress=JKL --extra-float-digits=MNO $ pg_dumpall --extra-float-digits=PQR $ pg_receivewal -D data.rcv --compress=STU --status-interval=VWX $ pg_recvlogical --fsync-interval=YZA --status-interval=BCD $ pgbench pgbench --initialize --partitions=EFG $ vacuumdb --parallel=HIJ – 全部動作します。 – PostgreSQL 14 Beta 3 まで
  • 12. コマンド・パラメーター 数値型のパラメーターに文字列を指定 – ソースコード 11 case 'Z': /* Compression Level */ compressLevel = atoi(optarg); if (compressLevel < 0 || compressLevel > 9) { pg_log_error("compression level must be in range 0..9"); … – PostgreSQL 15dev では改善 – 2021/7/24: Unify parsing logic for command-line integer options / Commit Hash: b859d94c で修正 case 'Z': /* Compression Level */ if (!option_parse_int(optarg, "-Z/--compress", 0, 9, &compressLevel)) exit_nicely(1); …
  • 13. UNLOGGED TABLE クラッシュ・リカバリ中のデータ削除 – マニュアル(CREATE TABLE) 12 クラッシュまたは異常停止の後、ログを取らないテーブルは自動的に切り詰められます。 – クラッシュ・リカバリ中のログ LOG: listening on IPv4 address "127.0.0.1", port 5432 LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" LOG: database system was interrupted; last known up at 2021-08-23 12:54:55 JST LOG: database system was not properly shut down; automatic recovery in progress LOG: redo starts at 0/96F8E68 invalid record length at 0/FB7E220: wanted 24, got 0 LOG: redo done at 0/FB7E1B8 system usage: CPU: user: 0.21 s, system: 0.04 s, elapsed: 0.25 s LOG: database system is ready to accept connections – 「log_min_messages = DEBUG1」設定時のログ DEBUG: resetting unlogged relations: cleanup 0 init 1
  • 14. 予告 篠田の虎の巻 – Citus 10 の検証資料を作成中 – Columnar Table – Shard Rebalancer – Etc. – Azure Database for PostgreSQL – Hyperscale (Citus) now GA – https://azure.microsoft.com/en-us/updates/azure-database-for-postgresql-hyperscale-citus-columnar- compression-now-generally-available/ – 9月前半には公開予定 13