OSS-DB Gold Ver.3.0 取得とoldest xminについて

この記事はPostgreSQL Advent Calendar 2023の24日目の記事です。

PostgreSQLのカレンダー | Advent Calendar 2023 - Qiitaqiita.com

OSS-DB Gold Ver.3.0 を取得しました

とりあえず

12/21(木) にOSS-DB Gold Ver.3.0 を取りました。OSS-Silver と Gold の有意性の期限が2028年12月21日まで延びました。

経緯

5年前(2018年)の PostgreSQL Advent Calendar 2018 の最終日(25日目)に、OSS-DB Silver と Gold を取った記事を書きました。明日(2023/12/25)でちょうど丸5年になります。

kitayamat.hatenablog.com

OSS-DB Silver / Gold の有意性の期限は「認定日から5年以内」となっており、取得日から5年以内に再度OSS-DB Goldに合格しないと認定ステイタスが「Active」から「Inactive」になってしまいます。

oss-db.jp

資格を取得したこと自体は消えないのですが、今の仕事はPostgreSQLサポートで所属するグループでは有意性を保持したOSS-DB Goldの資格が必須となっていて、所属会社として出来る限りランキングに出るモチベーションもあります。あまり早く受けると次の5年が短くなるので出来るだけ5年間の有意性の期限を長くするために、期限が切れる5日前の12/21に受けました。5日間の余裕は落ちた場合に再受験をする猶予期間でした(このブログを書くネタにする意図もありました)。

oss-db.jp

準備

OSS-DB Ver.3.0認定教材

学習教材のご紹介(OSS-DB認定教材)

OSS-DB Gold(2023年2月現在)

https://oss-db.jp/learning#gold

現時点で存在するGold Ver.3.0の学習教材は下記の二つで、出来れば両方使った感想を書きたかったのですが、準備不足のため使ったのは後者のみとなりました(理由は後述)。

  1. OSS-DB Gold 攻略会 Ver.3.0対応
  2. PostgreSQL運用管理トレーニング PostgreSQL 14対応

一つ目の「OSS-DB Gold 攻略会 Ver.3.0対応」はnoteのメンバーシップ、すなわち月単位のサブスクリプション形式で解説テキストや問題集を閲覧できるもので、OSS-DB Goldの解説テキストを閲覧できるスタンダードプランは月1000円、前者に加えてOSS-DB Goldの問題集とOSS-Silverの解説テキストを閲覧できるプレミアムプランは月3000円となります。今回はこの存在を知ったのが試験直前の一週間前で(単なる準備不足&一応仕事も忙しかった)、二つ目のトレーニングテキストも一通り読んでない状態でサブスクリプションを申し込んでも私の性格的にろくに見ずに試験日が来ると思ったので、残念ながら今回の受験では見送りました。本当は問題集をやりこんで自分の弱点を残らず埋めていくのがいいのですが、一か月前に認定教材ぐらいはチェックしておくべきでした。

OSS-DB Gold 攻略会|Watary

二つ目の「PostgreSQL運用管理トレーニング PostgreSQL14対応」は仕事をしているSRA OSS LLCのトレーニングテキストで、ちょうどOSS-DB Ver.3.0の範囲であるPostgreSQL 14に対応したテキストです。前回は試験範囲よりも古いテキストで、テキストをやっても新しいバージョン分の差分が必要という面倒臭さがありましたが、今回はこれをやっておけば大丈夫と安心して学べました。トレーニングを受講すると入手できますが、自習者向けにトレーニングテキストだけの購入も可能です。

OSS-DB 教材 | SRA OSS Online Shop

行なった試験勉強

上にも書きましたが実際に着手したのが一週間前で、実行した内容は下記の4点になります。

  1. 「OSS-DB Gold Ver.3.0」の出題範囲を印刷して眺める。→大丈夫そうか大丈夫そうではないかを判断する。
  2. PostgreSQL運用管理トレーニング PostgreSQL14対応」を一通り読む。→出題範囲を意識して一通り理解する。
  3. OSS-DB Gold Ver.1.0対応の「LPI-Japan OSS-DB Gold 認定教材 PostgreSQL 高度技術者育成テキスト」の模擬問題集のうち、Ver.3.0から外れた容量見積以外の問題を解いて解説を読む。→問題を解くと実際には理解できていない・覚えていない箇所が分かるので、2.のテキストの該当箇所を読み直す。
  4. 公式サイトの例題解説を解く。→3.と同様、弱い部分を2.のテキストの該当箇所を読み直す。

上記の結果、時間も無くなって合格点はたぶん大丈夫だろうと判断して受験しました。5年前の前回が80点、今回が90点でした。30問中、27問正解、3問間違いということになります。運用管理とパフォーマンスチューニングが上がって、障害対応は変わらず、性能管理が下がりました。100点を目指すには出題範囲の用語や内容を完璧に理解して反応(回答)できるようにしておく必要がありますが、そこまで網羅的には出来ていませんでした。90点は上出来だと思いますが、PostgreSQLサポートの仕事を4年半続けているので「受かって当たり前」「合格した上で何点取れるか」という思いはあるので、「受かって嬉しい」という気持ちはあまりなく、嬉しいのは嬉しいですが「受かってホッとした」というのが正直なところです。

試験時間は30問で90分あるので1問あたり3分と余裕があることと、計算問題はまったくなかったので時間がかかるような問題は無く、知っているか知っていないか、選択肢を間違わないかどうか、だけですので後で見直すチェックを付けながら一通り回答して30分、その後見直しを10分ほどしたので、実際に使った時間は40分程度でした。

試験結果

今回(OSS-DB Ver.3.0)の結果

受験日:2023/12/21

取得点:90

合格ライン:70

結果:合格

 

運用管理:100%

性能管理:77%

パフォーマンスチューニング:100%

障害対応:83%

前回(OSS-DB Ver.1.0)の結果

受験日:2018/12/25

取得点:80

合格ライン:70

結果:合格

 

運用管理:66%

性能管理:88%

パフォーマンスチューニング:83%

障害対応:83%

資格を持っているからと言って仕事ができるとは限らない?

よく「資格を持っていても仕事が出来るとは限らない」「資格取得は無駄」という意見を見ますが、前者は真で、後者は偽と私は思っています。

「資格を持っているだけで仕事が出来る証明にはならない」のはその通りで、5年前の私はPostgreSQLの実務経験はほとんどない状態で80点を取ってOSS-DB Goldを取りましたが、PostgreSQLでバリバリ仕事ができるという状態ではなかったです。その後、PostgreSQLのサポートで日常的にPostgreSQLを触ってドキュメントとソースコードを読んでいるので、5年前とは格段に違ったPostgreSQLの実務経験がついていますが、今回のOSS-DB Goldの点数と前回の点数との差は10点しかありません。5年前は仕事が忙しくなかったので全力で2週間試験準備をしたのと、Ver.1.0とVer.3.0との難易度の差もあるかもしれませんが、実務経験があっても、試験の点数がたったの10点しか差が無いので、実務経験のありなしを資格試験を持っているかどうか、そして点数では計れるものではないと思います。

ですが、資格試験にも良いところはあって「網羅的に一通りその分野のことについて学ぶ」というのは大事なことで、「どんなものがあるかを知っておく」「何ががあったら気付くようにするよう脳内にインデックスを作っておく」のが重要です。今回もPostgreSQL 14対応のトレーニングテキストを読んで馴染みが無い項目というか新たな発見がいくつかありました。また、資格試験に受かった瞬間だけでもその問題は解けているので「何もしていない(資格を持っていない)人よりは技術的にできる可能性が高い」ことは事実だと思いますので、「技術的な知識を獲得する」ことと「実務的な経験を得る」ことの両方を進めるべきだと考えます。

お勧めの教材/教科書

上記に書いた以外で触れていない教材としてまっさきに紹介するのは下記の「[改訂3版] 内部構造から学ぶPostgreSQL-設計・運用計画の鉄則」になります。中上級者向けの内容が多いと思いますが、PostgreSQL 14対応で、技術的な解説と実務経験に役立つノウハウが詰まっています。PostgreSQLに携わる人はこの本を常に傍らに置いて読む・参照することをお勧めします。

gihyo.jp

また、PostgreSQL本体とそれ以外(contribとサードバーティソフトウェア)の紹介として有用なのが、企業のコミュニティで各種検証を行なったPGECons(PostgreSQLコンソーシアム)の成果物の「PostgreSQL自習書」です。「Oracleデータベース経験者がPostgreSQLの概要を理解することを目的とした技術文書です。」との説明なので、差異を知りたいOracle DBを使っている人にはもちろん読みやすい内容ですが、Oracle DB技術者以外でもPostgreSQL本体とcontrib、プラスサードバーティソフトウェアを組み合わせてどのようなことができるかの紹介としてまとまった内容となっています。

リンクが二つありますが「本文(PDF):PostgreSQL12以降」の方です。こちらはPostgreSQL 14がベースとなっています。

PostgreSQL エンタープライズ・コンソーシアム : 活動報告トップページ

oldest xminについて

VACUUMを何度実行しても、VACUUMの実行ログで「DETAIL:  5182 dead row versions cannot be removed yet, oldest xmin: 134852157」といったメッセージが出て dead row versions の数字が減るどころか増えていく一方でVACUUMが進まないという困った事象が発生することがあります。

発生する原因

oldest xminでVACUUMが進まない事象が発生する原因は、ロングトランザクション、使われていないレプリケーションスロット、残存した(孤児の)プリペアドステートメントの三つですが、よくある原因は一つ目と二つ目で、三つ目の原因には今まで出会ったことが無いです。

レプリケーション構成での落とし穴

レプリケーション構成の複数台のPostgreSQLサーバで発生する時の注意点は、hot_standby_feedback=on となっている場合のスタンバイ側での確認です。ロングトランザクションの存在確認は割とするのですが、スタンバイ側でのレプリケーションスロットが原因となっていることに気付かず、全然oldest xminが変わらない時がありました。原因は元プライマリであった時に存在していたレプリケーションスロットが残っていて、かつ hot_standby_feedback=onとなっていたために、ずっとoldest xminが変わらない状態が続いてしまいました。これがあってから、スタンバイ側ではpg_stat_activiityだけでなくpg_replication_slotsも確認するようになりました。

Xmin Horizon

今年のPostgreSQLカンファレンス2023のチュートリアルトラック【T2】でpganalyzeの織田 敬子さんが【T2】VACUUM Simulatorを使ってVACUUMをもっと理解しようというタイトルで講演をされてて、絶対時間内では終わらないけど後で読んでね!という伝えたいてんこ盛りの有用なVACUUMに関する講演資料が公表されています。この講演で日頃馴染んでいる「oldest xmin」を指す言葉として Xmin horizon という表現をしり、ソースコードを見るとPostgreSQLログへの出力などにはありませんでしたが、コメントのあちらこちらでこの単語を見かけました。

講演は、VACUUM Simulatorにたどり着く前にVACUUMの説明でほとんど時間を使ってしまいましたが、別途時間を取って後半部分のVACUUM Simulatorやpganalyzeについても話を伺いたいと思いました。

speakerdeck.com

https://www.postgresql.jp/jpug-pgcon2023#T2

終わりに

OSS-DB Gold取得について、ある程度のDB経験がある人が現時点でイチから勉強して受けるとすれば、「[改訂3版]内部構造から学ぶPostgreSQL ―設計・運用計画の鉄則」を読んでPostgreSQLを触る、OSS-DB Gold認定教材の二つを使って学ぶ、後者は可能ならばトレーニングを受講して学ぶ、になるかと思います。

VACUUMに関しては、4年前のPostgreSQL Advent Calendarのエントリでも書きましたがlog_autovacuum_min_duration=0にして全てのVACUUMの実行状況を把握しましょう、が現時点でもお伝えしたいことになります(もちろんlog_checkpoints=onも)。

kitayamat.hatenablog.com

織田さんのVACUUM講演資料はまだじっくり読み込めてないので時間を取って読んでみます。VACUUMは奥が深くて面白いです(大変ですが)。