SlideShare a Scribd company logo
1 of 60
Download to read offline
いまさら聞けないPostgreSQL運用管理




        アップタイム・テクノロジーズ

                        永安 悟史

                        2012.5.24


    Copyright 2012 Uptime Technologies LLC, All rights reserved.   1
自己紹介
•   永安 悟史 (ながやす さとし)

•   略歴
    – 1997年よりインターネットベンチャーにてネットサービス開発・運用に従事。
    – 2004年より(株)NTTデータにて、並列分散データベースの研究開発、技術支援・保守
      サポート業務を経て、データセンタの新規サービス開発、運用チームの立ち上げ、
      サービス運用などに従事。
    – 2009年、アップタイム・テクノロジーズを創業。

•   専門分野
    – データベースシステム、並列分散システム、クラスタシステム
    – オープンソース・インフラ技術
    – ITサービスマネジメント(ITIL)、ITインフラ運用管理(運用設計~運用)

•   本業@アップタイム・テクノロジーズ
    – オープンソース導入サポートサービス
    – データベース・コンサルティング
    – ITサービスマネジメント・コンサルティング


               Copyright 2012 Uptime Technologies LLC, All rights reserved.   2
DevsとOpsを経験してみて
•   運用担当者こそ技術的知識を
    – データベースの運用管理は特に難しい
    – 非計画停止はもとより、データロストは致命的


•   プロジェクト管理や要件定義の甘さが運用に跳ねる
    – バッチ処理
    – バックアップ・リカバリ(可用性)設計
    – メンテナンス設計


•   「運用でカバー」と言わせないために
    – 基盤設計時・運用設計時に「合理的なツッコミ」をできるか?
    – 適切なタイミングで適切なツッコミを入れられるスキルを




             Copyright 2012 Uptime Technologies LLC, All rights reserved.   3
いまさら聞けないPostgreSQL運用管理
            アジェンダ
(1)アーキテクチャ概要

(2)初期設定

(3)データベースの監視

(4)パフォーマンス・チューニング(概論、SQL編、GUC編)

(5)バックアップ・リカバリ(概論、PITR、運用)




            Copyright 2012 Uptime Technologies LLC, All rights reserved.   4
(1)アーキテクチャ概要




Copyright 2012 Uptime Technologies LLC, All rights reserved.   5
実行中のプロセス
$ ps -aef | grep postgres
postgres 22169     1 0 23:37 ?         00:00:00 /usr/pgsql-9.0/bin/postmaster -p 5432 -D
    /var/lib/pgsql/9.0/data
postgres 22179 22169 0 23:37 ?         00:00:00 postgres: logger process
postgres 22182 22169 0 23:37 ?         00:00:00 postgres: writer process
postgres 22183 22169 0 23:37 ?         00:00:00 postgres: wal writer process
postgres 22184 22169 0 23:37 ?         00:00:00 postgres: autovacuum launcher process
postgres 22185 22169 0 23:37 ?         00:00:00 postgres: archiver process   archiving
    00000001000000D60000004E
postgres 22187 22169 0 23:37 ?         00:00:00 postgres: stats collector process
postgres 23436 22169 16 23:42 ?        00:00:34 postgres: postgres pgbench [local] UPDATE
    waiting
postgres 23437 22169 16 23:42 ?        00:00:34 postgres: postgres pgbench [local] UPDATE
    waiting
postgres 23438 22169 16 23:42 ?        00:00:34 postgres: postgres pgbench [local] COMMIT
postgres 24283 22169 5 23:45 ?         00:00:02 postgres: postgres postgres [local] idle
postgres 24301 22169 0 23:45 ?         00:00:00 postgres: postgres postgres [local] idle
postgres 24581 22169 0 23:45 ?         00:00:00 postgres: autovacuum worker process
    pgbench
postgres 24527 22185 0 23:45 ?         00:00:00 cp pg_xlog/00000001000000D60000004E
    /var/lib/pgsql/9.0/backups/archlog/00000001000000D60000004E
$




                         Copyright 2012 Uptime Technologies LLC, All rights reserved.       6
実行中のデータベースクラスタ(ディレクトリ)
# ls -l
total 116
drwx------ 10 postgres postgres 4096 Dec 14 19:00 base
drwx------ 2 postgres postgres 4096 Jan 10 00:28 global
drwx------ 2 postgres postgres 4096 Dec 13 08:40 pg_clog
-rw------- 1 postgres postgres 3768 Dec 14 15:50 pg_hba.conf
-rw------- 1 postgres postgres 1636 Dec 4 13:47 pg_ident.conf
drwx------ 2 postgres postgres 4096 Jan 10 00:00 pg_log
drwx------ 4 postgres postgres 4096 Dec 4 13:47 pg_multixact
drwx------ 2 postgres postgres 4096 Jan 8 10:14 pg_notify
drwx------ 2 postgres postgres 4096 Jan 10 15:43 pg_stat_tmp
drwx------ 2 postgres postgres 4096 Dec 28 14:41 pg_subtrans
drwx------ 2 postgres postgres 4096 Dec 4 14:47 pg_tblspc
drwx------ 2 postgres postgres 4096 Dec 4 13:47 pg_twophase
-rw------- 1 postgres postgres     4 Dec 4 13:47 PG_VERSION
drwxr-xr-x 3 postgres postgres 4096 Jan 10 15:40 pg_xlog
-rw------- 1 postgres postgres 18015 Dec 14 15:50 postgresql.conf
-rw------- 1 postgres postgres 17952 Dec 14 15:05 postgresql.conf.orig
-rw------- 1 postgres postgres    71 Jan 8 10:14 postmaster.opts
-rw------- 1 postgres postgres    49 Jan 8 10:14 postmaster.pid
#

                         Copyright 2012 Uptime Technologies LLC, All rights reserved.   7
PostgreSQLの構成要素
   PostgreSQLは、さまざまなプロセス・メモリ領域・ファイルによって構
  成されている。


                                                     writer
           postgres          logger                                            wal writer    autovacuum
                                                  (バックグラウンド
        (リスナプロセス)          (サーバログ)                                            (WALライタ)      (自動vacuum)
                                                     ライタ)
プロセス群
           archiver stat collector postgres wal sender wal receiver
        (WALアーカイバ) (統計情報収集) (サーバプロセス) (レプリケーション) (レプリケーション)




          shared_buffers         wal_buffers             visibilitymap freespacemap トランザクション
メモリ群      (共有バッファ)              (WALバッファ)               (ブロック情報) (空き領域情報)             制御情報




ファイル群                            テーブル                 インデックス                トランザクション        アーカイブ
           設定ファイル
                                 ファイル                  ファイル                  ログファイル         ログファイル



                      Copyright 2012 Uptime Technologies LLC, All rights reserved.                    8
PostgreSQLの基本的なアーキテクチャ
 共有バッファを中心として、複数のプロセス間で連携しながら処理を
行うマルチプロセス構造。


                postgres
             (リスナプロセス)

                                                                                 (




                                                                                     shared_buffers
                                         postgres                                共
                                           postgres                              有
                                      (サーバプロセス)                                  バ
                                             postgres
                                       (サーバプロセス)
クライアント                                                                           ッ
                                        (サーバプロセス)                                フ
                                                                                 ァ
                                                                                 )
                                                       writer
                                                    (バックグラウンド
                                                       ライタ)
                               wal writer
                              (WALライタ)

                                                      テーブル
                                                      ファイル
                            トランザクション                                    インデックス
                             ログファイル                                      ファイル

         Copyright 2012 Uptime Technologies LLC, All rights reserved.                                 9
データファイルの配置
データベースクラスタ(PGDATA)領域

  システムカタログ(global)
                                                                     設定ファイル
              テーブルファイル
              テーブルファイル                                      (postgresql.conf, pg_hba.conf)
               テーブルファイル

              インデックスファイル
              インデックスファイル                                            その他制御ファイル等
               インデックスファイル

  デフォルトテーブルスペース(base)                                         トランザクションログ(pg_xlog)
       ユーザデータベース(OID)
        ユーザデータベース(OID)
         ユーザデータベース(OID)
           テーブルファイル
           テーブルファイル
            テーブルファイル

             インデックスファイル
             インデックスファイル
              インデックスファイル



     外部テーブルスペース
     外部テーブルスペース                                                        アーカイブログ領域
      テーブルスペース領域

       54.1. データベースファイルのレイアウト http://www.postgresql.jp/document/9.0/html/storage-file-layout.html
                 Copyright 2012 Uptime Technologies LLC, All rights reserved.                10
(2)初期設定




Copyright 2012 Uptime Technologies LLC, All rights reserved.   11
PostgreSQLの設定
•   カーネルパラメータ
    – 共有メモリ、セマフォの設定
    – ハードウェアのスペックによっては、デフォルトのままではPostgreSQL起動
      時にエラーとなる


•   postgresql.conf
    – PostgreSQLパラメータ設定ファイル
    – initdbコマンドでデータベースクラスタを作成すると生成される


•   pg_hba.conf
    – ホストベースアクセス認証(HBA)設定ファイル
    – 接続元のホスト情報(IP)を使ってアクセス制御を行う




                      Copyright 2012 Uptime Technologies LLC, All rights reserved.   12
postgresql.confで設定できる項目
• 共有バッファ

• WALバッファ

• ワークメモリ(ソートメモリ)

• チェックポイント

• バックグランドライタ

• 自動VACUUM


             Copyright 2012 Uptime Technologies LLC, All rights reserved.   13
共有バッファ、WALバッファ、ワークメモリ
•   共有バッファ
    – テーブルやインデックスなどのデータファイルをブロック単位でキャッシュしておく共有メ
      モリ内の領域。
    – shared_buffersパラメータで指定。
    – 数GB程度から始め、キャッシュのヒット率を見ながら調整を行う。

•   WALバッファ
    –   WALレコードをディスクに書き出す前にバッファリングされる共有メモリ内の領域。
    –   wal_buffersパラメータで指定。
    –   トランザクションがCOMMITされるとフラッシュされる。
    –   同時実行トランザクションが多い場合、または長いトランザクションが多い場合には大
        きめに設定(16MB、32MBなど)。

•   ワークメモリ(ソートメモリ)
    – SQLでソート処理を行う際にメモリ内でソートを行える上限値(デフォルトは1MB)。
    – work_memパラメータで指定。
    – EXPLAIN ANALYZEで「Sort Method: external merge Disk: ????kB」が頻発し、パ
      フォーマンスが悪化している場合は増加(同時実行数とメモリ使用量に注意)。
                          第18章 サーバの設定 http://www.postgresql.jp/document/9.0/html/runtime-config.html
                    Copyright 2012 Uptime Technologies LLC, All rights reserved.             14
postgresql.conf
•   必ず変更すべき項目(パフォーマンス関連)
    –   shared_buffers
    –   checkpoint_segments
    –   checkpoint_timeout
    –   wal_buffers

•   必ず変更すべき項目(バックアップ・リカバリ関連)
    –   wal_level
    –   archive_mode
    –   archive_command
    –   archive_timeout

•   変更を推奨する項目
    – log_line_prefix
    – log_filename

•   確認・変更を推奨する項目
    – max_connections
                                                       第18章 サーバの設定
    – log_min_duration                                 http://www.postgresql.jp/document/9.0/html/runtime-config.html
                        Copyright 2012 Uptime Technologies LLC, All rights reserved.                          15
pg_hba.conf
•   認証を行うための6項目を1エントリ1行として記述する。

•   接続方法
    –   local, host, hostssl, hostnossl
•   データベース名
    –   all, <データベース名>
•   ユーザ名
    –   all, +<グループ名>, <ユーザ名>
•   接続元IPアドレス
    –   192.168.0.0/255.255.255.0 など
•   認証方法
    –   trust, md5, password, ident, pam, krb5, ldap, 等

# "local" is for Unix domain socket connections only
local   all             all                                                                ident
# IPv4 local connections:
host    all             all             127.0.0.1/32                                       ident
# IPv6 local connections:
host    all             all             ::1/128                                            ident

                            19.1. pg_hba.confファイル http://www.postgresql.jp/document/9.0/html/auth-pg-hba-conf.html
                            Copyright 2012 Uptime Technologies LLC, All rights reserved.                 16
(3)データベースの監視




Copyright 2012 Uptime Technologies LLC, All rights reserved.   17
なぜ「監視」が重要なのか?
• PDCA(Plan-Do-Check-Action)を回すため
  – データベースがきちんとサービスを提供しているか?
  – 性能レベルが落ちていないか?


• 監視は「Action」につなげるための「Check」
  – チューニングを行う
  – ハードウェアの増強を行う
  – メンテナンスを行う


• 「何のために、何を監視するのか」
  – あらかじめ決めておくことが重要




            Copyright 2012 Uptime Technologies LLC, All rights reserved.   18
OSパフォーマンス監視
•   vmstat
•   iostat
•   mpstat
•   sar
•   ps
•   free




             Copyright 2012 Uptime Technologies LLC, All rights reserved.   19
データベースの何を監視するのか?
•   SQLパフォーマンス監視
    – セッション数
    – キャッシュヒット率
    – ディスクI/O


•   ディスク領域監視
    – データ領域(テーブルスペース)、オブジェクトサイズ
    – トランザクションログ領域
    – アーカイブログ領域


•   サーバログ監視
    – FATALログ、ERRORログ、WARNINGログ、LOGログ


•   システムリソース監視
    – CPU、メモリ、ネットワーク、ディスク、プロセス・・・

               Copyright 2012 Uptime Technologies LLC, All rights reserved.   20
PostgreSQL内部の監視項目
•   オブジェクトサイズ
    – データベースサイズ
        • pg_database_size()関数
    – テーブルサイズ
        • pg_relation_size()関数、pg_total_relation_size()関数

•   トランザクション量(論理I/O)
    – コミット数、ロールバック数(データベース単位)
    – INSERT/UPDATE/DELETE数(テーブル/インデックス単位)
        • pg_stat_databaseビュー、pg_stat_user_tablesビュー、pg_stat_user_indexesビュー

•   ディスクI/O量(物理I/O)
    – ブロック読み込み、キャッシュ読み込み(データベース単位)
    – ブロック読み込み、キャッシュ読み込み(テーブル/インデックス単位)
        • pg_statio_user_tablesビュー、pg_statio_user_indexesビュー

•   セッション情報
    – pg_stat_activityビュー

•   ロック情報
    – pg_locksビュー

                       Copyright 2012 Uptime Technologies LLC, All rights reserved.   21
監視結果の可視化
  • サンプルWebアプリを数日間実行し、その間のトランザク
    ション数およびデータベースサイズを計測

                        データベースサイズとトランザクション数

            740                                                                                    1200
            720




                                                                                                          トランザクション数(TPM)
                                                                                                   1000
            700
DBサイズ(MB)




                                                                                                   800
            680
            660                                                                                    600
            640
                                                                                                   400
            620
                                                                                                   200
            600
            580                                                                                    0
            2006/5/4   2006/5/5                      2006/5/6                         2006/5/7

                                                                                           ※PostgreSQL 8.1で計測
                       Copyright 2012 Uptime Technologies LLC, All rights reserved.                                22
全体の傾向を可視化する
•    pg_statinfo/pg_reporterを使って、アクセス統計情報を可視化する。
       –   データベース統計情報
       –   ディスク使用状況
       –   テーブル統計情報
       –   チェックポイント情報
       –   Autovacuum実行状況
       –   SQL文実行状況
       – 等・・・




pg_statsinfo: Project Home Page
http://pgstatsinfo.projects.postgresql.org/

                                   Copyright 2012 Uptime Technologies LLC, All rights reserved.   23
(4)パフォーマンスチューニング(概論)




   Copyright 2012 Uptime Technologies LLC, All rights reserved.   24
パフォーマンスは何で決まるか?
•   「単一クエリのレスポンス×クエリの同時実行数」
    – 単一クエリのレスポンス
      •   サーバ・クライアント間通信(ネットワーク)
      •   SQLの構文解析、最適化(CPU処理)
      •   ロックの競合(ロック待ち、デッドロックの発生)
      •   テーブル、インデックス、ログへのI/O量(ディスクI/O)
      •   ソート、結合などの演算処理(CPU処理、ディスクI/O)
    – クエリの同時実行数
      • 接続クライアント数(いわゆるWebユーザ数)
      • コネクションプール接続数

•   全体としてハードウェアのキャパシティの範囲内であるか?
    – ネットワーク、ディスクI/O、メモリ、CPUなどがボトルネックとなり得る。
    – ただし、ボトルネック自体は「結果」であり、「原因」ではない。
    – 「なぜ、それがボトルネックになっているのか?」が重要。
      • テーブル設計? SQL文? 同時接続数? HW? 設定パラメータ?・・・




                 Copyright 2012 Uptime Technologies LLC, All rights reserved.   25
データベースを構成するハードウェアリソース
•   複雑な構造を持つRDBMSでは、ボトルネックはいたるところに発生し得
    るため、まずはきちんと切り分けることが重要。
     – いきなりパラメータチューニングとかを始めない。
                                                                                    CPUネック?
                                                                                  ソート? スキャン?
                                                            CPU

               ネットワーク
              インターフェース                                      メモリ                     ロック待ち?
    ネットワーク?
                                          プロセス空間


                                          プロセス空間                       共有メモリ

                                          プロセス空間

                   スワップ発生?                           ディスクキャッシュ                  読み込み? 書き込み?
                                                                                テーブル/インデックス?
                                                                                 トランザクションログ?
                            ディスクソート?


                                                               ディスク
              データベースサーバ

                 Copyright 2012 Uptime Technologies LLC, All rights reserved.                  26
パフォーマンス問題の切り分け
 • データベースの構成要素ごとに分解していく
                                             ファイルシステム                      パーサ
ボトルネック                 sys
                                               実行負荷                     オプティマイザ
                      user
         CPU                                   実行回数                     エグゼキュータ
                    io wait
                                                  I/O量
                       idle
                                            ディスク性能
         メモリ       スワップ
                                            ディスク性能
                     WAL                     WAL生成量
                                                                        共有バッファ
     ディスク           データ                            読み
                                                                        データサイズ
                    その他
                                                                           bgwriter
                                                   書き
                デッドロック                                                   checkpoint    回数
         ロック
                    その他                                                               書き出し量

     その他        ネットワーク
                Copyright 2012 Uptime Technologies LLC, All rights reserved.             27
パフォーマンス改善の基本手順
•   全体のパフォーマンスの傾向をつかむ
    – どのデータベース、テーブルへのアクセスか? HWの利用状況はどうか?
    – どのメトリックスとどのメトリックスが相関があるか?

•   遅いSQL文を特定する or 実行回数の多いSQLを特定する
    – log_min_durationオプション
    – pgFouine

•   特定のSQLだけが遅い場合・・・
    – SQLのクエリプランおよび実行状況を確認する(EXPLAIN)

•   遅いSQLが特定されない(偏りがない)場合・・・
    – ハードウェアリソースのボトルネックを探す

•   対策を実施する
    –   SQL文を書き換える、インデックスを張る、テーブル設計を修正する
    –   アプリケーションを修正する
    –   ハードウェアを増強する
    –   他・・・


                   Copyright 2012 Uptime Technologies LLC, All rights reserved.   28
(4)パフォーマンスチューニング(SQL編)




    Copyright 2012 Uptime Technologies LLC, All rights reserved.   29
SQLパフォーマンス分析
•    pgFouineによる問題SQL文の抽出、ランキング作成
       – 総実行時間=レスポンスタイム(実行時間)×実行回数
       – 最長レスポンスタイム
       – 他・・・




pgFouine - a PostgreSQL log analyzer
http://pgfouine.projects.postgresql.org/

                                   Copyright 2012 Uptime Technologies LLC, All rights reserved.   30
SQLクエリ文字列の生成方法の問題

• アプリケーションコードでSQL文を作成する際、指定する条
  件に応じてFROM句やJOINを最適化する必要がある。

• アプリ内で文字列を連結してSQL文を生成しても、必ずしも
  パフォーマンスのよいSQL文が作成されるとは限らない。

• (例)使われていないテーブルのJOINとソート、等




         Copyright 2012 Uptime Technologies LLC, All rights reserved.   31
SQLチューニング(例)

• 無駄なJOINをなくす
  – 使っていないテーブル(特に詳細テーブルB)のJOINを排除し、最小
    限のリソース(メモリ)で処理を行う。
  – 詳細テーブルBだけでも500MB以上あるので、不用意にJOINしてい
    てはメモリがいくらあっても足りない(上限はwork_memで設定。上
    限を超えるとディスクを使う)。


• LIMITを使用して、ソート時のデータ量を抑制する
  – 可能な限り(集約系以外は基本的に)LIMITを使用する。
  – サブクエリでLIMITをかける(最初のJOINをする前にデータ量を抑
    制)。


• インデックスを作成、インデックスが効くクエリに書き換える


          Copyright 2012 Uptime Technologies LLC, All rights reserved.   32
SQLチューニング結果(例)
•   一部クエリについてはパフォーマンスが改善された。
    (以下は、ディスクキャッシュが効いていない状況下で測定)
                                        SQLチューニング結果

                40

                35

                30
      実行時間(秒)




                25
                                                                                       Before
                20                                                                     Tuned 1
                                                                                       Tuned 2
                15

                10

                 5

                 0
                     Query 1                  Query 2                    Query 3


•   テーブル設計によってはパフォーマンス向上を実現できない場合もある。
                        Copyright 2012 Uptime Technologies LLC, All rights reserved.             33
SQLチューニングチェックシート
•   各テーブルのテーブル定義、インデックス定義、レコード件数は確認でき
    ていますか?
•   PostgreSQL のバージョンはいくつですか? postgresql.conf の内容は
    確認できますか?
•   重いSQL は特定できていますか?
•   重いSQL はどのような実行プランになっていますか?
•   大きなシーケンシャルスキャン、ソートはありませんか?
•   想定していないスキャン、ソートが実行されている場合
•   インデックスが使われていない場合
•   インデックスが使われている場合




•   「もうダメ!」と思ったときは(でも、できればそうなる前にw)
    弊社「オープンソース導入サポートサービス」へご相談ください
    http://www.uptime.jp/go/oss
               Copyright 2012 Uptime Technologies LLC, All rights reserved.   34
SSDを導入してみると・・
                                                               Query Execution Time


                                                                           HDD     SSD


                         16,000


                         14,000


                         12,000
Elapsed Time (seconds)




                         10,000


                          8,000


                          6,000


                          4,000


                          2,000


                             0
                                       2

                                             9



                                                    6




                                                                 8




                                                                             3




                                                                             4




                                                                             1




                                                                                                           5

                                                                                                                  7
                                     1
                                      14




                                            20



                                                   17
                                                   18



                                                                21

                                                                13



                                                                            22

                                                                            16



                                                                            11

                                                                            15



                                                                            10

                                                                            19




                                                                                                                12

                                                                                                                  2
                             AD




                                      Q

                                            Q



                                                   Q




                                                                Q




                                                                            Q




                                                                            Q




                                                                            Q




                                                                                                          Q

                                                                                                                Q
                                  RF




                                                                                                               RF
                                     Q




                                           Q



                                                  Q

                                                  Q



                                                               Q

                                                               Q



                                                                           Q

                                                                           Q



                                                                           Q

                                                                           Q



                                                                           Q

                                                                           Q




                                                                                                               Q
                           LO




                                                                         DBT-3 Queries


                                              OSDL DBT-3によるPostgreSQLの性能評価(SATA HDD&SATA SSD編)
                                              http://www.uptime.jp/ja/resources/techdocs/2012/05/pgsql_dbt3_hdd_ssd/
                                           Copyright 2012 Uptime Technologies LLC, All rights reserved.               35
(4)パフォーマンスチューニング(GUC編)




     ※GUC(Grand Unified Configuration)
      PostgreSQLのパラメータ管理モジュール。postgresql.confで設定・管理する。
    Copyright 2012 Uptime Technologies LLC, All rights reserved.   36
パラメータチューニング(例)
• shared_buffers
   – checkpoint_segments=3固定
                                                共有バッファサイズとpgbenchスコア
                                                  (checkpoint_segments=3)

                          300

                          290

                          280
        pgbenchスコア(tps)




                          270

                          260

                          250

                          240

                          230

                          220

                          210
                                1000         2000        4000      8000    16000            32000     64000
                                                           shared_buffers設定値
                                                                                     ※PostgreSQL 8.1で計測

                                       Copyright 2012 Uptime Technologies LLC, All rights reserved.           37
パラメータチューニング(例)
• checkpoint_segments
   – shared_buffers=32000固定


                                              checkpoint_segmentsと性能推移

                        500

                        450

                        400

                        350
      pgbenchスコア(tps)




                        300

                        250

                        200

                        150

                        100

                        50

                         0
                              1     2           4          8          16          32          64   128
                                                    checkpoint_segments設定値
                                                                                   ※PostgreSQL 8.1で計測


                                   Copyright 2012 Uptime Technologies LLC, All rights reserved.          38
パラメータチューニング(例)
• shared_buffers
   – checkpoint_segments=32固定


                                                 共有バッファサイズとpgbenchスコア
                                                   (checkpoint_segments=32)

                            500
                            450

                            400
                            350
          pgbenchスコア(tps)




                            300
                            250
                            200
                            150
                            100

                             50
                              0
                                  1000       2000        4000       8000        16000       32000   64000
                                                             shared_buffers設定値
                                                                                   ※PostgreSQL 8.1で計測


                                    Copyright 2012 Uptime Technologies LLC, All rights reserved.            39
パラメータチューニング(例)
             •                 バックグラウンドライタ(bgwriter)は、dirtyページを少しずつディスクに
                               書き戻す

                                                                             bgwriter無効                                                                                                                                                                                   bgwriter有効
                                                     使用中バッファ                                                                       dirtyバッファ                                                                                                   使用中バッファ                                                               dirtyバッファ
           18000                                                                                                                                                                                             18000

           16000                                                                                                                                                                                             16000

           14000                                                                                                                                                                                             14000

           12000                                                                                                                                                                                             12000




                                                                                                                                                                                                  バッファページ数
バッファページ数




           10000                                                                                                                                                                                             10000

            8000                                                                                                                                                                                             8000

            6000                                                                                                                                                                                             6000

            4000                                                                                                                                                                                             4000

            2000                                                                                                                                                                                             2000

                 0                                                                                                                                                                                              0




                                                                                                                                                                                                                     24:37.1
                                                                                                                                                                                                                               24:40.9
                                                                                                                                                                                                                                         24:44.9
                                                                                                                                                                                                                                                   24:49.3
                                                                                                                                                                                                                                                             24:53.8
                                                                                                                                                                                                                                                                       24:57.9
                                                                                                                                                                                                                                                                                 25:05.0
                                                                                                                                                                                                                                                                                           25:11.4
                                                                                                                                                                                                                                                                                                     25:19.0
                                                                                                                                                                                                                                                                                                               25:26.6
                                                                                                                                                                                                                                                                                                                         25:33.4
                                                                                                                                                                                                                                                                                                                                   25:39.3
                                                                                                                                                                                                                                                                                                                                             25:46.7
                                                                                                                                                                                                                                                                                                                                                       25:51.6
                                                                                                                                                                                                                                                                                                                                                                 25:58.3
                                                                                                                                                                                                                                                                                                                                                                           26:05.2
                                                                                                                                                                                                                                                                                                                                                                                     26:12.3
                                                                                                                                                                                                                                                                                                                                                                                               26:19.7
                     27:04.7
                               27:08.4
                                         27:12.6
                                                   27:17.0
                                                             27:21.5
                                                                       27:25.4
                                                                                 27:32.4
                                                                                           27:39.7
                                                                                                     27:47.8
                                                                                                               27:56.4
                                                                                                                         28:04.4
                                                                                                                                   28:10.7
                                                                                                                                             28:17.6
                                                                                                                                                       28:25.0
                                                                                                                                                                 28:30.4
                                                                                                                                                                           28:36.5
                                                                                                                                                                                     28:41.6




                                                                                                     時刻                                                                                                                                                                                                時刻

                                                                                                                                                                                                                                                                                                                   ※PostgreSQL 8.1で計測
                                                                                                                                                                                               F.24. pg_buffercache
                                                                                                                                                                                               http://www.postgresql.jp/document/9.0/html/pgbuffercache.html
                                                                                                                         Copyright 2012 Uptime Technologies LLC, All rights reserved.                                                                                                                                                                                                 40
パラメータ設定におけるトレードオフ
•   共有バッファを大きくすると・・・
    – より多くのディスクブロックを共有バッファに保持できるため、パフォーマンス
      が向上する。
    – 大量のdirtyページが発生するため、チェックポイント時の負荷が高くなる。

•   チェックポイントの間隔を大きくすると・・・
    – チェックポイントの発生数を抑え、パフォーマンスが向上する。
    – チェックポイント時の負荷が高くなる。
    – クラッシュリカバリに要する時間が長くなる。

•   バックグラウンドライタを頻繁に動かす(多く書き出す)と・・・
    – チェックポイントにおける負荷は減るが、書き出しのディスクI/Oが頻発する
      (書き出しの平準化により) 。
    – 全体的なパフォーマンスが低下する。(特にディスクが1本の場合)




             Copyright 2012 Uptime Technologies LLC, All rights reserved.   41
(5)バックアップ・リカバリ(概論)




  Copyright 2012 Uptime Technologies LLC, All rights reserved.   42
バックアップとレストア/リカバリ
• バックアップの難しさ
 –   データはファイルの中にだけあるのではない
 –   通常は、共有バッファの内容が最新
 –   ファイルだけバックアップを取ってもダメ
 –   ミリ秒単位で処理が進む中、すべてを一貫性を保った状態で


• バックアップの種類
 – コールドバックアップ
 – ホットバックアップ
 – PITR(アーカイブログ)バックアップ


• バックアップ&レストア/リカバリはリハーサルをしよう!
 – 簡単な試験や手順書を作るだけで満足してはいけない・・・

           Copyright 2012 Uptime Technologies LLC, All rights reserved.   43
興行収入5億ドルの “TOY STORY 2” は一度消えかけた




     http://www.tested.com/videos/44220-how-pixar-almost-lost-toy-story-2-to-a-bad-backup/
             Copyright 2012 Uptime Technologies LLC, All rights reserved.         44
コールドバックアップ
•   サーバプロセスをすべてシャットダウンしてデータファイル全体をバックアップ
    – バックアップの間、サービス停止が発生する。
    – リカバリの際には、バックアップ時のデータに戻る。
    – ファイルバックアップなのでレストアが簡単。
•   向いているケース
    – 前回バックアップ以降の更新データを、アプリログなどから復旧できる場合。
    – ストレージスナップショットが一般化した今、案外現実的。
•   向いていないケース
    – サービスを停止させられない場合。
    – 障害発生の直前までの更新データが必要で、DB以外から復旧できない場合。



                                                                                   Crash
               ①サービス
                           WAL1                    WAL2                   WAL3
                停止 &                                                               ②障害発生
                ファイル
                バックアップ
                                                                                    ③レストア

           Index
       Table

                    Copyright 2012 Uptime Technologies LLC, All rights reserved.            45
ホットバックアップ(pg_dump/pg_restore)
•   あるタイミングでデータの一貫性を保ちつつバックアップ(export)
    – シンプルかつ柔軟(テーブル単位のバックアップも可)
    – バックアップ時にサービス停止は起こらない。
    – リカバリの際には、バックアップ時のデータに戻る。
•   向いているケース
    – 前回バックアップ以降の更新データを、アプリログなどから復旧できる場合。
    – データベース単位、テーブル単位でバックアップを取りたい場合。
    – 論理バックアップが必要な場合(メジャーバージョンアップなど)
•   向いていないケース
    – 障害発生の直前までの更新データが必要で、DB以外から復旧できない場合。



                                                                                    Crash
                         WAL1                       WAL2                   WAL3
               ①pg_dumpで                                                            ②障害発生
                スナップショットを
                バックアップ
                                                                                     ③レストア

           Index
       Table

                     Copyright 2012 Uptime Technologies LLC, All rights reserved.            46
(5)バックアップ・リカバリ(PITR)




  Copyright 2012 Uptime Technologies LLC, All rights reserved.   47
アーカイブログとPITRを用いたバックアップ
•   ベースバックアップ(基準点)+アーカイブログ(更新差分)
    – サービスを継続したままベースバックアップを取得可能(非一貫性バックアップ)
    – クラッシュ直前のWALの内容まで復旧することが可能
•   向いているケース
    – データベースクラスタ全体の完全なバックアップを取りたい場合。
    – クラッシュ直前の更新まで復旧させる必要がある場合。
•   向いていないケース
    – データベース単位、テーブル単位などでバックアップを取得したい場合。

                                                                                       Crash
                             WAL1                   WAL2                    WAL3        WAL4
               ①ベースバック
                アップの取得
                (非一貫性              ②WAL1を                  ③WAL2を                  ④WAL3を
                 バックアップ)            アーカイブ                   アーカイブ                   アーカイブ



           Index             WAL1                   WAL2                    WAL3
       Table
                   レストア&リカバリに必要なファイル類
                    Copyright 2012 Uptime Technologies LLC, All rights reserved.               48
アーカイブログとPITRを用いたリカバリ
•   ベースバックアップ(基準点)+アーカイブログ(更新差分)
    – ベースバックアップをレストア後、アーカイブログをロールフォワードリカバリする。
    – 前回のベースバックアップ以降、長期間が経過しているとアーカイブログが多くなり、リ
      カバリの時間が長くなる。
    – ベースバックアップレストア時間+アーカイブログ適用時間×アーカイブログ数


                                                                                          ⑥リカバリ完了




                        WAL1                   WAL2                    WAL3            WAL4
             ①ベース                                                                       ⑤オンラインWAL
              バックアップを         ②WAL1を                  ③WAL2を                  ④WAL3を     (WAL4)を適用
              レストア             適用                      適用                      適用



         Index          WAL1                   WAL2                    WAL3
     Table
                 レストア&リカバリに必要なファイル類
                        Copyright 2012 Uptime Technologies LLC, All rights reserved.                 49
アーカイブログ関連パラメータ
•   wal_level
     – 生成されるWALレコードの内容を指定する(”minimal”, “archive”, “hot_standby”)
     – アーカイブログを取得する場合には “archive” を指定


•   archive_mode
     – アーカイブログ取得モードを設定する(”on” or “off”)


•   archive_command
     – オンラインWALファイルをアーカイブするOSコマンド(一般的には cp コマンドなど)
     – 'cp %p /var/lib/pgsql/9.0/backups/archlog/%f‘

•   archive_timeout
     – 使用中のオンラインWALファイルを強制的にアーカイブする秒数を指定
     – 更新(WALレコード)が少ない場合などでも、確実にアーカイブしたい場合などに設定



                                                   18.5. ログ先行書き込み(WAL)
                                                   http://www.postgresql.jp/document/9.0/html/runtime-config-wal.html

                      Copyright 2012 Uptime Technologies LLC, All rights reserved.                          50
ベースバックアップの取得手順と取得対象
• 前提条件
 – アーカイブログの設定が有効になっていること


• 取得手順
 – pg_start_backup()でバックアップ開始
 – データベースクラスタ全体のバックアップを取得
 – pg_stop_backup()でバックアップ完了


• 取得対象
 – データベースクラスタ全体
 – テーブルスペース(使用している場合)
 – XLOGファイル(pg_xlog以下)とpostmaster.pidファイルは除く



            Copyright 2012 Uptime Technologies LLC, All rights reserved.   51
リストア、リカバリ手順
•   PostgreSQLサーバを停止する

•   障害の発生したデータベースを保存する(可能であれば)
    – データベースクラスタ
    – トランザクションログ(残っている場合は必ず保護する)
    – テーブルスペース

•   ベースバックアップをレストアする

•   ベースバックアップ取得以降のアーカイブログをレストアする

•   最新のトランザクションログを配置する

•   リカバリ設定ファイル(recovery.conf)を作成する

•   PostgreSQLサーバを起動し、リカバリ処理を実行する
               Copyright 2012 Uptime Technologies LLC, All rights reserved.   52
PITRのリカバリ動作状況
[2011-12-12 06:32:52 JST] 31582: LOG:           database system was interrupted; last known
    up at 2011-12-12 06:12:28 JST
[2011-12-12 06:32:52 JST] 31582: LOG:           restored log file "00000002.history" from
    archive
[2011-12-12 06:32:52 JST] 31582: LOG:           starting archive recovery
[2011-12-12 06:32:52 JST] 31582: LOG:           restored log file "000000010000000000000005"
    from archive
[2011-12-12 06:32:53 JST] 31582: LOG:           redo starts at 0/5000070
[2011-12-12 06:32:53 JST] 31582: LOG:           consistent recovery state reached at
    0/6000000
[2011-12-12 06:32:53 JST] 31582: LOG:           restored log file "000000010000000000000006"
    from archive
(...snip...)
[2011-12-12 06:33:40 JST] 31582: LOG:           restored log file "00000001000000000000000F"
    from archive
[2011-12-12 06:33:47 JST] 31582: LOG:           restored log file "000000020000000000000010"
    from archive
(...snip...)
[2011-12-12 06:34:49 JST] 31582: LOG:           restored log file "00000002000000000000001A"
    from archive
[2011-12-12 06:34:49 JST] 31582: LOG:           could not open file
    "pg_xlog/00000002000000000000001B"          (log file 0, segment 27): No such file or
    directory
[2011-12-12 06:34:49 JST] 31582: LOG:           redo done at 0/1A00511C
[2011-12-12 06:34:49 JST] 31582: LOG:           last completed transaction was at log time
    2011-12-12 06:23:09.691458+09
[2011-12-12 06:34:49 JST] 31582: LOG:           restored log file "00000002000000000000001A"
    from archive
[2011-12-12 06:34:49 JST] 31582: LOG:           restored log file "00000003.history" from
    archive
[2011-12-12 06:34:49 JST] 31582: LOG:           selected new timeline ID: 4

                      Copyright 2012 Uptime Technologies LLC, All rights reserved.             53
(5)バックアップ・リカバリ(運用)




  Copyright 2012 Uptime Technologies LLC, All rights reserved.   54
バックアップ、リカバリの運用
•   指定したサイクルで定期的にベースバックアップを取得
    – ベースバックアップスクリプトをcron等で実行し、ベースバックアップを取得
    – 世代ごとにサブディレクトリを作ってベースバックアップを保存
    – 指定した世代数を超えたベースバックアップを削除
    – もっとも古い世代のベースバックアップ以前のアーカイブログを削除


•   障害が発生した場合は、ベースバックアップおよびアーカイブログからリ
    カバリ
    – XLOGバックアップスクリプトを実行し、オンラインWALファイルを保存
    – リカバリスクリプトを実行し、最新のベースバックアップ、およびオンライン
      WALファイルをレストアし、リカバリ設定ファイルを作成
    – PostgreSQLサービスを起動し、リカバリを実行




             Copyright 2012 Uptime Technologies LLC, All rights reserved.   55
ベースバックアップの世代管理
•   指定したバックアップ世代数に合わせて、ベースバックアップとアーカイブログを
    管理する
    – 最新のベースバックアップを取得できたら、もっとも古いベースバックアップを削除
    – アーカイブログは、もっとも古いベースバックアップ以前のものを削除

    (例)ベースバックアップを3世代分保持する場合
                                     コピー
         データベース                                             スナップショット
          クラスタ                                               (一時領域)
                                                                                     アーカイブ、圧縮
                                                             第0世代
            WAL
                                                                                 Rotate
                                                             第1世代
                                                                                 Rotate
                   アーカイビング                                   第2世代
                                                                                 第0世代を取得後に削除
                                                             第3世代


                                                                                  第2世代以降に生成された
                                                            アーカイブログ
                                                                                  アーカイブログを保持

                                                                        バックアップ用ストレージ
                  Copyright 2012 Uptime Technologies LLC, All rights reserved.                  56
リカバリ時の動作
•   最新のWALファイルを保存、最新の世代のベースバックアップからレストアし、リ
    カバリ実施に必要な設定ファイルを作成する
    –   データベースクラスタに残っている最新のWALを保存(①)
    –   ベースバックアップからレストア(②)
    –   最新WALを再度配置(③)
    –   リカバリを開始したら、アーカイブログを適用(④)


           データベース                                             スナップショット
                                     ②レストア                     (一時領域)
            クラスタ
                                                               第0世代
              WAL
                                                               第1世代
                                          ①最新WAL
                                             保存
                                                               第2世代
                      ④適用
                                              ③最新
                                                    最新WAL
                                              WAL配置

                                                                                   第2世代以降に生成された
                                                              アーカイブログ
                                                                                   アーカイブログを保持

                                                                          バックアップ用ストレージ
                    Copyright 2012 Uptime Technologies LLC, All rights reserved.              57
Q&A




Copyright 2012 Uptime Technologies LLC, All rights reserved.   58
さらに詳しくなりたい方は
•   PostgreSQLアーキテクチャ入門(自習用教材)
    –   内容:プレゼンテーションを録画した動画、及び使用しているスライド
    –   動画時間:約55分
    –   スライドページ数:54ページ
    –   ファイル形式:MP4(動画)およびPDF(スライド)
    –   価格:1,050円(税込)


•   OSDL DBT-3によるPostgreSQLの性能評価(SATA HDD&SATA
    SSD編)
    –   内容:技術検証レポート
    –   ページ数:54ページ
    –   ファイル形式:PDF
    –   価格:1,260円(税込)


    いずれも http://www.uptime.jp から購入できます。

                Copyright 2012 Uptime Technologies LLC, All rights reserved.   59
【お問い合わせ先】
アップタイム・テクノロジーズ合同会社
永安 悟史
E-mail: snaga@uptime.jp
Web: http://www.uptime.jp/

                  Copyright 2012 Uptime Technologies LLC, All rights reserved.   60

More Related Content

What's hot

統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...NTT DATA Technology & Innovation
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)NTT DATA Technology & Innovation
 
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャKohei KaiGai
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイドTakahiro Itagaki
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
 
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Similar to いまさら聞けないPostgreSQL運用管理

PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)Uptime Technologies LLC (JP)
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014Shigeru Hanada
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009Ryota Watabe
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoShigeru Hanada
 
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012Shigeru Hanada
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)Kosuke Kida
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)l_b__
 
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介Kodai Terashima
 
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceYAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceKazuho Oku
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化Takatoshi Matsuo
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 

Similar to いまさら聞けないPostgreSQL運用管理 (20)

PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
 
PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
 
PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)PostgreSQLレプリケーション(pgcon17j_t4)
PostgreSQLレプリケーション(pgcon17j_t4)
 
Nginx
NginxNginx
Nginx
 
Fluentd casual
Fluentd casualFluentd casual
Fluentd casual
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介
 
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceYAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 

More from Uptime Technologies LLC (JP)

PL/Pythonで独自の集約関数を作ってみる
PL/Pythonで独自の集約関数を作ってみるPL/Pythonで独自の集約関数を作ってみる
PL/Pythonで独自の集約関数を作ってみるUptime Technologies LLC (JP)
 
pgstattuple2: デッドタプル推定のための統計的手法
pgstattuple2: デッドタプル推定のための統計的手法pgstattuple2: デッドタプル推定のための統計的手法
pgstattuple2: デッドタプル推定のための統計的手法Uptime Technologies LLC (JP)
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisitedUptime Technologies LLC (JP)
 
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告Uptime Technologies LLC (JP)
 
Uptime Database Appliance テクノロジープレビュー
Uptime Database Appliance テクノロジープレビューUptime Database Appliance テクノロジープレビュー
Uptime Database Appliance テクノロジープレビューUptime Technologies LLC (JP)
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13Uptime Technologies LLC (JP)
 

More from Uptime Technologies LLC (JP) (10)

PL/Pythonで独自の集約関数を作ってみる
PL/Pythonで独自の集約関数を作ってみるPL/Pythonで独自の集約関数を作ってみる
PL/Pythonで独自の集約関数を作ってみる
 
PostgreSQLセキュリティ総復習
PostgreSQLセキュリティ総復習PostgreSQLセキュリティ総復習
PostgreSQLセキュリティ総復習
 
Postgres Toolkit
Postgres ToolkitPostgres Toolkit
Postgres Toolkit
 
Postgres Toolkitのご紹介
Postgres Toolkitのご紹介Postgres Toolkitのご紹介
Postgres Toolkitのご紹介
 
pgstattuple2: デッドタプル推定のための統計的手法
pgstattuple2: デッドタプル推定のための統計的手法pgstattuple2: デッドタプル推定のための統計的手法
pgstattuple2: デッドタプル推定のための統計的手法
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
 
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
 
PostgreSQL Query Cache - "pqc"
PostgreSQL Query Cache - "pqc"PostgreSQL Query Cache - "pqc"
PostgreSQL Query Cache - "pqc"
 
Uptime Database Appliance テクノロジープレビュー
Uptime Database Appliance テクノロジープレビューUptime Database Appliance テクノロジープレビュー
Uptime Database Appliance テクノロジープレビュー
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

いまさら聞けないPostgreSQL運用管理

  • 1. いまさら聞けないPostgreSQL運用管理 アップタイム・テクノロジーズ 永安 悟史 2012.5.24 Copyright 2012 Uptime Technologies LLC, All rights reserved. 1
  • 2. 自己紹介 • 永安 悟史 (ながやす さとし) • 略歴 – 1997年よりインターネットベンチャーにてネットサービス開発・運用に従事。 – 2004年より(株)NTTデータにて、並列分散データベースの研究開発、技術支援・保守 サポート業務を経て、データセンタの新規サービス開発、運用チームの立ち上げ、 サービス運用などに従事。 – 2009年、アップタイム・テクノロジーズを創業。 • 専門分野 – データベースシステム、並列分散システム、クラスタシステム – オープンソース・インフラ技術 – ITサービスマネジメント(ITIL)、ITインフラ運用管理(運用設計~運用) • 本業@アップタイム・テクノロジーズ – オープンソース導入サポートサービス – データベース・コンサルティング – ITサービスマネジメント・コンサルティング Copyright 2012 Uptime Technologies LLC, All rights reserved. 2
  • 3. DevsとOpsを経験してみて • 運用担当者こそ技術的知識を – データベースの運用管理は特に難しい – 非計画停止はもとより、データロストは致命的 • プロジェクト管理や要件定義の甘さが運用に跳ねる – バッチ処理 – バックアップ・リカバリ(可用性)設計 – メンテナンス設計 • 「運用でカバー」と言わせないために – 基盤設計時・運用設計時に「合理的なツッコミ」をできるか? – 適切なタイミングで適切なツッコミを入れられるスキルを Copyright 2012 Uptime Technologies LLC, All rights reserved. 3
  • 4. いまさら聞けないPostgreSQL運用管理 アジェンダ (1)アーキテクチャ概要 (2)初期設定 (3)データベースの監視 (4)パフォーマンス・チューニング(概論、SQL編、GUC編) (5)バックアップ・リカバリ(概論、PITR、運用) Copyright 2012 Uptime Technologies LLC, All rights reserved. 4
  • 5. (1)アーキテクチャ概要 Copyright 2012 Uptime Technologies LLC, All rights reserved. 5
  • 6. 実行中のプロセス $ ps -aef | grep postgres postgres 22169 1 0 23:37 ? 00:00:00 /usr/pgsql-9.0/bin/postmaster -p 5432 -D /var/lib/pgsql/9.0/data postgres 22179 22169 0 23:37 ? 00:00:00 postgres: logger process postgres 22182 22169 0 23:37 ? 00:00:00 postgres: writer process postgres 22183 22169 0 23:37 ? 00:00:00 postgres: wal writer process postgres 22184 22169 0 23:37 ? 00:00:00 postgres: autovacuum launcher process postgres 22185 22169 0 23:37 ? 00:00:00 postgres: archiver process archiving 00000001000000D60000004E postgres 22187 22169 0 23:37 ? 00:00:00 postgres: stats collector process postgres 23436 22169 16 23:42 ? 00:00:34 postgres: postgres pgbench [local] UPDATE waiting postgres 23437 22169 16 23:42 ? 00:00:34 postgres: postgres pgbench [local] UPDATE waiting postgres 23438 22169 16 23:42 ? 00:00:34 postgres: postgres pgbench [local] COMMIT postgres 24283 22169 5 23:45 ? 00:00:02 postgres: postgres postgres [local] idle postgres 24301 22169 0 23:45 ? 00:00:00 postgres: postgres postgres [local] idle postgres 24581 22169 0 23:45 ? 00:00:00 postgres: autovacuum worker process pgbench postgres 24527 22185 0 23:45 ? 00:00:00 cp pg_xlog/00000001000000D60000004E /var/lib/pgsql/9.0/backups/archlog/00000001000000D60000004E $ Copyright 2012 Uptime Technologies LLC, All rights reserved. 6
  • 7. 実行中のデータベースクラスタ(ディレクトリ) # ls -l total 116 drwx------ 10 postgres postgres 4096 Dec 14 19:00 base drwx------ 2 postgres postgres 4096 Jan 10 00:28 global drwx------ 2 postgres postgres 4096 Dec 13 08:40 pg_clog -rw------- 1 postgres postgres 3768 Dec 14 15:50 pg_hba.conf -rw------- 1 postgres postgres 1636 Dec 4 13:47 pg_ident.conf drwx------ 2 postgres postgres 4096 Jan 10 00:00 pg_log drwx------ 4 postgres postgres 4096 Dec 4 13:47 pg_multixact drwx------ 2 postgres postgres 4096 Jan 8 10:14 pg_notify drwx------ 2 postgres postgres 4096 Jan 10 15:43 pg_stat_tmp drwx------ 2 postgres postgres 4096 Dec 28 14:41 pg_subtrans drwx------ 2 postgres postgres 4096 Dec 4 14:47 pg_tblspc drwx------ 2 postgres postgres 4096 Dec 4 13:47 pg_twophase -rw------- 1 postgres postgres 4 Dec 4 13:47 PG_VERSION drwxr-xr-x 3 postgres postgres 4096 Jan 10 15:40 pg_xlog -rw------- 1 postgres postgres 18015 Dec 14 15:50 postgresql.conf -rw------- 1 postgres postgres 17952 Dec 14 15:05 postgresql.conf.orig -rw------- 1 postgres postgres 71 Jan 8 10:14 postmaster.opts -rw------- 1 postgres postgres 49 Jan 8 10:14 postmaster.pid # Copyright 2012 Uptime Technologies LLC, All rights reserved. 7
  • 8. PostgreSQLの構成要素 PostgreSQLは、さまざまなプロセス・メモリ領域・ファイルによって構 成されている。 writer postgres logger wal writer autovacuum (バックグラウンド (リスナプロセス) (サーバログ) (WALライタ) (自動vacuum) ライタ) プロセス群 archiver stat collector postgres wal sender wal receiver (WALアーカイバ) (統計情報収集) (サーバプロセス) (レプリケーション) (レプリケーション) shared_buffers wal_buffers visibilitymap freespacemap トランザクション メモリ群 (共有バッファ) (WALバッファ) (ブロック情報) (空き領域情報) 制御情報 ファイル群 テーブル インデックス トランザクション アーカイブ 設定ファイル ファイル ファイル ログファイル ログファイル Copyright 2012 Uptime Technologies LLC, All rights reserved. 8
  • 9. PostgreSQLの基本的なアーキテクチャ 共有バッファを中心として、複数のプロセス間で連携しながら処理を 行うマルチプロセス構造。 postgres (リスナプロセス) ( shared_buffers postgres 共 postgres 有 (サーバプロセス) バ postgres (サーバプロセス) クライアント ッ (サーバプロセス) フ ァ ) writer (バックグラウンド ライタ) wal writer (WALライタ) テーブル ファイル トランザクション インデックス ログファイル ファイル Copyright 2012 Uptime Technologies LLC, All rights reserved. 9
  • 10. データファイルの配置 データベースクラスタ(PGDATA)領域 システムカタログ(global) 設定ファイル テーブルファイル テーブルファイル (postgresql.conf, pg_hba.conf) テーブルファイル インデックスファイル インデックスファイル その他制御ファイル等 インデックスファイル デフォルトテーブルスペース(base) トランザクションログ(pg_xlog) ユーザデータベース(OID) ユーザデータベース(OID) ユーザデータベース(OID) テーブルファイル テーブルファイル テーブルファイル インデックスファイル インデックスファイル インデックスファイル 外部テーブルスペース 外部テーブルスペース アーカイブログ領域 テーブルスペース領域 54.1. データベースファイルのレイアウト http://www.postgresql.jp/document/9.0/html/storage-file-layout.html Copyright 2012 Uptime Technologies LLC, All rights reserved. 10
  • 11. (2)初期設定 Copyright 2012 Uptime Technologies LLC, All rights reserved. 11
  • 12. PostgreSQLの設定 • カーネルパラメータ – 共有メモリ、セマフォの設定 – ハードウェアのスペックによっては、デフォルトのままではPostgreSQL起動 時にエラーとなる • postgresql.conf – PostgreSQLパラメータ設定ファイル – initdbコマンドでデータベースクラスタを作成すると生成される • pg_hba.conf – ホストベースアクセス認証(HBA)設定ファイル – 接続元のホスト情報(IP)を使ってアクセス制御を行う Copyright 2012 Uptime Technologies LLC, All rights reserved. 12
  • 13. postgresql.confで設定できる項目 • 共有バッファ • WALバッファ • ワークメモリ(ソートメモリ) • チェックポイント • バックグランドライタ • 自動VACUUM Copyright 2012 Uptime Technologies LLC, All rights reserved. 13
  • 14. 共有バッファ、WALバッファ、ワークメモリ • 共有バッファ – テーブルやインデックスなどのデータファイルをブロック単位でキャッシュしておく共有メ モリ内の領域。 – shared_buffersパラメータで指定。 – 数GB程度から始め、キャッシュのヒット率を見ながら調整を行う。 • WALバッファ – WALレコードをディスクに書き出す前にバッファリングされる共有メモリ内の領域。 – wal_buffersパラメータで指定。 – トランザクションがCOMMITされるとフラッシュされる。 – 同時実行トランザクションが多い場合、または長いトランザクションが多い場合には大 きめに設定(16MB、32MBなど)。 • ワークメモリ(ソートメモリ) – SQLでソート処理を行う際にメモリ内でソートを行える上限値(デフォルトは1MB)。 – work_memパラメータで指定。 – EXPLAIN ANALYZEで「Sort Method: external merge Disk: ????kB」が頻発し、パ フォーマンスが悪化している場合は増加(同時実行数とメモリ使用量に注意)。 第18章 サーバの設定 http://www.postgresql.jp/document/9.0/html/runtime-config.html Copyright 2012 Uptime Technologies LLC, All rights reserved. 14
  • 15. postgresql.conf • 必ず変更すべき項目(パフォーマンス関連) – shared_buffers – checkpoint_segments – checkpoint_timeout – wal_buffers • 必ず変更すべき項目(バックアップ・リカバリ関連) – wal_level – archive_mode – archive_command – archive_timeout • 変更を推奨する項目 – log_line_prefix – log_filename • 確認・変更を推奨する項目 – max_connections 第18章 サーバの設定 – log_min_duration http://www.postgresql.jp/document/9.0/html/runtime-config.html Copyright 2012 Uptime Technologies LLC, All rights reserved. 15
  • 16. pg_hba.conf • 認証を行うための6項目を1エントリ1行として記述する。 • 接続方法 – local, host, hostssl, hostnossl • データベース名 – all, <データベース名> • ユーザ名 – all, +<グループ名>, <ユーザ名> • 接続元IPアドレス – 192.168.0.0/255.255.255.0 など • 認証方法 – trust, md5, password, ident, pam, krb5, ldap, 等 # "local" is for Unix domain socket connections only local all all ident # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident 19.1. pg_hba.confファイル http://www.postgresql.jp/document/9.0/html/auth-pg-hba-conf.html Copyright 2012 Uptime Technologies LLC, All rights reserved. 16
  • 17. (3)データベースの監視 Copyright 2012 Uptime Technologies LLC, All rights reserved. 17
  • 18. なぜ「監視」が重要なのか? • PDCA(Plan-Do-Check-Action)を回すため – データベースがきちんとサービスを提供しているか? – 性能レベルが落ちていないか? • 監視は「Action」につなげるための「Check」 – チューニングを行う – ハードウェアの増強を行う – メンテナンスを行う • 「何のために、何を監視するのか」 – あらかじめ決めておくことが重要 Copyright 2012 Uptime Technologies LLC, All rights reserved. 18
  • 19. OSパフォーマンス監視 • vmstat • iostat • mpstat • sar • ps • free Copyright 2012 Uptime Technologies LLC, All rights reserved. 19
  • 20. データベースの何を監視するのか? • SQLパフォーマンス監視 – セッション数 – キャッシュヒット率 – ディスクI/O • ディスク領域監視 – データ領域(テーブルスペース)、オブジェクトサイズ – トランザクションログ領域 – アーカイブログ領域 • サーバログ監視 – FATALログ、ERRORログ、WARNINGログ、LOGログ • システムリソース監視 – CPU、メモリ、ネットワーク、ディスク、プロセス・・・ Copyright 2012 Uptime Technologies LLC, All rights reserved. 20
  • 21. PostgreSQL内部の監視項目 • オブジェクトサイズ – データベースサイズ • pg_database_size()関数 – テーブルサイズ • pg_relation_size()関数、pg_total_relation_size()関数 • トランザクション量(論理I/O) – コミット数、ロールバック数(データベース単位) – INSERT/UPDATE/DELETE数(テーブル/インデックス単位) • pg_stat_databaseビュー、pg_stat_user_tablesビュー、pg_stat_user_indexesビュー • ディスクI/O量(物理I/O) – ブロック読み込み、キャッシュ読み込み(データベース単位) – ブロック読み込み、キャッシュ読み込み(テーブル/インデックス単位) • pg_statio_user_tablesビュー、pg_statio_user_indexesビュー • セッション情報 – pg_stat_activityビュー • ロック情報 – pg_locksビュー Copyright 2012 Uptime Technologies LLC, All rights reserved. 21
  • 22. 監視結果の可視化 • サンプルWebアプリを数日間実行し、その間のトランザク ション数およびデータベースサイズを計測 データベースサイズとトランザクション数 740 1200 720 トランザクション数(TPM) 1000 700 DBサイズ(MB) 800 680 660 600 640 400 620 200 600 580 0 2006/5/4 2006/5/5 2006/5/6 2006/5/7 ※PostgreSQL 8.1で計測 Copyright 2012 Uptime Technologies LLC, All rights reserved. 22
  • 23. 全体の傾向を可視化する • pg_statinfo/pg_reporterを使って、アクセス統計情報を可視化する。 – データベース統計情報 – ディスク使用状況 – テーブル統計情報 – チェックポイント情報 – Autovacuum実行状況 – SQL文実行状況 – 等・・・ pg_statsinfo: Project Home Page http://pgstatsinfo.projects.postgresql.org/ Copyright 2012 Uptime Technologies LLC, All rights reserved. 23
  • 24. (4)パフォーマンスチューニング(概論) Copyright 2012 Uptime Technologies LLC, All rights reserved. 24
  • 25. パフォーマンスは何で決まるか? • 「単一クエリのレスポンス×クエリの同時実行数」 – 単一クエリのレスポンス • サーバ・クライアント間通信(ネットワーク) • SQLの構文解析、最適化(CPU処理) • ロックの競合(ロック待ち、デッドロックの発生) • テーブル、インデックス、ログへのI/O量(ディスクI/O) • ソート、結合などの演算処理(CPU処理、ディスクI/O) – クエリの同時実行数 • 接続クライアント数(いわゆるWebユーザ数) • コネクションプール接続数 • 全体としてハードウェアのキャパシティの範囲内であるか? – ネットワーク、ディスクI/O、メモリ、CPUなどがボトルネックとなり得る。 – ただし、ボトルネック自体は「結果」であり、「原因」ではない。 – 「なぜ、それがボトルネックになっているのか?」が重要。 • テーブル設計? SQL文? 同時接続数? HW? 設定パラメータ?・・・ Copyright 2012 Uptime Technologies LLC, All rights reserved. 25
  • 26. データベースを構成するハードウェアリソース • 複雑な構造を持つRDBMSでは、ボトルネックはいたるところに発生し得 るため、まずはきちんと切り分けることが重要。 – いきなりパラメータチューニングとかを始めない。 CPUネック? ソート? スキャン? CPU ネットワーク インターフェース メモリ ロック待ち? ネットワーク? プロセス空間 プロセス空間 共有メモリ プロセス空間 スワップ発生? ディスクキャッシュ 読み込み? 書き込み? テーブル/インデックス? トランザクションログ? ディスクソート? ディスク データベースサーバ Copyright 2012 Uptime Technologies LLC, All rights reserved. 26
  • 27. パフォーマンス問題の切り分け • データベースの構成要素ごとに分解していく ファイルシステム パーサ ボトルネック sys 実行負荷 オプティマイザ user CPU 実行回数 エグゼキュータ io wait I/O量 idle ディスク性能 メモリ スワップ ディスク性能 WAL WAL生成量 共有バッファ ディスク データ 読み データサイズ その他 bgwriter 書き デッドロック checkpoint 回数 ロック その他 書き出し量 その他 ネットワーク Copyright 2012 Uptime Technologies LLC, All rights reserved. 27
  • 28. パフォーマンス改善の基本手順 • 全体のパフォーマンスの傾向をつかむ – どのデータベース、テーブルへのアクセスか? HWの利用状況はどうか? – どのメトリックスとどのメトリックスが相関があるか? • 遅いSQL文を特定する or 実行回数の多いSQLを特定する – log_min_durationオプション – pgFouine • 特定のSQLだけが遅い場合・・・ – SQLのクエリプランおよび実行状況を確認する(EXPLAIN) • 遅いSQLが特定されない(偏りがない)場合・・・ – ハードウェアリソースのボトルネックを探す • 対策を実施する – SQL文を書き換える、インデックスを張る、テーブル設計を修正する – アプリケーションを修正する – ハードウェアを増強する – 他・・・ Copyright 2012 Uptime Technologies LLC, All rights reserved. 28
  • 29. (4)パフォーマンスチューニング(SQL編) Copyright 2012 Uptime Technologies LLC, All rights reserved. 29
  • 30. SQLパフォーマンス分析 • pgFouineによる問題SQL文の抽出、ランキング作成 – 総実行時間=レスポンスタイム(実行時間)×実行回数 – 最長レスポンスタイム – 他・・・ pgFouine - a PostgreSQL log analyzer http://pgfouine.projects.postgresql.org/ Copyright 2012 Uptime Technologies LLC, All rights reserved. 30
  • 31. SQLクエリ文字列の生成方法の問題 • アプリケーションコードでSQL文を作成する際、指定する条 件に応じてFROM句やJOINを最適化する必要がある。 • アプリ内で文字列を連結してSQL文を生成しても、必ずしも パフォーマンスのよいSQL文が作成されるとは限らない。 • (例)使われていないテーブルのJOINとソート、等 Copyright 2012 Uptime Technologies LLC, All rights reserved. 31
  • 32. SQLチューニング(例) • 無駄なJOINをなくす – 使っていないテーブル(特に詳細テーブルB)のJOINを排除し、最小 限のリソース(メモリ)で処理を行う。 – 詳細テーブルBだけでも500MB以上あるので、不用意にJOINしてい てはメモリがいくらあっても足りない(上限はwork_memで設定。上 限を超えるとディスクを使う)。 • LIMITを使用して、ソート時のデータ量を抑制する – 可能な限り(集約系以外は基本的に)LIMITを使用する。 – サブクエリでLIMITをかける(最初のJOINをする前にデータ量を抑 制)。 • インデックスを作成、インデックスが効くクエリに書き換える Copyright 2012 Uptime Technologies LLC, All rights reserved. 32
  • 33. SQLチューニング結果(例) • 一部クエリについてはパフォーマンスが改善された。 (以下は、ディスクキャッシュが効いていない状況下で測定) SQLチューニング結果 40 35 30 実行時間(秒) 25 Before 20 Tuned 1 Tuned 2 15 10 5 0 Query 1 Query 2 Query 3 • テーブル設計によってはパフォーマンス向上を実現できない場合もある。 Copyright 2012 Uptime Technologies LLC, All rights reserved. 33
  • 34. SQLチューニングチェックシート • 各テーブルのテーブル定義、インデックス定義、レコード件数は確認でき ていますか? • PostgreSQL のバージョンはいくつですか? postgresql.conf の内容は 確認できますか? • 重いSQL は特定できていますか? • 重いSQL はどのような実行プランになっていますか? • 大きなシーケンシャルスキャン、ソートはありませんか? • 想定していないスキャン、ソートが実行されている場合 • インデックスが使われていない場合 • インデックスが使われている場合 • 「もうダメ!」と思ったときは(でも、できればそうなる前にw) 弊社「オープンソース導入サポートサービス」へご相談ください http://www.uptime.jp/go/oss Copyright 2012 Uptime Technologies LLC, All rights reserved. 34
  • 35. SSDを導入してみると・・ Query Execution Time HDD SSD 16,000 14,000 12,000 Elapsed Time (seconds) 10,000 8,000 6,000 4,000 2,000 0 2 9 6 8 3 4 1 5 7 1 14 20 17 18 21 13 22 16 11 15 10 19 12 2 AD Q Q Q Q Q Q Q Q Q RF RF Q Q Q Q Q Q Q Q Q Q Q Q Q LO DBT-3 Queries OSDL DBT-3によるPostgreSQLの性能評価(SATA HDD&SATA SSD編) http://www.uptime.jp/ja/resources/techdocs/2012/05/pgsql_dbt3_hdd_ssd/ Copyright 2012 Uptime Technologies LLC, All rights reserved. 35
  • 36. (4)パフォーマンスチューニング(GUC編) ※GUC(Grand Unified Configuration) PostgreSQLのパラメータ管理モジュール。postgresql.confで設定・管理する。 Copyright 2012 Uptime Technologies LLC, All rights reserved. 36
  • 37. パラメータチューニング(例) • shared_buffers – checkpoint_segments=3固定 共有バッファサイズとpgbenchスコア (checkpoint_segments=3) 300 290 280 pgbenchスコア(tps) 270 260 250 240 230 220 210 1000 2000 4000 8000 16000 32000 64000 shared_buffers設定値 ※PostgreSQL 8.1で計測 Copyright 2012 Uptime Technologies LLC, All rights reserved. 37
  • 38. パラメータチューニング(例) • checkpoint_segments – shared_buffers=32000固定 checkpoint_segmentsと性能推移 500 450 400 350 pgbenchスコア(tps) 300 250 200 150 100 50 0 1 2 4 8 16 32 64 128 checkpoint_segments設定値 ※PostgreSQL 8.1で計測 Copyright 2012 Uptime Technologies LLC, All rights reserved. 38
  • 39. パラメータチューニング(例) • shared_buffers – checkpoint_segments=32固定 共有バッファサイズとpgbenchスコア (checkpoint_segments=32) 500 450 400 350 pgbenchスコア(tps) 300 250 200 150 100 50 0 1000 2000 4000 8000 16000 32000 64000 shared_buffers設定値 ※PostgreSQL 8.1で計測 Copyright 2012 Uptime Technologies LLC, All rights reserved. 39
  • 40. パラメータチューニング(例) • バックグラウンドライタ(bgwriter)は、dirtyページを少しずつディスクに 書き戻す bgwriter無効 bgwriter有効 使用中バッファ dirtyバッファ 使用中バッファ dirtyバッファ 18000 18000 16000 16000 14000 14000 12000 12000 バッファページ数 バッファページ数 10000 10000 8000 8000 6000 6000 4000 4000 2000 2000 0 0 24:37.1 24:40.9 24:44.9 24:49.3 24:53.8 24:57.9 25:05.0 25:11.4 25:19.0 25:26.6 25:33.4 25:39.3 25:46.7 25:51.6 25:58.3 26:05.2 26:12.3 26:19.7 27:04.7 27:08.4 27:12.6 27:17.0 27:21.5 27:25.4 27:32.4 27:39.7 27:47.8 27:56.4 28:04.4 28:10.7 28:17.6 28:25.0 28:30.4 28:36.5 28:41.6 時刻 時刻 ※PostgreSQL 8.1で計測 F.24. pg_buffercache http://www.postgresql.jp/document/9.0/html/pgbuffercache.html Copyright 2012 Uptime Technologies LLC, All rights reserved. 40
  • 41. パラメータ設定におけるトレードオフ • 共有バッファを大きくすると・・・ – より多くのディスクブロックを共有バッファに保持できるため、パフォーマンス が向上する。 – 大量のdirtyページが発生するため、チェックポイント時の負荷が高くなる。 • チェックポイントの間隔を大きくすると・・・ – チェックポイントの発生数を抑え、パフォーマンスが向上する。 – チェックポイント時の負荷が高くなる。 – クラッシュリカバリに要する時間が長くなる。 • バックグラウンドライタを頻繁に動かす(多く書き出す)と・・・ – チェックポイントにおける負荷は減るが、書き出しのディスクI/Oが頻発する (書き出しの平準化により) 。 – 全体的なパフォーマンスが低下する。(特にディスクが1本の場合) Copyright 2012 Uptime Technologies LLC, All rights reserved. 41
  • 42. (5)バックアップ・リカバリ(概論) Copyright 2012 Uptime Technologies LLC, All rights reserved. 42
  • 43. バックアップとレストア/リカバリ • バックアップの難しさ – データはファイルの中にだけあるのではない – 通常は、共有バッファの内容が最新 – ファイルだけバックアップを取ってもダメ – ミリ秒単位で処理が進む中、すべてを一貫性を保った状態で • バックアップの種類 – コールドバックアップ – ホットバックアップ – PITR(アーカイブログ)バックアップ • バックアップ&レストア/リカバリはリハーサルをしよう! – 簡単な試験や手順書を作るだけで満足してはいけない・・・ Copyright 2012 Uptime Technologies LLC, All rights reserved. 43
  • 44. 興行収入5億ドルの “TOY STORY 2” は一度消えかけた http://www.tested.com/videos/44220-how-pixar-almost-lost-toy-story-2-to-a-bad-backup/ Copyright 2012 Uptime Technologies LLC, All rights reserved. 44
  • 45. コールドバックアップ • サーバプロセスをすべてシャットダウンしてデータファイル全体をバックアップ – バックアップの間、サービス停止が発生する。 – リカバリの際には、バックアップ時のデータに戻る。 – ファイルバックアップなのでレストアが簡単。 • 向いているケース – 前回バックアップ以降の更新データを、アプリログなどから復旧できる場合。 – ストレージスナップショットが一般化した今、案外現実的。 • 向いていないケース – サービスを停止させられない場合。 – 障害発生の直前までの更新データが必要で、DB以外から復旧できない場合。 Crash ①サービス WAL1 WAL2 WAL3 停止 & ②障害発生 ファイル バックアップ ③レストア Index Table Copyright 2012 Uptime Technologies LLC, All rights reserved. 45
  • 46. ホットバックアップ(pg_dump/pg_restore) • あるタイミングでデータの一貫性を保ちつつバックアップ(export) – シンプルかつ柔軟(テーブル単位のバックアップも可) – バックアップ時にサービス停止は起こらない。 – リカバリの際には、バックアップ時のデータに戻る。 • 向いているケース – 前回バックアップ以降の更新データを、アプリログなどから復旧できる場合。 – データベース単位、テーブル単位でバックアップを取りたい場合。 – 論理バックアップが必要な場合(メジャーバージョンアップなど) • 向いていないケース – 障害発生の直前までの更新データが必要で、DB以外から復旧できない場合。 Crash WAL1 WAL2 WAL3 ①pg_dumpで ②障害発生 スナップショットを バックアップ ③レストア Index Table Copyright 2012 Uptime Technologies LLC, All rights reserved. 46
  • 47. (5)バックアップ・リカバリ(PITR) Copyright 2012 Uptime Technologies LLC, All rights reserved. 47
  • 48. アーカイブログとPITRを用いたバックアップ • ベースバックアップ(基準点)+アーカイブログ(更新差分) – サービスを継続したままベースバックアップを取得可能(非一貫性バックアップ) – クラッシュ直前のWALの内容まで復旧することが可能 • 向いているケース – データベースクラスタ全体の完全なバックアップを取りたい場合。 – クラッシュ直前の更新まで復旧させる必要がある場合。 • 向いていないケース – データベース単位、テーブル単位などでバックアップを取得したい場合。 Crash WAL1 WAL2 WAL3 WAL4 ①ベースバック アップの取得 (非一貫性 ②WAL1を ③WAL2を ④WAL3を バックアップ) アーカイブ アーカイブ アーカイブ Index WAL1 WAL2 WAL3 Table レストア&リカバリに必要なファイル類 Copyright 2012 Uptime Technologies LLC, All rights reserved. 48
  • 49. アーカイブログとPITRを用いたリカバリ • ベースバックアップ(基準点)+アーカイブログ(更新差分) – ベースバックアップをレストア後、アーカイブログをロールフォワードリカバリする。 – 前回のベースバックアップ以降、長期間が経過しているとアーカイブログが多くなり、リ カバリの時間が長くなる。 – ベースバックアップレストア時間+アーカイブログ適用時間×アーカイブログ数 ⑥リカバリ完了 WAL1 WAL2 WAL3 WAL4 ①ベース ⑤オンラインWAL バックアップを ②WAL1を ③WAL2を ④WAL3を (WAL4)を適用 レストア 適用 適用 適用 Index WAL1 WAL2 WAL3 Table レストア&リカバリに必要なファイル類 Copyright 2012 Uptime Technologies LLC, All rights reserved. 49
  • 50. アーカイブログ関連パラメータ • wal_level – 生成されるWALレコードの内容を指定する(”minimal”, “archive”, “hot_standby”) – アーカイブログを取得する場合には “archive” を指定 • archive_mode – アーカイブログ取得モードを設定する(”on” or “off”) • archive_command – オンラインWALファイルをアーカイブするOSコマンド(一般的には cp コマンドなど) – 'cp %p /var/lib/pgsql/9.0/backups/archlog/%f‘ • archive_timeout – 使用中のオンラインWALファイルを強制的にアーカイブする秒数を指定 – 更新(WALレコード)が少ない場合などでも、確実にアーカイブしたい場合などに設定 18.5. ログ先行書き込み(WAL) http://www.postgresql.jp/document/9.0/html/runtime-config-wal.html Copyright 2012 Uptime Technologies LLC, All rights reserved. 50
  • 51. ベースバックアップの取得手順と取得対象 • 前提条件 – アーカイブログの設定が有効になっていること • 取得手順 – pg_start_backup()でバックアップ開始 – データベースクラスタ全体のバックアップを取得 – pg_stop_backup()でバックアップ完了 • 取得対象 – データベースクラスタ全体 – テーブルスペース(使用している場合) – XLOGファイル(pg_xlog以下)とpostmaster.pidファイルは除く Copyright 2012 Uptime Technologies LLC, All rights reserved. 51
  • 52. リストア、リカバリ手順 • PostgreSQLサーバを停止する • 障害の発生したデータベースを保存する(可能であれば) – データベースクラスタ – トランザクションログ(残っている場合は必ず保護する) – テーブルスペース • ベースバックアップをレストアする • ベースバックアップ取得以降のアーカイブログをレストアする • 最新のトランザクションログを配置する • リカバリ設定ファイル(recovery.conf)を作成する • PostgreSQLサーバを起動し、リカバリ処理を実行する Copyright 2012 Uptime Technologies LLC, All rights reserved. 52
  • 53. PITRのリカバリ動作状況 [2011-12-12 06:32:52 JST] 31582: LOG: database system was interrupted; last known up at 2011-12-12 06:12:28 JST [2011-12-12 06:32:52 JST] 31582: LOG: restored log file "00000002.history" from archive [2011-12-12 06:32:52 JST] 31582: LOG: starting archive recovery [2011-12-12 06:32:52 JST] 31582: LOG: restored log file "000000010000000000000005" from archive [2011-12-12 06:32:53 JST] 31582: LOG: redo starts at 0/5000070 [2011-12-12 06:32:53 JST] 31582: LOG: consistent recovery state reached at 0/6000000 [2011-12-12 06:32:53 JST] 31582: LOG: restored log file "000000010000000000000006" from archive (...snip...) [2011-12-12 06:33:40 JST] 31582: LOG: restored log file "00000001000000000000000F" from archive [2011-12-12 06:33:47 JST] 31582: LOG: restored log file "000000020000000000000010" from archive (...snip...) [2011-12-12 06:34:49 JST] 31582: LOG: restored log file "00000002000000000000001A" from archive [2011-12-12 06:34:49 JST] 31582: LOG: could not open file "pg_xlog/00000002000000000000001B" (log file 0, segment 27): No such file or directory [2011-12-12 06:34:49 JST] 31582: LOG: redo done at 0/1A00511C [2011-12-12 06:34:49 JST] 31582: LOG: last completed transaction was at log time 2011-12-12 06:23:09.691458+09 [2011-12-12 06:34:49 JST] 31582: LOG: restored log file "00000002000000000000001A" from archive [2011-12-12 06:34:49 JST] 31582: LOG: restored log file "00000003.history" from archive [2011-12-12 06:34:49 JST] 31582: LOG: selected new timeline ID: 4 Copyright 2012 Uptime Technologies LLC, All rights reserved. 53
  • 54. (5)バックアップ・リカバリ(運用) Copyright 2012 Uptime Technologies LLC, All rights reserved. 54
  • 55. バックアップ、リカバリの運用 • 指定したサイクルで定期的にベースバックアップを取得 – ベースバックアップスクリプトをcron等で実行し、ベースバックアップを取得 – 世代ごとにサブディレクトリを作ってベースバックアップを保存 – 指定した世代数を超えたベースバックアップを削除 – もっとも古い世代のベースバックアップ以前のアーカイブログを削除 • 障害が発生した場合は、ベースバックアップおよびアーカイブログからリ カバリ – XLOGバックアップスクリプトを実行し、オンラインWALファイルを保存 – リカバリスクリプトを実行し、最新のベースバックアップ、およびオンライン WALファイルをレストアし、リカバリ設定ファイルを作成 – PostgreSQLサービスを起動し、リカバリを実行 Copyright 2012 Uptime Technologies LLC, All rights reserved. 55
  • 56. ベースバックアップの世代管理 • 指定したバックアップ世代数に合わせて、ベースバックアップとアーカイブログを 管理する – 最新のベースバックアップを取得できたら、もっとも古いベースバックアップを削除 – アーカイブログは、もっとも古いベースバックアップ以前のものを削除 (例)ベースバックアップを3世代分保持する場合 コピー データベース スナップショット クラスタ (一時領域) アーカイブ、圧縮 第0世代 WAL Rotate 第1世代 Rotate アーカイビング 第2世代 第0世代を取得後に削除 第3世代 第2世代以降に生成された アーカイブログ アーカイブログを保持 バックアップ用ストレージ Copyright 2012 Uptime Technologies LLC, All rights reserved. 56
  • 57. リカバリ時の動作 • 最新のWALファイルを保存、最新の世代のベースバックアップからレストアし、リ カバリ実施に必要な設定ファイルを作成する – データベースクラスタに残っている最新のWALを保存(①) – ベースバックアップからレストア(②) – 最新WALを再度配置(③) – リカバリを開始したら、アーカイブログを適用(④) データベース スナップショット ②レストア (一時領域) クラスタ 第0世代 WAL 第1世代 ①最新WAL 保存 第2世代 ④適用 ③最新 最新WAL WAL配置 第2世代以降に生成された アーカイブログ アーカイブログを保持 バックアップ用ストレージ Copyright 2012 Uptime Technologies LLC, All rights reserved. 57
  • 58. Q&A Copyright 2012 Uptime Technologies LLC, All rights reserved. 58
  • 59. さらに詳しくなりたい方は • PostgreSQLアーキテクチャ入門(自習用教材) – 内容:プレゼンテーションを録画した動画、及び使用しているスライド – 動画時間:約55分 – スライドページ数:54ページ – ファイル形式:MP4(動画)およびPDF(スライド) – 価格:1,050円(税込) • OSDL DBT-3によるPostgreSQLの性能評価(SATA HDD&SATA SSD編) – 内容:技術検証レポート – ページ数:54ページ – ファイル形式:PDF – 価格:1,260円(税込) いずれも http://www.uptime.jp から購入できます。 Copyright 2012 Uptime Technologies LLC, All rights reserved. 59
  • 60. 【お問い合わせ先】 アップタイム・テクノロジーズ合同会社 永安 悟史 E-mail: snaga@uptime.jp Web: http://www.uptime.jp/ Copyright 2012 Uptime Technologies LLC, All rights reserved. 60