© 2021 NTT DATA Corporation
OSS-DB Gold 合格体験記
2021年12月21日 第29回PostgreSQLアンカンファレンス@オンライン
株式会社NTTデータ 技術開発本部
加藤 健
© 2021 NTT DATA Corporation 2
自己紹介
加藤 健
GitHub: @kkato
【経歴】
入社1年目社員
大学では物理学専攻
【趣味】
ボルダリング
© 2021 NTT DATA Corporation 3
OSS-DB認定者数上位企業
単年実績(2020年7月〜2021年6月)
OSS-DB Gold
1位:株式会社エヌ・ティ・ティ・データ
2位:富士通株式会社
3位:エヌ・ティ・ティ・コムウェア株式会社
OSS-DB Silver
1位:富士通株式会社
2位:国際電子ビジネス専門学校
3位:株式会社ランドコンピュータ
4位:株式会社エヌ・ティ・ティ・データ
4位:株式会社OKIソフトウェア
4位:南京富士通南大軟件技術有限公司
通期実績
OSS-DB Gold
1位:株式会社エヌ・ティ・ティ・データ
2位:富士通株式会社
3位:エヌ・ティ・ティ・コムウェア株式会社
OSS-DB Silver
1位:富士通株式会社
2位:株式会社エヌ・ティ・ティ・データ
3位:NECソリューションイノベータ株式会社
参考URL: https://oss-db.jp/award2021
© 2021 NTT DATA Corporation 4
OSS-DB Gold 合格体験記
これからOSS-DB Goldを受験される方の参考になれば幸いです!
© 2021 NTT DATA Corporation 5
OSS-DB Goldとは?
 OSS-DB技術者認定試験
NPO法人 LPI-Japanが行っている、オープンソースデータベース(OSS-DB)に関する認定資格
エンタープライズシステムでよく利用されるPostgreSQLの10以上を取り扱っている
※2019年4月時点で、11まで対応とのこと
SilverとGoldの2つのレベルがある
OSS-DB Silver:「データベースシステムの設計・開発・導入・運用ができる技術者」
OSS-DB Gold:「大規模データベースシステムの改善・運用管理・コンサルティングができる技術者」
Silverに比べ、
より深い知識が要求される
© 2021 NTT DATA Corporation 6
はじめに
 2021年6月 OSS-DB Gold ver2.0に合格!
しかし、受験するにあたり以下のようなことで困った:
• OSS-DB Goldの参考書がない
• OSS-DB Goldに関する情報(学習方法、学習時間の目安など)が少ない
※Silverは公式参考書、Ping-tなどがある
 目次:
• 学習時間(学習期間、総学習時間)
• 学習方法(教材、ヒント)
• 頻出問題(例題+解説、その他)
• さいごに(所感、反省点)
© 2021 NTT DATA Corporation 7
学習時間
 学習期間
Silver:2021年2月15日〜2021年2月28日(約2週間)
Gold:2021年5月10日〜 2021年6月19日(約6週間)※途中数回落ちた
 総学習時間
基本的に平日3時間、休日7時間
Silver:40時間程度
Gold:120時間程度
© 2021 NTT DATA Corporation 8
学習方法 (1/4)
 教材
使用した教材は以下の2つ:
• PostgreSQL運用管理トレーニングテキスト(PostgreSQL11対応)
SRA OSSが開催している研修にて入手
OSS-DB Goldで必要となる知識が網羅的に学べる
※「内部構造から学ぶPostgreSQL 設計・運用計画の鉄則」もおすすめ
• PostgreSQL日本語ドキュメント(公式ドキュメント)
日本PostgreSQLユーザ会がオンラインで公開している
資格勉強には10.5を使用した
© 2021 NTT DATA Corporation 9
学習方法 (2/4)
 ヒント
• 公式サイトの出題範囲を確認!
重要な用語、コマンド、パラメータが記載
問題数30問なので、重要度=問題数と
考えると辻褄が合う
運用管理(30%)
【9問】
データベースサーバ構築 【2問】
運用管理コマンド全般 【4問】
データベースの構造 【2問】
ホット・スタンバイ運用 【1問】
性能監視(30%)
【9問】
アクセス統計情報 【3問】
テーブル/カラム統計情報 【2問】
クエリ実行計画 【3問】
その他の性能監視情報 【1問】
パフォーマンスチューニング(20%)
【6問】
性能に関係するパラメータ 【4問】
チューニングの実施 【2問】
障害対応(20%)
【6問】
起こりうる障害のパターン 【3問】
破損クラスタ復旧 【2問】
ホット・スタンバイ復旧 【1問】
© 2021 NTT DATA Corporation 10
学習方法 (3/4)
• 公式ドキュメントは必読!
おすすめの章:
14.1. EXPLAINの利用
14.4. データベースへのデータ投入
15.1. パラレルクエリはどのように動くのか
18.3. データベースサーバの起動
19.4. 資源の消費
19.5. ログ先行書き込み(WAL)
19.6. レプリケーション
30.1. 信頼性
30.2. ログ先行書き込み(WAL)
© 2021 NTT DATA Corporation 11
学習方法 (4/4)
• 公式サイトのサンプル問題/例題解説をやりこむ!
問題数が多い + 解説付き
運用管理:17問
性能監視:15問
パフォーマンスチューニング:13問
障害対応:8問
実際の試験問題と異なるものの、問題の傾向/形式をつかむ上では〇
答えを丸暗記するよりも、しっかりと解説を読んで理解することが重要!
© 2021 NTT DATA Corporation 12
頻出問題 (1/5)
 テーブル/インデックスの見積もり(参考:OSS-DB公式サイト サンプル問題 運用管理 Q1.01)
以下のSQL文でテーブルを定義し、10万行を挿入する
テーブルのサイズとして最も適切なものを1つ選びなさい
1ブロックは8192バイトとし、インデックスのファイルサイズは含めないものとする
A. 1.2メガバイト
B. 2.3メガバイト
C. 4.6メガバイト
D. 9.2メガバイト
E. 18.4メガバイト
CREATE TABLE history (
tid INTEGER PRIMARY KEY,
aid INTEGER NOT NULL,
bid INTEGER NOT NULL,
mtime TIMESTAMP NOT NULL
);
© 2021 NTT DATA Corporation 13
頻出問題 (2/5)
 テーブル/インデックスの見積もり 解説
行のサイズ: 行ヘッダのサイズ(基本的に28バイト) + 各カラムのデータサイズ
→ 28 + 4 + 4 + 4 + 8 = 48 ※INTEGERは4バイト、TIMESTAMPは8バイト
ブロックに格納できる行数: (ブロックのサイズ– ブロックヘッダのサイズ(基本的に24バイト) ) / 行のサイズ
→ (8192 – 24) / 48 = 170 ※小数点以下切り捨て
必要なブロック数:10万行 / ブロックに格納できる行数
→ 100000 / 170 = 589 ※小数点以下切り上げ
テーブルのサイズ:ブロックのサイズ * 必要なブロック数
→ 8192 * 589 = 4,825,088 ※ ((4,825,088 / 1024) / 1024) = 4.6メガバイト
A. 1.2メガバイト
B. 2.3メガバイト
C. 4.6メガバイト
D. 9.2メガバイト
E. 18.4メガバイト
© 2021 NTT DATA Corporation 14
頻出問題 (3/5)
 EXPLAIN/EXPLAIN ANALYZE(参考:OSS-DB公式サイト サンプル問題 性能監視 Q2.16)
下記のEXPLAINの実行結果について、正しい記述を全て選んでください
A. 実際にSQLが実行される
B. 「Hash Join」、「Seq Scan on accounts」、「Hash」、「Seq Scan on tellers」は、プランナが選択した最適と思われるアルゴリズムを表している
C. 「cost」は、最初の行を取得するまでの実行時間と全ての行をするまでの実行時間を表している
D. 「rows」は、実際に取得した行数を表している
E. 「width」は、統計情報をもとに推定される1行あたりのバイトサイズを表している
postgres=# EXPLAIN SELECT * FROM accounts, tellers WHERE accounts.bid = tellers.bid;
QUERY PLAN
---------------------------------------------------------------------------------------------------------
Hash Join (cost=1.23..14141.23 rows=1000000 width=449)
Hash Cond: (accounts.bid = tellers.bid)
-> Seq Scan on accounts (cost=0.00..2640.00 rows=100000 width=97)
-> Hash (cost=1.10..1.06 rows=10 width=352)
-> Seq Scan on tellers(cost=0.00..1.10 rows=10 width=352)
(5 rows)
© 2021 NTT DATA Corporation 15
頻出問題 (4/5)
 EXPLAIN/EXPLAIN ANALYZE 解説
EXPLAIN ANALYZEでは実際にSQL文が実行されるが、EXPLAINでは実行されない
計画ノード:プランナが選択したアルゴリズム
初期推定コスト:最初の行を取得するまでの推定コスト(時間)
全体推定コスト:処理が完了するまでの推定コスト(時間)
行数:統計情報をもとに推定される処理行数
行の平均サイズ:統計情報をもとに推定される1行あたりのバイトサイズ
A. 実際にSQLが実行される
B. 「Hash Join」、「Seq Scan on accounts」、「Hash」、「Seq Scan on tellers」は、プランナが選択した最適と思われるアルゴリズムを表している
C. 「cost」は、最初の行を取得するまでの実行時間と全ての行をするまでの実行時間を表している
D. 「rows」は、実際に取得した行数を表している
E. 「width」は、統計情報をもとに推定される1行あたりのバイトサイズを表している
QUERY PLAN
---------------------------------------------------------------------------------------------------------
<計画ノード> (cost=<初期推定コスト>..<全体推定コスト> rows=<推定行数> width=<推定平均幅>)
© 2021 NTT DATA Corporation 16
頻出問題 (5/5)
 その他よく出る問題:
チェックサム
pgcrypto
REINDEX
pgstattuple
pg_statio_all_tables
pg_stat_statements
結合の種類(Nested Loop、Hash、Merge)と性能特性
shared_buffers
effective_cache_size
work_mem
maintenance_work_mem
wal_level
fsync
© 2021 NTT DATA Corporation 17
さいごに
 所感
• Silverの知識が前提になるものの、問題の傾向がかなり違うため、+αの知識が要求された
• 出題範囲が広いかつ深く、実務経験がないと分からないような問題もあった
• 資格勉強を通して、PostgreSQLの話にもある程度ついていけるようになった
 反省点
• 限られた時間の中でも、コマンド/設定オプションを絞り、実機を触りながら理解できればよかった
© 2021 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

OSS-DB Gold 合格体験記(第29回PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1.
    © 2021 NTTDATA Corporation OSS-DB Gold 合格体験記 2021年12月21日 第29回PostgreSQLアンカンファレンス@オンライン 株式会社NTTデータ 技術開発本部 加藤 健
  • 2.
    © 2021 NTTDATA Corporation 2 自己紹介 加藤 健 GitHub: @kkato 【経歴】 入社1年目社員 大学では物理学専攻 【趣味】 ボルダリング
  • 3.
    © 2021 NTTDATA Corporation 3 OSS-DB認定者数上位企業 単年実績(2020年7月〜2021年6月) OSS-DB Gold 1位:株式会社エヌ・ティ・ティ・データ 2位:富士通株式会社 3位:エヌ・ティ・ティ・コムウェア株式会社 OSS-DB Silver 1位:富士通株式会社 2位:国際電子ビジネス専門学校 3位:株式会社ランドコンピュータ 4位:株式会社エヌ・ティ・ティ・データ 4位:株式会社OKIソフトウェア 4位:南京富士通南大軟件技術有限公司 通期実績 OSS-DB Gold 1位:株式会社エヌ・ティ・ティ・データ 2位:富士通株式会社 3位:エヌ・ティ・ティ・コムウェア株式会社 OSS-DB Silver 1位:富士通株式会社 2位:株式会社エヌ・ティ・ティ・データ 3位:NECソリューションイノベータ株式会社 参考URL: https://oss-db.jp/award2021
  • 4.
    © 2021 NTTDATA Corporation 4 OSS-DB Gold 合格体験記 これからOSS-DB Goldを受験される方の参考になれば幸いです!
  • 5.
    © 2021 NTTDATA Corporation 5 OSS-DB Goldとは?  OSS-DB技術者認定試験 NPO法人 LPI-Japanが行っている、オープンソースデータベース(OSS-DB)に関する認定資格 エンタープライズシステムでよく利用されるPostgreSQLの10以上を取り扱っている ※2019年4月時点で、11まで対応とのこと SilverとGoldの2つのレベルがある OSS-DB Silver:「データベースシステムの設計・開発・導入・運用ができる技術者」 OSS-DB Gold:「大規模データベースシステムの改善・運用管理・コンサルティングができる技術者」 Silverに比べ、 より深い知識が要求される
  • 6.
    © 2021 NTTDATA Corporation 6 はじめに  2021年6月 OSS-DB Gold ver2.0に合格! しかし、受験するにあたり以下のようなことで困った: • OSS-DB Goldの参考書がない • OSS-DB Goldに関する情報(学習方法、学習時間の目安など)が少ない ※Silverは公式参考書、Ping-tなどがある  目次: • 学習時間(学習期間、総学習時間) • 学習方法(教材、ヒント) • 頻出問題(例題+解説、その他) • さいごに(所感、反省点)
  • 7.
    © 2021 NTTDATA Corporation 7 学習時間  学習期間 Silver:2021年2月15日〜2021年2月28日(約2週間) Gold:2021年5月10日〜 2021年6月19日(約6週間)※途中数回落ちた  総学習時間 基本的に平日3時間、休日7時間 Silver:40時間程度 Gold:120時間程度
  • 8.
    © 2021 NTTDATA Corporation 8 学習方法 (1/4)  教材 使用した教材は以下の2つ: • PostgreSQL運用管理トレーニングテキスト(PostgreSQL11対応) SRA OSSが開催している研修にて入手 OSS-DB Goldで必要となる知識が網羅的に学べる ※「内部構造から学ぶPostgreSQL 設計・運用計画の鉄則」もおすすめ • PostgreSQL日本語ドキュメント(公式ドキュメント) 日本PostgreSQLユーザ会がオンラインで公開している 資格勉強には10.5を使用した
  • 9.
    © 2021 NTTDATA Corporation 9 学習方法 (2/4)  ヒント • 公式サイトの出題範囲を確認! 重要な用語、コマンド、パラメータが記載 問題数30問なので、重要度=問題数と 考えると辻褄が合う 運用管理(30%) 【9問】 データベースサーバ構築 【2問】 運用管理コマンド全般 【4問】 データベースの構造 【2問】 ホット・スタンバイ運用 【1問】 性能監視(30%) 【9問】 アクセス統計情報 【3問】 テーブル/カラム統計情報 【2問】 クエリ実行計画 【3問】 その他の性能監視情報 【1問】 パフォーマンスチューニング(20%) 【6問】 性能に関係するパラメータ 【4問】 チューニングの実施 【2問】 障害対応(20%) 【6問】 起こりうる障害のパターン 【3問】 破損クラスタ復旧 【2問】 ホット・スタンバイ復旧 【1問】
  • 10.
    © 2021 NTTDATA Corporation 10 学習方法 (3/4) • 公式ドキュメントは必読! おすすめの章: 14.1. EXPLAINの利用 14.4. データベースへのデータ投入 15.1. パラレルクエリはどのように動くのか 18.3. データベースサーバの起動 19.4. 資源の消費 19.5. ログ先行書き込み(WAL) 19.6. レプリケーション 30.1. 信頼性 30.2. ログ先行書き込み(WAL)
  • 11.
    © 2021 NTTDATA Corporation 11 学習方法 (4/4) • 公式サイトのサンプル問題/例題解説をやりこむ! 問題数が多い + 解説付き 運用管理:17問 性能監視:15問 パフォーマンスチューニング:13問 障害対応:8問 実際の試験問題と異なるものの、問題の傾向/形式をつかむ上では〇 答えを丸暗記するよりも、しっかりと解説を読んで理解することが重要!
  • 12.
    © 2021 NTTDATA Corporation 12 頻出問題 (1/5)  テーブル/インデックスの見積もり(参考:OSS-DB公式サイト サンプル問題 運用管理 Q1.01) 以下のSQL文でテーブルを定義し、10万行を挿入する テーブルのサイズとして最も適切なものを1つ選びなさい 1ブロックは8192バイトとし、インデックスのファイルサイズは含めないものとする A. 1.2メガバイト B. 2.3メガバイト C. 4.6メガバイト D. 9.2メガバイト E. 18.4メガバイト CREATE TABLE history ( tid INTEGER PRIMARY KEY, aid INTEGER NOT NULL, bid INTEGER NOT NULL, mtime TIMESTAMP NOT NULL );
  • 13.
    © 2021 NTTDATA Corporation 13 頻出問題 (2/5)  テーブル/インデックスの見積もり 解説 行のサイズ: 行ヘッダのサイズ(基本的に28バイト) + 各カラムのデータサイズ → 28 + 4 + 4 + 4 + 8 = 48 ※INTEGERは4バイト、TIMESTAMPは8バイト ブロックに格納できる行数: (ブロックのサイズ– ブロックヘッダのサイズ(基本的に24バイト) ) / 行のサイズ → (8192 – 24) / 48 = 170 ※小数点以下切り捨て 必要なブロック数:10万行 / ブロックに格納できる行数 → 100000 / 170 = 589 ※小数点以下切り上げ テーブルのサイズ:ブロックのサイズ * 必要なブロック数 → 8192 * 589 = 4,825,088 ※ ((4,825,088 / 1024) / 1024) = 4.6メガバイト A. 1.2メガバイト B. 2.3メガバイト C. 4.6メガバイト D. 9.2メガバイト E. 18.4メガバイト
  • 14.
    © 2021 NTTDATA Corporation 14 頻出問題 (3/5)  EXPLAIN/EXPLAIN ANALYZE(参考:OSS-DB公式サイト サンプル問題 性能監視 Q2.16) 下記のEXPLAINの実行結果について、正しい記述を全て選んでください A. 実際にSQLが実行される B. 「Hash Join」、「Seq Scan on accounts」、「Hash」、「Seq Scan on tellers」は、プランナが選択した最適と思われるアルゴリズムを表している C. 「cost」は、最初の行を取得するまでの実行時間と全ての行をするまでの実行時間を表している D. 「rows」は、実際に取得した行数を表している E. 「width」は、統計情報をもとに推定される1行あたりのバイトサイズを表している postgres=# EXPLAIN SELECT * FROM accounts, tellers WHERE accounts.bid = tellers.bid; QUERY PLAN --------------------------------------------------------------------------------------------------------- Hash Join (cost=1.23..14141.23 rows=1000000 width=449) Hash Cond: (accounts.bid = tellers.bid) -> Seq Scan on accounts (cost=0.00..2640.00 rows=100000 width=97) -> Hash (cost=1.10..1.06 rows=10 width=352) -> Seq Scan on tellers(cost=0.00..1.10 rows=10 width=352) (5 rows)
  • 15.
    © 2021 NTTDATA Corporation 15 頻出問題 (4/5)  EXPLAIN/EXPLAIN ANALYZE 解説 EXPLAIN ANALYZEでは実際にSQL文が実行されるが、EXPLAINでは実行されない 計画ノード:プランナが選択したアルゴリズム 初期推定コスト:最初の行を取得するまでの推定コスト(時間) 全体推定コスト:処理が完了するまでの推定コスト(時間) 行数:統計情報をもとに推定される処理行数 行の平均サイズ:統計情報をもとに推定される1行あたりのバイトサイズ A. 実際にSQLが実行される B. 「Hash Join」、「Seq Scan on accounts」、「Hash」、「Seq Scan on tellers」は、プランナが選択した最適と思われるアルゴリズムを表している C. 「cost」は、最初の行を取得するまでの実行時間と全ての行をするまでの実行時間を表している D. 「rows」は、実際に取得した行数を表している E. 「width」は、統計情報をもとに推定される1行あたりのバイトサイズを表している QUERY PLAN --------------------------------------------------------------------------------------------------------- <計画ノード> (cost=<初期推定コスト>..<全体推定コスト> rows=<推定行数> width=<推定平均幅>)
  • 16.
    © 2021 NTTDATA Corporation 16 頻出問題 (5/5)  その他よく出る問題: チェックサム pgcrypto REINDEX pgstattuple pg_statio_all_tables pg_stat_statements 結合の種類(Nested Loop、Hash、Merge)と性能特性 shared_buffers effective_cache_size work_mem maintenance_work_mem wal_level fsync
  • 17.
    © 2021 NTTDATA Corporation 17 さいごに  所感 • Silverの知識が前提になるものの、問題の傾向がかなり違うため、+αの知識が要求された • 出題範囲が広いかつ深く、実務経験がないと分からないような問題もあった • 資格勉強を通して、PostgreSQLの話にもある程度ついていけるようになった  反省点 • 限られた時間の中でも、コマンド/設定オプションを絞り、実機を触りながら理解できればよかった
  • 18.
    © 2021 NTTDATA Corporation その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。