テーブルの統計が古く、それが要求されますされているときは常にpgAdminで、で:Postgresテーブルの統計情報が最新のものであるかどうかを知るにはどうすればよいですか?
をVACUUMを実行
を推奨テーブルにschema.tableの推定行数は、実際の行数から大幅に を逸脱します。このテーブルでVACUUM ANALYZE を実行する必要があります。
私は、autovacuum = offのpgAdmin 3とPostgres 8.4.4を使ってテストしました。変更された表をクリックすると、すぐにプロンプトが表示されます。
WebベースのシステムをJavaで作っているとしましょう。pgAdminのようなプロンプトを表示できるように、テーブルが古いかどうかを検出するにはどうしたらいいですか?そのため、私のアプリケーションの性質の
、ここで私は従わなければならないいくつかのルールは以下のとおりです。
は私がでpg_statsとpg_statisticの特定のテーブルの統計情報が最新であるかどうかを知りたいです。
私はautovacuumフラグをpostgresql.confに設定できません。 (つまり、自動バキュームフラグはオンまたはオフにすることができます。私はそれを制御できません。自動バキュームフラグがオンであるかオフであるかによって統計情報が最新であるかどうかを知る必要があります)。
Iそれを最新のものにするために毎回真空分析/分析を実行することはできません。
ユーザーがテーブルを選択したとき、pg_statsおよびpg_statisticに反映されていないこのテーブルの更新(drop、insert、およびupdateなど)があるときに、テーブルが古くなっていることを示すプロンプトを表示する必要があります。
pg_catalog.pg_stat_all_tablesのタイムスタンプを分析することは現実的ではないようです。もちろん、以前にテーブルが解析されていない場合、last_analyzeにタイムスタンプがあるかどうかを調べて、テーブルが最新であるかどうかを調べることができます。ただし、このメソッドを使用すると、タイムスタンプがすでにある場合にテーブルが最新であるかどうかを検出できません。言い換えれば、テーブルに何行追加しても、pg_stat_all_tablesのlast_analyzeタイムスタンプは常に最初の解析用です(autovacuumフラグがオフであると仮定します)。したがって、初めて「Running VACUUM recommended」プロンプトが表示されるだけです。
last_analyzeタイムスタンプと現在のタイムスタンプを比較することによっても実現できません。数日間、テーブルの更新がない可能性があります。そして、1時間で更新のトンがあるかもしれません。
この場合、テーブルの統計情報が最新のものであるかどうかを常に知るにはどうすればよいですか?
こんにちはアーロンは、答えてくれてありがとう。しかし、アプリケーションの性質上、postgresql.confにautovacuumフラグを設定することはできません。 autovacuumフラグはオンまたはオフにすることができます。私はそれを支配していない。 – Beibei
DBAと連絡を取り合えますか?ホストされたアプリケーションであっても、オートバックスデーモンが動作している必要があります。特にPostgresは非常に細分化されています。 – atrain