サードパーティーソフトウェア

Slony-I (トリガーによる行単位レプリケーションツール)

 

1. Slony-I とは

Slony-I は古くからある PostgreSQL 専用のレプリケーションツールです。テーブル単位でデータ同期を取ることができます。

PostgreSQL 7.xや8.xの時代によく使われていましたが、PostgreSQL 9.0 でストリーミングレプリケーション機能が本体に標準付属するようになって、主役の座を譲り渡しました。さらに PostgreSQL 9.4 からロジカルデコーディングという行単位の更新内容を継続的に吐き出すことができる基盤機能が追加され、ロジカルデコーディング機能を活用した新たなレプリケーションツール(例えば pglogical)が登場しています。

しかしながら、Slony-I は現在でも、次のような場合に用途があります。

続きを読む

PostGIS(地理情報システムを実現するための拡張モジュール)

1 PostGIS とは

PostGIS は、地理情報システム(Geographic Information Systems 、GIS)を実現するための PostgreSQL の拡張モジュールです。PostgreSQL 本体と独立にオープンソースソフトウェアとして開発されています。

PostGIS により、専用のデータ型が追加され、GIS オブジェクト、すなわち緯度経度による位置を持った地点や経路線、領域などの要素を格納することができます。また、GIS オブジェクトを操作する多数の関数が追加されます。SQL からテーブルに登録した GIS オブジェクトのデータ演算をしたり、検索条件に使うことができます。さらに、GiST インデックスを使った空間検索や近傍点検索が可能です。

続きを読む

pg_repack (オンラインテーブル再編成ツール)

pg_repack は PostgreSQL のテーブルをオンラインで再編成できるツールです。本記事では pg_repackについて紹介します。

良く知られている通り、PostgreSQL は追記型アーキテクチャを採用しています。UPDATE や DELETE をしても旧データを格納した行はしばらく物理ファイル上に残り、これを VACUUM コマンドや自動 VACUUM で整理して、その領域を再利用可能にする仕組みとなっています。何らかの理由でこれらの手動・自動の VACUUM 処理が実行されなかった場合には、データ格納に使われない不要領域が増加し、性能劣化の原因となります。そのような場合には、CLUSTER コマンドや VACUUM FULL コマンドを使って、テーブルの再編成をするのですが、これらのコマンドは強いロックを取得するため、サービス中の適用が難しいという課題がありました。

pg_repack は CLUSTER または VACUUM FULL と同様に不要領域の削除や行の並び替えることができますが、処理中に強いロックをごく短時間しか取得しないため、サービス中にも実施が可能となります。

続きを読む

pgBadger (PostgreSQL のログ解析ツール)

pgBadger とは

最終更新:2021/6/11

pgBadger 概念図

pgBadger は PostgreSQL のログファイルを解析して、SQL の実行やサーバの動作に関するレポートを作成するツールです(図1)。多数の視点から解析された統計レポートは普段のデータベース動作の把握のみならず、パフォーマンス改善のヒントとして役立てることができます。

続きを読む

pg_dbms_stats (PostgreSQL の統計情報管理ツール)

更新日:2024年12月27日

pg_dbms_stats とは

pg_dbms_stats は ANALYZE が収集する統計情報を管理するためのツールです。

PostgreSQL の SQL 実行は、ANALYZE コマンドによって収集される統計情報をもとに、コスト計算を行い、最も早く実行できると予想される実行プランが選択されます。
もし、統計情報の精度が不十分な状態で SQL を実行すると、効率の悪い実行プランが選択され、性能低下の要因となります。

統計情報を常に最新にしておくことで、PostgreSQL のプランナは常に最適なプランを選択し実行することが可能ですが、プランナの不具合など、なんらかの原因によっては、最適なプランが選択されないケースがあります。

そのような事態に陥った場合、PostgreSQL 本体の機能だけでは対処が難しいため、pg_dbms_statspg_hint_plan を使って、想定するプランが選択されない理由を調査したり、一時的に実行プランを固定することができます。

今回は、使用する統計情報の管理が可能な pg_dbms_stats について紹介します。

続きを読む