何百もの関数を持つレガシーPostgreSQL
データベーススキーマがあります。一部は使用されなくなったので、削除したいと思います。
時々実行されるプロシージャと実行されないプロシージャを見つける最も簡単な方法は何ですか? PostgreSQLでのプロシージャの使用に関する統計はありますか?
使用しているエンジンのバージョンはPostgreSQL 9.5です。
はい、統計コレクターを使用します。 マニュアル:
PostgreSQLのstatistics collectorは、サーバーアクティビティに関する情報の収集とレポートをサポートするサブシステムです。 [...] ユーザー定義関数の呼び出しと各関数で費やされた合計時間もカウントできます。
[...]
パラメータ
track_functions
は、ユーザー定義関数の使用状況の追跡を有効にします。
大胆な強調鉱山。
track_functions (enum)
関数呼び出し回数と使用時間の追跡を有効にします。
pl
を指定して手続き型言語関数のみを追跡し、all
を指定してSQLおよびC言語関数も追跡します。デフォルトはnone
で、関数統計の追跡を無効にします。この設定を変更できるのはスーパーユーザーだけです。注:この設定に関係なく、呼び出し元のクエリに "インライン化"できるほど単純なSQL言語関数は追跡されません。
したがって、これはデフォルトでオフになっています。関連するすべての関数がLANGUAGE plpgsql
である場合、postgresql.conf
およびreloadでpl
に設定するだけで十分です。この設定のためにサーバーを再起動する必要はありません。
track_functions = pl
pg_ctl reload
で再読み込みします。または、典型的なDebian(関連)インストールの場合:
Sudo -u postgres pg_ctlcluster 12 main reload
Postgresは情報の収集を開始します。適切な期間の後、実績を確認してください。ただし、いくつかの重要な機能が数週間呼び出されない場合があります。あなたの電話...
収集した統計にアクセスする方法は? 再びマニュアル:
統計収集が有効な場合、生成されるデータには、システムビューの
pg_stat
およびpg_statio
ファミリーを介してアクセスできます。詳細については、 第27章 を参照してください。
基本的に:
SELECT * FROM pg_stat_user_functions;
または、pgAdmin(または別のGUI)で簡単に検索できます。 pgAdmin(3または4)で関数を選択し、 "Statistics"タブの右上を見てください: "Number of Calls"。
余談:
Postgres 11より前の「ストアドプロシージャ」はなく、機能するだけです。 「手順」という用語はしばしば同義語として使用されます。