運用

本サイトでは、DAとDBAの両方の内容を記載しています。

データベースシステムの運用・保守計画

一般的にデータベースのライフサイクルは以下になります。

ライフサイクル

通常の運用としては、以下が考えられます。

監視・バックアップ

運用が開始すると、プログラムやハードウェアの障害発生やデータの増加に伴う性能劣化(遅延)などが発生し、そのインシデント管理が必要になります。
インシデントは、基本的に5W1Hで記載して、発生時の調査が円滑に進みます。
監視には、Zabbix(PostgreSQLのモジュールであるpg_monz使用)などの監視アプリケーションを利用することで、死活監視、ログ監視、リソース監視、データベース監視、性能監視などが行えます。
監視については、本サイトでは記載していません。

PostgreSQLでは障害発生や性能劣化を確認するのに必要なモジュールがあり、それらを有効活用するのも一つの手です。
PostgreSQLの「auto_explain」モジュールは、手動でEXPLAINを実行する必要がなく、自動的に遅いクエリの実行計画をログに記録してくれます。
「pgbench」モジュールではベンチマークテストを実施でき、「pgstattuple」モジュールは、タプルレベルの統計情報を取得するための各種関数を提供します。

メンテナンス・バージョンアップ

メンテナンスやバージョンアップの際には、利用者への通知が必要になるケースもあり、作業時間の見積もりが必要です。
企業では、運用体制、連絡先、RTO(目標復旧時間)なども考慮する必要があります。
後述しますがステージング環境があれば、メンテナンスやバージョンアップを十分に確認することができ、作業時間の見積もりや手順書を作成するのにも役立ちます。
ただ、ステージング環境でテストしていても、本番で実行する場合には十分に注意が必要です。
本番環境はアクセスがあったり、サーバのスペックが多少異なったりするなど、ステージング環境とは多少環境が異なることを想定する必要があります。

データベースシステムの運用・保守

実際に運用・保守を行う際に運用管理マニュアルを用意しておけば、マニュアル通りに作業が行えます。
OSやミドルウェアのバージョンアップが必要になり、それを実施する場合には、事前にリリースノートを確認する必要があります。
定期的にリリースノートを参照し、バグ修正、性能改善、機能追加などの内容を確認することが重要です。
特にバグについては、ゼロデイ攻撃の対象となり、バージョンアップ前に攻撃される恐れもあるため、即時に対応する必要がでてきます。
性能劣化や遅延などの問題が発生した場合は、スロークエリなどのログを追加したり、リソースやログを参照して改善を図ります。
バージョンアップの修正内容からテストするスコープを決める必要がありますので、仕様書やマニュアルなどドキュメントの整備が大切です。

PostgreSQLの障害対応

遅いなどのインシデントでチューニングで改善できればいいのですが、改善できない場合もあります。
ケーススタディとして改善した内容を次に記載します。

データベースシステムの監査

PostgreSQLの運用を実施していると、システムの監査が必要になる場合があります。
PostgreSQLで監査ログに対応する場合、「postgresql.conf」の「log_statement」を設定することである程度対応できます。
いつ、誰が、何を、どんな処理をしたかは運用時のインシデント管理でも役立つため、必要な内容を検討して適切に設定することをお勧めします。

ログは大量に出力すると、データ容量の増加や性能劣化の原因になるため、適切に設定する必要があります。
PostgreSQLでは、拡張モジュールとしてオープンソースソフトウェアの「pgaudit」がありますので、標準機能で不足している場合は検討してみると良いでしょう。

利用者サポート

データベース管理者(DBA)として利用者サポートを提供する際には、利用者がデータベースシステムを効果的に利用できるように支援し、問題が発生した場合には迅速に対応することが求められます。
利用者サポートは前述している通り、クエリの最適化支援やデータ復旧の支援はもちろん以下が必要です。

  1. 利用者教育とトレーニング
  2. 技術サポートの提供
  3. パフォーマンスの監視とチューニング
  4. データの保護とセキュリティ
  5. インシデント管理
  6. アップデートとメンテナンス
  7. 利用者フィードバックの収集と対応

データベースシステムのテストと移行

一般的に、テスト環境はステージング環境と呼ばれ、本番環境はプロダクション環境と呼ばれます。
実際の工程としては、まずステージング環境でテストを行い、その後本番環境で実行します。
テストでは、性能、セキュリティ、インテグリティ、バックアップ、およびリカバリについて確認します。

運用管理マニュアルを作成し、その手順に沿って実施する必要があります。
運用を続けていく中で、OSのバージョンアップ、DBMSのバージョンアップ、データ量の増加などにより、環境で動作しなくなることもあるため、事前にステージング環境で確認し、本番環境に移行することが重要です。