PostgreSQLの特徴的な機能のしくみ
ここからは,
追記型アーキテクチャ──データ保存のしくみ
PostgreSQLがほかのデータベースと大きく違うところに,
追記型アーキテクチャとは,
もちろんデメリットもあります。たとえば,
以降では,
HOT──更新の性能向上のキーマン
更新の際に処理が遅い問題の解決として,
VACUUM──データファイルの掃除屋
追記型アーキテクチャによって参照されなくなったデータファイルを,
VACUUMは,
VACUUMの注意点
ただし,
そのほかの注意点として,
データファイルを小さくしたい場合は,VACUUM FULL
またはCLUSTER
コマンドを実行する必要があります。そして多くの場合,VACUUM FULL
よりもCLUSTER
コマンドを使うほうが適切です。CLUSTER
コマンドは一時的に対象のテーブルと同程度の空き領域がディスクに必要となるものの,
参照も更新も邪魔をせずに同様のメンテナンスを行えるツールとして,
VACUUMのそのほかの大事な役割
VACUUMのそのほかの重要な役割として,
統計情報の更新についてはご存じの人も多いと思いますので割愛します。
XIDの回収についてですが,
XID周回問題は,
可視性マップ──追記型アーキテクチャの問題改善
VACUUMは参照されていないデータファイルを再利用できるように処理するしくみと説明しました。それでは,
そのために利用するのが,
逆に可視性マップのすべてが0の場合,
このように,
- 注1)
- 正確には,
32個以上のall-visibleが続いている場合に該当箇所がスキップされます。
INDEX ONLY SCAN──最速の実行計画
可視性マップは,
INDEX ONLY SCANのしくみ
INDEX ONLY SCANはその名のとおり,
通常,
- インデックスから該当のレコードを把握する
- インデックスをもとに該当のレコードにアクセスし,
データを取得する - 検索結果を返す
INDEX ONLY SCANの場合,
INDEX ONLY SCANが使われる定番クエリに,SELECT COUNT(*) FROM table_
があります。これは,COUNT()
は遅くなりやすい処理ですから,
ほかにも,SELECT indexed_
のように検索条件と検索結果,
INCLUDE句はMySQLのカバリングインデックスの振る舞いとよく似ており,
INDEX ONLY SCANの制約
良いことずくめのINDEX ONLY SCANですが,
実は,
ここまで読んでお気付きかもしれませんが,
まとめ
PostgreSQLの基本を知るというテーマで,
PostgreSQLの内部構造は日本語ドキュメントも豊富で,
- 注2)
- 高塚遙,
桑村潤著 『これからはじめる PostgreSQL入門』 技術評論社, 2018年 - 注3)
- 勝俣智成,
佐伯昌樹, 原田登志著 『[改訂新版] 内部構造から学ぶPostgreSQL 設計・ 運用計画の鉄則』 技術評論社, 2018年
本誌最新号をチェック!
WEB+DB PRESS Vol.121
2021年2月22日発売
B5判/
定価
ISBN978-4-297-11960-7
- 特集1
[さらに速く! さらに書きやすく!]
詳解Ruby 3
JITコンパイラ,並列プログラミング, 静的型解析 - 特集2
UIKit,SwiftUI, iPadOS, ウィジェット
iOS 14最前線 - 特集3
個人と組織の目標がリンクする管理手法
OKR運用指南