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
コマンド・パラメーター 数値型のパラメーターに文字列を指定 – ソースコード 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 クラッシュ・リカバリ中のデータ削除 – マニュアル(CREATETABLE) 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