Software Design plusシリーズ[改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則
2018年9月14日紙版発売
2018年9月14日電子版発売
勝俣智成,佐伯昌樹,原田登志 著
A5判/320ページ
定価3,608円(本体3,280円+税10%)
ISBN 978-4-297-10089-6
ただいま弊社在庫はございません。
書籍の概要
この本の概要
長年,現場で培った設計・運用計画の鉄則!
本書はPostgreSQL 10をベースに解説しています。本書では「PostgreSQLを学習,もしくは利用したことがある人」「今後,本格的にPostgreSQLの運用管理や技術力の向上を図りたいと思っている人」を主な対象読者としています。PostgreSQLのコアな技術力を持つ専門家の視点から,システム構築や運用時に重要な要素を,PostgreSQLの内部構造と照らし合わせる形で解説します。内部構造を知っているからこそわかる運用ノウハウやチューニング方法が満載です。
こんな方におすすめ
- 本格的にPostgreSQLの運用管理を始めたい人
- PostgreSQLの技術力向上を図りたい人
本書のサンプル
本書の一部ページを,PDFで確認することができます。
- サンプルPDFファイル(698KB)
目次
Part 1 基本編
第1章 PostgreSQL“超”入門
- 1.1 呼び方
- 1.2 データベースとしての分類
- 1.3 歴史
- コラム メジャーバージョンとマイナーバージョン
- 1.4 ライセンス
- 1.5 コミュニティ
第2章 アーキテクチャの基本
- 2.1 プロセス構成
- 2.1.1 マスタサーバプロセス
- 2.1.2 ライタプロセス
- 2.1.3 WALライタプロセス
- 2.1.4 チェックポインタプロセス
- 2.1.5 自動バキュームランチャと自動バキュームワーカプロセス
- 2.1.6 統計情報コレクタプロセス
- 2.1.7 バックエンドプロセス
- 2.1.8 パラレルワーカプロセス
- 2.2 メモリ管理
- 2.2.1 共有メモリ域
- 2.2.2 プロセスメモリ
- 2.3 ファイル
- 2.3.1 主なディレクトリ
- 2.3.2 主なファイル
第3章 各種設定ファイルと基本設定
- 3.1 設定ファイルの種類
- 3.2 postgresql.confファイル
- 3.2.1 設定項目の書式
- 3.2.2 設定の参照と変更
- 3.2.3 設定項目の反映タイミング
- 3.2.4 設定ファイルの分割と統合
- コラム コマンドラインパラメータによる設定
- 3.2.5 ALTER SYSTEM文による変更
- 3.3 pg_hba.confファイル
- 3.3.1 記述形式
- 3.3.2 接続方式
- コラム SSL接続
- 3.3.3 接続データベース
- コラム ログイン権限
- 3.3.4 接続ユーザ
- コラム 特殊な名前のデータベースとユーザ
- 3.3.5 接続元のIPアドレス
- 3.3.6 認証方式
- コラム pg_hba_file_rulesビュー
- 3.4 pg_ident.confファイル
第4章 処理/制御の基本
- 4.1 サーバプロセスの役割
- 4.1.1 マスタサーバプロセス
- 4.1.2 ライタプロセス
- 4.1.3 WALライタプロセス
- 4.1.4 チェックポインタ
- 4.1.5 自動バキュームランチャと自動バキュームワーカ
- 4.1.6 統計情報コレクタ
- 4.1.7 バックエンドプロセス
- コラム バックグラウンドワーカプロセス
- 4.2 クライアントとサーバの接続/通信
- 4.3 問い合わせの実行
- 4.3.1 パーサ
- 4.3.2 リライタ
- 4.3.3 プランナ/オプティマイザ
- 4.3.4 エグゼキュータ
- 4.3.5 SQLの種別による動作
- 4.4 トランザクション
- 4.4.1 トランザクションの特性
- 4.4.2 トランザクションの制御
- 4.4.3 トランザクションの分離レベル
- 4.5 ロック
- コラム 勧告的ロック
- 4.6 同時実行制御
Part 2 設計/計画編
第5章 テーブル設計
- 5.1 データ型
- 5.1.1 文字型
- コラム 内部的に使用される文字型
- コラム char型に対する文字列操作の注意点
- 5.1.2 数値データ型
- 5.1.3 日付/時刻データ型
- コラム アンチパターン 文字型で日時を管理する
- 5.1.4 バイナリ列データ型
- コラム JSON型とJSONB型
- コラム 型名のエイリアス
- 5.2 制約
- 5.2.1 主キー
- 5.2.2 一意性制約とNOT NULL制約
- 5.2.3 外部キー制約
- 5.2.4 検査制約
- コラム 検査制約の適用順序
- 5.3 PostgreSQL固有のテーブル設計
- 5.3.1 TOASTを意識したテーブル設計
- 5.3.2 結合を意識したテーブル設計
- コラム 遺伝的問い合わせ最適化
- 5.4 ビューの活用
- 5.4.1 ビュー
- 5.4.2 マテリアライズドビュー
第6章 物理設計
- 6.1 各種ファイルのレイアウトとアクセス
- 6.1.1 PostgreSQLのテーブルファイルの実態
- 6.1.2 テーブルファイル
- 6.1.3 インデックスファイル
- 6.1.4 テーブルファイルに対するアクセス
- 6.2 WALファイルとアーカイブファイル
- 6.2.1 WALファイル
- 6.2.2 アーカイブファイル
- 6.3 HOTとFILLFACTOR
- 6.3.1 HOT
- 6.3.2 FILLFACTOR
- コラム FILLFACTORの確認方法
- 6.4 データ配置のポイント
- 6.4.1 base領域
- 6.4.2 WAL領域
- 6.4.3 アーカイブ領域
- 6.5 テーブル空間とテーブルパーティショニング
- 6.5.1 テーブルパーティショニングとの組み合わせ
- コラム 別のテーブル空間へのデータベースオブジェクトの一括移動
- 6.6 性能を踏まえたインデックス定義
- 6.6.1 インデックスの概念
- 6.6.2 更新に対するインデックスの影響
- 6.6.3 複数列インデックス使用時の注意
- 6.6.4 関数インデックスの利用
- 6.6.5 部分インデックスの利用
- コラム インデックスの種類
- 6.7 文字エンコーディングとロケール
- 6.7.1 文字エンコーディング
- 6.7.2 ロケール
第7章 バックアップ計画
- 7.1 最初に行うこと
- 7.2 PostgreSQLのバックアップ方式
- 7.2.1 オフラインバックアップ
- 7.2.2 オンラインバックアップ
- 7.3 主なリカバリ要件/バックアップ要件
- 7.3.1 要件と方式の整理方法
- 7.4 各バックアップ方式の注意点
- 7.4.1 コールドバックアップの注意点
- 7.4.2 オンライン論理バックアップの注意点
- 7.4.3 オンライン物理バックアップの注意点
第8章 監視計画
- 8.1 監視とは
- 8.2 監視項目の選定
- 8.2.1 サーバに問題が起きていないか? を監視する
- 8.2.2 PostgreSQLに問題が起きていないか? を監視する
- 8.3 PostgreSQLログの設定
- 8.3.1 PostgreSQLログをどこに出力するか
- 8.3.2 PostgreSQLログをいつ出力するか
- 8.3.3 PostgreSQLログに何を出力するか
- 8.3.4 PostgreSQLログをどのように保持するか
- 8.4 異常時の判断基準
第9章 サーバ設定
- 9.1 CPUの設定
- 9.1.1 クライアント接続設定
- 9.1.2 ロックの設定
- 9.2 メモリの設定
- 9.2.1 OSのメモリ設定
- 9.2.2 PostgreSQLのメモリ設定
- 9.2.3 HugePage設定(PostgreSQL 9.4以降)
- 9.3 ディスクの設定
- 9.3.1 OSのディスク設定
- 9.3.2 PostgreSQLのディスク設定
Part 3 運用編
第10章 高可用化と負荷分散
- 10.1 サーバの役割と呼び名
- 10.2 ストリーミングレプリケーション
- 10.2.1 ストリーミングレプリケーションの仕組み
- コラム pg_resetwalコマンド
- 10.2.2 可能なレプリケーション構成
- 10.2.3 レプリケーションの状況確認
- 10.2.4 レプリケーションの管理
- 10.2.5 設定手順の整理
- コラム 循環するレプリケーション
- 10.3 PostgreSQLで構成できる3つのスタンバイ
- 10.3.1 それぞれのメリットとデメリット
- 10.3.2 コールドスタンバイ
- 10.3.3 ウォームスタンバイ
- 10.3.4 ホットスタンバイ
- 10.4 ホットスタンバイ
- 10.4.1 ホットスタンバイで実行可能なクエリ
- 10.4.2 ホットスタンバイの弱点
- 10.5 ストリーミングレプリケーションの運用
- 10.5.1 フェイルオーバ時の処理
- 10.5.2 プライマリ/スタンバイの監視
- 10.5.3 プライマリ/スタンバイの再組み込み時の注意点
- 10.5.4 コンフリクトの緩和策
- 10.6 論理レプリケーション
- 10.6.1 論理レプリケーションの仕組み
- 10.6.2 可能なレプリケーション構成
- 10.6.3 レプリケーションの状況確認
- 10.6.4 レプリケーションの管理
- 10.6.5 設定手順の整理
第11章 オンライン物理バックアップ
- 11.1 オンライン物理バックアップの仕組み
- 11.1.1 pg_start_backup関数の処理
- 11.1.2 pg_stop_backup関数の処理
- 11.1.3 backup_labelとバックアップ履歴ファイルの内容
- コラム 並行したバックアップ取得の制御
- 11.1.4 WALのアーカイブの流れ
- 11.2 PITRの仕組み
- 11.2.1 WALレコード適用までの流れ
- 11.2.2 pg_controlファイル
- 11.2.3 recovery.confファイル
- コラム タイムラインとリカバリ
- 11.3 バックアップ/リカバリの運用手順
- 11.3.1 バックアップ手順
- 11.3.2 リカバリ手順
第12章 死活監視と正常動作の監視
- 12.1 死活監視
- 12.1.1 サーバの死活監視
- 12.1.2 PostgreSQLの死活監視(プロセスの確認)
- コラム プロセス確認の落とし穴
- 12.1.3 PostgreSQLの死活監視(SQLの実行確認)
- 12.2 正常動作の監視
- 12.2.1 サーバの正常動作の監視
- 12.2.2 PostgreSQLの正常動作の監視
第13章 テーブルメンテナンス
- 13.1 テーブルメンテナンスが必要な状況
- 13.2 バキュームの内部処理
- 13.2.1 不要領域の再利用
- 13.2.2 トランザクションID(XID)周回問題の回避
- 13.3 自動バキュームによるメンテナンス
- 13.4 VACUUM FULLによるメンテナンス
- 13.4.1 VACUUMが機能しないケース(例)
- 13.4.2 VACUUM FULL実行時の注意点
第14章 インデックスメンテナンス
- 14.1 インデックスメンテナンスが必要な状況
- 14.1.1 インデックスファイルの肥大化
- 14.1.2 インデックスファイルの断片化
- 14.1.3 クラスタ性の欠落
- 14.2 【予防策】インデックスファイルの肥大化
- 14.3 【改善策】インデックスファイルの断片化
- 14.4 【改善策】クラスタ性の欠落
- 14.4.1 CLUSTER実行時に適用されるインデックス
- 14.4.2 CLUSTER実行時の注意点
- 14.5 インデックスオンリースキャンの利用
- 14.5.1 インデックスオンリースキャンの利用上の注意
Part 4 チューニング編
第15章 実行計画の取得/解析
- 15.1 最適な実行計画が選ばれない
- 15.1.1 PostgreSQLが原因となる場合
- 15.1.2 PostgreSQL以外が原因となる場合
- 15.2 実行計画の取得方法
- 15.2.1 EXPLAIN文
- 15.2.2 ANALYZE文
- 15.2.3 統計情報取得のためのパラメータ設定
- コラム システムカタログ「pg_statistic」
- 15.2.4 実行計画を自動収集する拡張モジュール「auto_explain」
- 15.3 実行計画の構造
- 15.3.1 スキャン系ノード
- 15.3.2 複数のデータを結合するノード
- 15.3.3 データを加工するノード
- 15.3.4 その他のノード
- 15.4 実行計画の見方
- 15.4.1 処理コストの見積もり
- 15.4.2 処理コスト見積もりのパラメータ
- 15.5 処理コスト見積もりの例
- 15.5.1 シンプルなシーケンシャルスキャンの場合
- 15.5.2 条件付きシーケンシャルスキャンの場合
- 15.5.3 ソート処理の場合
- 15.5.4 インデックススキャンの場合
- 15.5.5 見積もりと実行結果の差
第16章 パフォーマンスチューニング
- 16.1 事象分析
- 16.1.1 PostgreSQLログの取得
- 16.1.2 テーブル統計情報の取得
- 16.1.3 クエリ統計情報の取得
- 16.1.4 システムリソース情報の取得
- 16.2 事象分析の流れ
- 16.3 スケールアップ
- 16.3.1 【事例1】SSDに置き換えが有効なケース
- 16.3.2 【事例2】メモリ容量の拡張が有効なケース
- 16.4 パラメータチューニング
- 16.4.1 【事例3】work_memのチューニング
- 16.4.2 【事例4】チェックポイント間隔のチューニング
- 16.4.3 【事例5】統計情報のチューニング
- 16.4.4 【事例6】パラレルスキャン
- 16.5 クエリチューニング
- 16.5.1 【事例7】ユーザ定義関数のチューニング
- 16.5.2 【事例8】インデックスの追加
- 16.5.3 【事例9】テーブルデータのクラスタ化
Appendix PostgreSQLのバージョンアップ
- A.1 PostgreSQLのバージョンアップポリシー
- A.2 バージョンアップの種類
- A.2.1 マイナーバージョンアップ
- A.2.2 メジャーバージョンアップ
- A.3 マイナーバージョンアップの手順
- A.4 ローリングアップデート
- A.5 メジャーバージョンアップの手順
- A.5.1 ダンプ/リストアによるデータ移行方式
- A.5.2 pg_upgradeコマンドによるデータ移行方式
- A.5.3 拡張機能を使った場合の注意点
この本に関連する書籍
-
SQLの苦手を克服する本 データの操作がイメージできれば誰でもできる
本書は,SQLの文法は学んだもののSQLに苦手意識を持っているITエンジニアのための書籍です。 複雑なSQLを読める/書けるようになるには,データベースの表をカタマリで...
-
失敗から学ぶ RDBの正しい歩き方
「データベースがよく落ちる」「前任者が残したテーブル,SQLが読み解けない」「RDBMSを入れ替えたら予期せぬバグが」――MySQLやPostgreSQLといったRDBMS(リレーショナ...
-
これからはじめる PostgreSQL入門
本書は,データベース初学者を対象にPostgreSQLを使って,データベース操作の基本から運用までを学ぶための本です。付属DVD収録のファイルを利用することで,自宅のWind...
-
データベースエンジニア教本 MySQL&PostgreSQL&NoSQL編
月刊SoftwareDesign誌の2016年から2017年のデータベース特集をまとめました。データベースを開発・運用で活用するためのスキルや考え方が少しずつ変わってきています。...