Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
NI
Uploaded by
NTT DATA Technology & Innovation
944 views
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料) 2024年10月12日(土) NTTデータグループ Innovation技術部 藤井 雅雄
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
1
/ 38
2
/ 38
3
/ 38
4
/ 38
5
/ 38
6
/ 38
7
/ 38
Most read
8
/ 38
Most read
9
/ 38
10
/ 38
11
/ 38
12
/ 38
13
/ 38
14
/ 38
15
/ 38
16
/ 38
17
/ 38
18
/ 38
19
/ 38
20
/ 38
21
/ 38
22
/ 38
Most read
23
/ 38
24
/ 38
25
/ 38
26
/ 38
27
/ 38
28
/ 38
29
/ 38
30
/ 38
31
/ 38
32
/ 38
33
/ 38
34
/ 38
35
/ 38
36
/ 38
37
/ 38
38
/ 38
More Related Content
PPTX
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
by
NTT DATA Technology & Innovation
PDF
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
by
NTT DATA Technology & Innovation
PDF
Inside vacuum - 第一回PostgreSQLプレ勉強会
by
Masahiko Sawada
PPTX
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
バージョン17からのpg_stat_bgwriter (第48回 PostgreSQLアンカンファレンス 発表資料)
by
NTT DATA Technology & Innovation
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
by
NTT DATA Technology & Innovation
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
by
NTT DATA Technology & Innovation
Inside vacuum - 第一回PostgreSQLプレ勉強会
by
Masahiko Sawada
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
バージョン17からのpg_stat_bgwriter (第48回 PostgreSQLアンカンファレンス 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
What's hot
PDF
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
論理レプリケーション用スロットのフェールオーバ機能 (第48回 PostgreSQLアンカンファレンス 発表資料)
by
NTT DATA Technology & Innovation
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PPTX
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
by
NTT DATA Technology & Innovation
PPTX
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
by
NTT DATA Technology & Innovation
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
by
NTT DATA Technology & Innovation
PDF
pg_stat_activityの不可解な観測結果の謎 (第47回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
by
NTT DATA Technology & Innovation
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
by
NTT DATA Technology & Innovation
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
by
NTT DATA Technology & Innovation
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
by
NTT DATA Technology & Innovation
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQL 15の新機能を徹底解説
by
Masahiko Sawada
PDF
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
by
NTT DATA Technology & Innovation
PDF
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
by
NTT DATA Technology & Innovation
PDF
auto_explainのススメ (第48回 PostgreSQLアンカンファレンス 発表資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
by
NTT DATA Technology & Innovation
PDF
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
by
NTT DATA Technology & Innovation
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
論理レプリケーション用スロットのフェールオーバ機能 (第48回 PostgreSQLアンカンファレンス 発表資料)
by
NTT DATA Technology & Innovation
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
by
NTT DATA Technology & Innovation
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
by
NTT DATA Technology & Innovation
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
by
NTT DATA Technology & Innovation
pg_stat_activityの不可解な観測結果の謎 (第47回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
by
NTT DATA Technology & Innovation
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
by
NTT DATA Technology & Innovation
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
by
NTT DATA Technology & Innovation
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
by
NTT DATA Technology & Innovation
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
by
NTT DATA Technology & Innovation
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQL 15の新機能を徹底解説
by
Masahiko Sawada
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
by
NTT DATA Technology & Innovation
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
by
NTT DATA Technology & Innovation
auto_explainのススメ (第48回 PostgreSQLアンカンファレンス 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
by
NTT DATA Technology & Innovation
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
by
NTT DATA Technology & Innovation
Similar to B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
by
Miki Shimogai
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQL 9.5 新機能紹介
by
NTT DATA OSS Professional Services
PDF
pg_trgmと全文検索
by
NTT DATA OSS Professional Services
PPTX
SQLチューニング入門 入門編
by
Miki Shimogai
PDF
RailsエンジニアのためのSQLチューニング速習会
by
Nao Minami
PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
by
NTT DATA Technology & Innovation
PDF
より深く知るオプティマイザとそのチューニング
by
Yuto Hayamizu
PPTX
ファントム異常を排除する高速なトランザクション処理向けインデックス
by
Sho Nakazono
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
by
Satoshi Nagayasu
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
by
NTT DATA Technology & Innovation
PDF
JPUGしくみ+アプリケーション勉強会(第20回)
by
Yoshinori Nakanishi
PDF
SIGMOD’12勉強会 -Session 7-
by
Takeshi Yamamuro
PDF
Lt ingaoho-jsonb+postgeres fdw
by
Toshi Harada
PDF
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
by
Shigeru Hanada
PPT
SQLチューニング勉強会資料
by
Shinnosuke Akita
PDF
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
by
kasaharatt
PDF
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
by
keki3
PDF
PostgreSQL 12の話
by
Masahiko Sawada
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
by
Miki Shimogai
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQL 9.5 新機能紹介
by
NTT DATA OSS Professional Services
pg_trgmと全文検索
by
NTT DATA OSS Professional Services
SQLチューニング入門 入門編
by
Miki Shimogai
RailsエンジニアのためのSQLチューニング速習会
by
Nao Minami
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
by
NTT DATA Technology & Innovation
より深く知るオプティマイザとそのチューニング
by
Yuto Hayamizu
ファントム異常を排除する高速なトランザクション処理向けインデックス
by
Sho Nakazono
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
by
NTT DATA Technology & Innovation
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
by
Satoshi Nagayasu
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
by
NTT DATA Technology & Innovation
JPUGしくみ+アプリケーション勉強会(第20回)
by
Yoshinori Nakanishi
SIGMOD’12勉強会 -Session 7-
by
Takeshi Yamamuro
Lt ingaoho-jsonb+postgeres fdw
by
Toshi Harada
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
by
Shigeru Hanada
SQLチューニング勉強会資料
by
Shinnosuke Akita
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
by
kasaharatt
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
by
keki3
PostgreSQL 12の話
by
Masahiko Sawada
More from NTT DATA Technology & Innovation
PDF
強化されたEKSのオブザーバビリティ(AWS re:Invent 2025 re:cap LT 大会 発表資料)
by
NTT DATA Technology & Innovation
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
by
NTT DATA Technology & Innovation
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
by
NTT DATA Technology & Innovation
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
by
NTT DATA Technology & Innovation
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
by
NTT DATA Technology & Innovation
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
by
NTT DATA Technology & Innovation
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
by
NTT DATA Technology & Innovation
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
by
NTT DATA Technology & Innovation
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
by
NTT DATA Technology & Innovation
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
by
NTT DATA Technology & Innovation
強化されたEKSのオブザーバビリティ(AWS re:Invent 2025 re:cap LT 大会 発表資料)
by
NTT DATA Technology & Innovation
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
by
NTT DATA Technology & Innovation
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
by
NTT DATA Technology & Innovation
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
by
NTT DATA Technology & Innovation
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
by
NTT DATA Technology & Innovation
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
by
NTT DATA Technology & Innovation
2025年現在のNewSQL (最強DB講義 #36 発表資料)
by
NTT DATA Technology & Innovation
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
by
NTT DATA Technology & Innovation
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
by
NTT DATA Technology & Innovation
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
by
NTT DATA Technology & Innovation
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
by
NTT DATA Technology & Innovation
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
by
NTT DATA Technology & Innovation
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
by
NTT DATA Technology & Innovation
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
by
NTT DATA Technology & Innovation
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
by
NTT DATA Technology & Innovation
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
1.
© 2024 NTT
DATA Group Corporation © 2024 NTT DATA Group Corporation 第49回 PostgreSQLアンカンファレンス@東京 B-Tree のアーキテクチャ解説 2024年10月12日(土) NTTデータグループ 藤井雅雄
2.
© 2024 NTT
DATA Group Corporation 2 自己紹介 藤井 雅雄 Database Technical Lead @ NTTデータグループ データベース研究開発 PostgreSQL 技術支援 PostgreSQLコミッタ レプリケーション WAL圧縮 バックアップ進捗確認 pg_bigm(全文検索モジュール) コミッタ fujii_masao MasaoFujii
3.
© 2024 NTT
DATA Group Corporation 3 謝辞 本発表資料は、中村航規さん(*1)がNTTデータグループの業務の一環として作成したもの をベースに少し手を入れたものです PostgreSQLのB-Treeのアーキテクチャを調査し、本発表資料を作成していただいた 中村航規さんに深く感謝いたします!! (*1) 名古屋大学大学院 情報学研究科 知能システム学専攻 修士1年 中村 航規
4.
© 2024 NTT
DATA Group Corporation 4 本講演について 講演資料は、後日、NTTデータグループのSlideShareアカウント上で公開予定です。 https://www.slideshare.net/nttdata-tech
5.
© 2024 NTT
DATA Group Corporation 5 B-Treeのアーキテクチャについて • データ構造 • 検索 • 挿入 • 削除
6.
© 2024 NTT
DATA Group Corporation 6 B-Treeとは • インデックスのうちの一つ • 最も一般的なインデックス、 CREATE INDEX時USING句での指定がない場合B-Treeが使用される • 一意インデックスとしても使われる CREATE TABLE時にカラムのUNIQUEを宣言 CREATE UNIQUE INDEX name ON table (column [, ...]); 宣言するとそのカラムについて重複を許さない制約(一意性制約)が追加 デフォルトではNULLの重複は許される(はじきたい場合はNULLS NOT DISTINCTを宣言時に追加) • 主キーとなるカラム(or カラムの組)、一意性制約を持つカラムには自動的にB-Treeが生成されて、制約を維持 • 対応する演算子は<、<=、=、>、>=とそれに準じるもの • ある程度データ数が大きくないと性能改善効果なし • インデックス管理のコストやHOT(後述)が使用できないデメリットが上回るためインデックスの使用頻度が低い場合も逆効果 • 地理情報であったり、全文検索をよく使用したりする場合や非スカラデータについては他インデックスのが優れる (逆にそれ以外は基本的にB-Treeでよい)
7.
© 2024 NTT
DATA Group Corporation 7 B-Treeのデータ構造 メタページ ルートページ インターナルページ インターナルページ リーフページ リーフページ リーフページ リーフページ ヒープ (テーブルデータ領域) • インデックスのページもテーブル(ヒープ)同様にデ フォルト8KBのサイズ • 親ページから子ページにリンク。子から親へのリンク はない • 左右ページへ双方向リンク • ヒープ(テーブルデータ領域)にはリーフからのみリン ク • メタページという制御用のページが存在し、そこから ルートページにリンク • インターナルページは複数階層になる可能性があ る 階層0 階層1 階層2 B-Treeの階層
8.
© 2024 NTT
DATA Group Corporation 8 B-Treeのデータ構造 – ファイル上の構造 メタページ インターナルページ リーフページ ルートページ リーフページ インターナルページ リーフページ リーフページ ・・・ 先頭 末尾 インデックスファイル上のイメージ • メタページが常にインデックスファイルの先頭 • ルートページの位置は不定
9.
© 2024 NTT
DATA Group Corporation 9 B-Treeのデータ構造 - Fast Root レコードの挿入や削除を繰り返した結果メタページから1階層ずつ降下するのが非効率になる場合がある (その階層にページが1つしかない場合、そのページは削除されないため階層の数が減ることはない) メタページは子を2つ以上持つページのうち最上層にあるものをFast Rootとしてリンクを持つ 探索や挿入操作などでメタページから降下する場合はそのリンクを用いてメタページからFast Rootへ降下する このリンクを用いて 下の階層へ降りる このページがFast Rootとなる これらのリンクも 保持はされるが使われない ページの分割や削除で Fast Rootが変更となる場合は Fast Rootへのリンクを変更する
10.
© 2024 NTT
DATA Group Corporation 10 B-Treeのデータ構造 – ページ内の構造 30 1 10 20 30 20 25 27 10 1 5 7 20 10 13 17 • 親ページにはリンクする子ページの最小キー値が入る • 右端以外の各ページには、1番目のアイテムとして high key が入る • high keyには、右隣ページの最小キー値が入る • high keyにより、そのページのキー値の範囲を知ることができ、検索を高速化できる • ページ内で各キー値は常にソート済。ページ内の探索にはバイナリサーチを使用 ※実際には1つのページにもっと大量の値が格納される デフォルト8KB インターナルページ リーフページ リーフページ リーフページ xx high key 凡例
11.
© 2024 NTT
DATA Group Corporation 11 検索 メタページ インターナルページ インターナルページ インターナルページ リーフページ リーフページ リーフページ リーフページ ヒープ (テーブルデータ領域) ① メタページから検索開始 ルートページ ② Fast Rootへ移動 ③ インターナルページ内で検索条件のキーを 見つけて、そのリンクから子ページに移動 ※リーフに辿り着くまで繰り返す ④ リーフページを右に移動しながら、 検索条件のキーを見つけて、その リンクからヒープにアクセスして、 テーブルデータを取得 ⑤ テーブルデータが削除済の(全Txが見えない)場合は、リーフのそのキーに削除フラグを立てる(以降、削除フラグのある キーは検索からスキップできる)
12.
© 2024 NTT
DATA Group Corporation 12 検索 1 30 80 30 1 10 20 80 30 50 70 80 90 99 10 1 5 6 20 10 13 15 25 20 21 22 id name ・・・ 13 東京 15 新潟 20 長野 ・・・ リーフページ インターナルページ ルートページ B-TreeのIndex Scanでの検索例 SELECT * FROM tbl WHERE id = 13 ヒープ (テーブルデータ領域) Index Scan:リーフページからヒープへアクセスして該当するテーブルデータを取得
13.
© 2024 NTT
DATA Group Corporation 13 検索 1 30 80 30 1 10 20 80 30 50 70 80 90 99 10 1 5 6 20 10 13 15 25 20 21 22 id name ・・・ 6 山形 10 群馬 13 東京 ・・・ リーフページ インターナルページ ルートページ B-TreeのIndexScanでの検索例 SELECT * FROM tbl WHERE id >= 6 AND id <= 13 ヒープ (テーブルデータ領域) Index Scan:リーフページからヒープへアクセスして該当するテーブルデータを取得
14.
© 2024 NTT
DATA Group Corporation 14 検索 Index Only Scan:リーフページにある情報だけで検索を完結して、ヒープへのアクセスなし リーフページにある情報だけで問い合わせに対応できるときはIndex Only Scanが使われる可能性がある 1 30 80 30 1 10 20 80 30 50 70 80 90 99 10 1 5 6 20 10 13 15 25 20 21 22 id name ・・・ ・・・ インターナルページ ルートページ B-TreeのIndex Only Scanでの検索例 SELECT id FROM tbl WHERE id = 13 ヒープ (テーブルデータ領域) リーフページ
15.
© 2024 NTT
DATA Group Corporation 15 挿入 • 検索と同様に、挿入するキー値でリーフまで辿り、右に移動しながら挿入先のリーフページを見つける • 挿入先のリーフページに空き領域があれば、そこに挿入。その際、ページ内のキー値がソート済になるように適宜キー値を移動 • リーフページ内に十分な空き領域がない場合は、不要なキー値を削除して空き領域を確保できないか試し、それでも無理な場 合はページをスプリットする 1 30 80 30 1 10 20 80 30 50 70 80 90 99 10 1 5 20 10 15 25 20 21 20 10 13 15 インターナルページ ルートページ リーフページ • 空き領域に13を挿入 • ソート済になるように移動 B-Treeの挿入例 INSERT INTO tbl VALUES (13, '..'); ※キー値13の挿入
16.
© 2024 NTT
DATA Group Corporation 16 挿入 – スプリット リーフページに空きがないとき:後述する分割を避ける操作を行う、それでも無理なら分割へ (実際はdeleteされたものが残っているため空きがないことが多い、 その場合についてはできるだけ分割を避ける操作で空き領域を作り分割回避) 例:13を挿入 1 10 10 1 5 10 15 17 19 挿入したいが空きのない ページを分割
17.
© 2024 NTT
DATA Group Corporation 17 挿入 – スプリット 1 10 17 • 上の階層にも空きがない場合は上の階層についても同様の分 割を行っていく • ルートページも空きがなければルートページを分割してインターナ ルページとし、上の階層に新たなルートページを追加 • 同じインデックス値のものはできるだけ同じページに入るように分 割 親から新しいページ へのリンクを追加 1 10 1 10 17 13を挿入
18.
© 2024 NTT
DATA Group Corporation 18 挿入 – スプリット 前ページの図では を分割して としている 実際の分割後の配分は分割対象ページがその階層の一番右のページかどうかで異なる • 一番右のページでないとき 100% 分割後50パーセントずつ埋まっているように分割 50% 50% • 一番右のページのとき 分割後の左ページがFILLFACTORパーセント埋まるように分割 残りは右ページに 100% 一番右のページが分割されるとき、timestampなど単純増加する FILLFACTER% (100-FILLFACTER)% カラムのことが多い 分割後右ページに多くのタプルが入ることを想定しているためこのような実装となっている ※FILLFACTOR:初期インデックス構築時と一番右ページの分割の時に リーフページにどの割合まで埋めるかを決めるパラメータ デフォルト90 10 15 17 19 17 10 15 17 19
19.
© 2024 NTT
DATA Group Corporation 19 スプリットを避ける操作 挿入時にページが埋まっていて挿入できないとき、できるだけSplitを操作を避けるため3つの操作が行われる 単純削除(Simple deletion)、ボトムアップ削除(Bottom-Up deletion)、重複削除(deduplication) 単純削除:削除フラグがついたキー値をすべて削除 それに加えて削除フラグがついたものの近くのタプルで削除できるものが見つかれば削除 (削除フラグがついたものの近くのタプルを調べる操作は非常に安価) ページの占有ロックを取り、該当のタプルを削除 ボトムアップ削除:更新されたものについて古いバージョンのものの削除を目指す (バージョン14以降で実装) 重複削除:重複したインデックスタプルを効率の良い表現に変換しサイズを縮小 (バージョン13以降で実装) 上から順に行い、挿入可能な領域が空けば終了し挿入へ これらの操作後にクイックソートを行い空き領域は詰めて、ソート済みのものが並ぶ
20.
© 2024 NTT
DATA Group Corporation 20 単純削除 (Simple Deletion) 20 10 11 13 15 18 18 13 43 47 11 10 32 37 15 5 福井 東京 熊本 沖縄 埼玉 群馬 島根 香川 新潟 秋田 削 除 済 削 除 済 削 除 済 削 除 済 ヒープ (テーブルデータ領域) リーフページ ページ1 ページ2 削 除 フ ラ グ 20 10 11 15 単純削除 • 削除フラグのあるキー「13」をリーフから削除 • 削除フラグのあるキー「13」と同じヒープのページをリンクしている キー「11」「18」について、ヒープ側で削除済のキー「18」をリーフ から削除
21.
© 2024 NTT
DATA Group Corporation 21 ボトムアップ削除 (Bottom-up Index Deletion) Tableに対してインデックスが2個以上あり、あるインデックス対象の要素が更新されたものとする それ以外のインデックスについてボトムアップ削除で削除を目指す インデックスがないカラムの要素が更新されたとき → HOT(Heap Only Tuple)が適用される、インデックスに対する処理なし インデックスがあるカラムの要素が更新されたとき → 削除+挿入操作として処理 (削除処理は前述のように何も行わないので実質は挿入操作のみ行われる) ※更新は削除+挿入として考えることができる ・更新されたカラムのインデックス → 単純削除で削除 ・更新されていないカラムのインデックス → 単純削除で削除されなかった場合、ボトムアップ削除で削除を目指す ※単純削除はスキャンなどで該当タプルを参照して“known dead”を示すフラグがつけられるか、 “known dead”とされたタプルの近傍タプルで調べられて削除可能と分かった場合しか削除されない つまり、削除可能なタプルがすべて削除されるわけではない
22.
© 2024 NTT
DATA Group Corporation 22 HOT (Heap Only Tuple) インデックスがないカラムの更新の際に更新前レコードから更新後レコードへのポインタを保存しておくことで インデックスの更新なしで更新操作が可能→高速な更新を実現 idへのインデックス 赤線のポインタを保持しておくことでTableが更新されても インデックスに対して処理を行わずにレコードへたどることができる HOTの処理がない場合はインデックスについても削除+挿入の操作が必要 Table ・・・ ・・・ id = 10, key = 1 ・・・ id = 10, key = 2 更新 10
23.
© 2024 NTT
DATA Group Corporation 23 ボトムアップ削除 (Bottom-up Index Deletion) かなり複雑な処理をしているかつ資料が少なく、調べきれていないため要点のみをまとめる • キー値が重複しているものについて削除可能かどうかを調べる ボトムアップ削除で削除を目指しているのは更新されたが、別インデックスのカラムのみ更新されたもの そのため、更新前と更新後はキー値が重複している • すべての削除可能なタプルが削除されるわけではない 必要なコストとボトムアップ削除のメリットのバランスがとられており、見合わないと判断されれば途中で打ち切られる • ヒューリスティックな手法 “most objects die young”という経験的な観察に基づいている 1つ以上削除されるとも限らない それでもうまく動き、病的なほど大量な更新が起こらない限り不必要なページ分割は起こらない
24.
© 2024 NTT
DATA Group Corporation 24 ボトムアップ削除 (Bottom-up Index Deletion) UPDATE tbl SET id2 = 99 WHERE id1 = 1; UPDATE tbl SET id2 = 44 WHERE id1 = 1; UPDATE tbl SET id2 = 66 WHERE id1 = 1; id1 id2 1 11 1 99 1 44 1 66 1 1 1 1 11 44 66 99 id1カラムへのB-Treeインデックスのリーフ id2カラムへのB-Treeインデックスのリーフ ボトムアップ削除では重複して削除 済の可能性の高いキーを削除する
25.
© 2024 NTT
DATA Group Corporation 25 重複削除 リーフページについて同じキー値をもつエントリをまとめることで効率の良い表現へ 例:インデックスの対象カラム:a 重複削除なし 重複削除あり Table a = 50, b = 15 a = 40, b = 50 a = 40, b = 1 a = 10, b = 40 a = 30, b = 20 a = 40, b = 5 a = 20, b = 60 40 40 40 40
26.
© 2024 NTT
DATA Group Corporation 26 削除 論理的にはB-Treeをたどり値を見つけ、その値を削除すればよいが・・・ 上の層については更新しなくてもよい? 例:10を削除 1 30 80 30 1 10 20 80 30 50 70 80 90 99 10 1 5 20 10 15 25 20 21 20 15 B-Treeとしては上の層を更新するほうが正 確だが、探索能力としては別に変わらない 実際も更新していないと思われる
27.
© 2024 NTT
DATA Group Corporation 27 削除 実際のPostgreSQL内では DELETEやUPDATEが起きてもB-Treeに対して即座に変更操作はしない その後のScanなどでヒープを参照して、すべてのトランザクションに対してデッドであるタプルを見つけた場合に そのアイテム“known dead”を示すにフラグを立てる “known dead”のものについてはヒープへの参照をスキップ このタプルについて処理を行うのは挿入時にページが分割されそうになったタイミング 単純削除で空き領域を作る(後述) メリット • まとめて削除できるので効率が良い • 空き領域を作る操作が起こるまで占有ロックがいらないため高速に
28.
記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。
29.
© 2024 NTT
DATA Group Corporation 29 ページレイアウト インターナルページとリーフページは標準のページフォーマットに準じる ソートされた順番で格納される VACUUMされた場合はその領域が詰められる 色付きの部分はhigh keyが入る(階層で一番右のページを除く、この場合は詰める) 出典:PostgreSQL 16.4文書
30.
© 2024 NTT
DATA Group Corporation 30 Index Only ScanとIndex Scanの違い リーフページからヒープへのアクセスがあるかどうかが違い Index Only Scan:リーフページにある情報だけで完結するのでヒープへのアクセスなし (例:インデックス対象のカラムのみSELECTする場合など) Index Scan:リーフページからヒープへアクセスして該当するタプルの情報を取得 リーフページにある情報だけで問い合わせに応答できるときはIndex Only Scanが用いられる この部分のアクセスが 必要かどうかの違い
31.
© 2024 NTT
DATA Group Corporation 31 検索 Bitmap Index Scan:インデックスから得られた候補行をメモリー上にビットマップ化 ビットマップを用いてスキップしながらSeq Scanを行う → I/O操作が少ない ※ディスク上のデータはIndexで並んでいるわけではないので、 対象行が多いとリーフページからポインタが伸びたレコードをヒープ上で見つけるためのI/O操作が多くなりこちらのが速くなる 例:WHERE a >10 Table a = 20 a = 1 a = 100 a = 5 a = 40 BitMap 1 0 1 0 1 赤の矢印部分でヒープ内の I/O操作発生
32.
© 2024 NTT
DATA Group Corporation 32 よりBitmap Index Scanが強力になるとき AND や OR を条件に含む場合、bit演算を組み合わせてより高速に 例:WHERE a > 10 AND b > 10 (a, bそれぞれのインデックスを持っている前提) Table a = 50, b = 15 a = 5, b = 50 a = 15, b = 1 a = 1, b = 40 a = 30, b = 20 a = 40, b = 5 a = 20, b = 60 a > 10 1 0 1 0 1 1 1 b > 10 1 1 0 1 1 0 1 BitmapAnd 1 0 0 0 1 0 1
33.
© 2024 NTT
DATA Group Corporation 33 検索中のロック 検索しているページを読んでいる間に変更されないようにする以外のロックを保持しない(共有ロックのみ保持) 下の階層でsplitが起きていてもhigh keyを見ることで分割を検知できる 例:WHERE a = 15 (インデックスの対象カラム:a) 25 1 10 20 10 1 5 6 14 10 11 20 14 15 High keyが20でないので分割さ れたと判定、右ページを見る というページが分割されてこのようになったとする 20 10 any any
34.
© 2024 NTT
DATA Group Corporation 34 挿入操作の物理構造 ページをたどっていき挿入するページを見つける そして挿入するページを探索し、挿入位置を決定 (挿入後にソートするわけではない) 例:3を挿入 • この時_bt_binsrch()の結果をそのまま利用するため、通常は既存の同じキー値の前に挿入される • 分割を避ける操作を行った場合は操作後にクイックソートを行う ソート済みのものについて挿入位置を決定する操作が行われる • できるだけ同じインデックスのものは同じページに収まるようにする(分割操作のときも) PageHeaderData ItemID1 ItemID5 ・・・ ・・・ 5 1 Special PageHeaderData ItemID1 ItemID3 ItemID5 ・・・ 5 3 1 Special ・・・
35.
© 2024 NTT
DATA Group Corporation 35 リーフページの要素が空になったら リーフページ内のアイテムが完全に空になったときにページの削除の可能性 ただし、一番右のリーフページは削除されない(high keyの処理など探索アルゴリズムの単純化のため) また親ページの一番右のページもそれが唯一の子ページでない限りは削除されない(削除される場合は親ページとともに) 1 30 80 30 1 10 20 80 30 50 70 80 90 99 10 1 5 20 25 20 21
36.
© 2024 NTT
DATA Group Corporation 36 リーフページの削除 ステップ1:親ページと対象ページをロックし、親ページから対象ページへのリンクを右ページへのリンクに変更 30 1 10 20 10 1 5 20 25 20 21 30 1 10 10 1 5 20 25 20 21 ※20からのリンクは使われなくなる ため図上では消している
37.
© 2024 NTT
DATA Group Corporation 37 リーフページの削除 ステップ2:左兄弟ページ、対象ページ、右兄弟ページの順でロックをとり、左右リンクを更新 30 1 10 10 1 5 20 25 20 21 30 1 10 10 1 5 25 20 21
38.
© 2024 NTT
DATA Group Corporation 38 リーフページの削除 親ページの唯一の子ページの場合:親ページごと削除 (親ページが祖父母ページの唯一の子ページである場合は祖父母ページもという形で 複数子ページをもつページの子ページまで削除) ステップ1:リーフページのみロック、削除しない階層まで再帰的にリンクを切っていく ステップ2:「左兄弟ページ、対象ページ、右兄弟ページの順でロックをとり、左右リンクを更新」の操作を上の階層から順にする 緑のリーフページを削除するとき 赤枠のページが削除される ステップ1の終了 ステップ2の終了