ユーザ用ツール

サイト用ツール


it技術:データベース:postgresql:運用

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
it技術:データベース:postgresql:運用 [2021/08/02 10:24] – [WALアーカイブからのリカバリ] yajuadminit技術:データベース:postgresql:運用 [2024/04/24 11:07] (現在) – [shared_buffers] yajuadmin
行 27: 行 27:
 ※Windowsシステムでの有効なshared_buffersの範囲は一般的に64MBから512MBです。Windows版は64MBあれば十分のようなのでデフォルトのまま。\\ ※Windowsシステムでの有効なshared_buffersの範囲は一般的に64MBから512MBです。Windows版は64MBあれば十分のようなのでデフォルトのまま。\\
 https://www.postgresql.jp/document/9.6/html/runtime-config-resource.html https://www.postgresql.jp/document/9.6/html/runtime-config-resource.html
 +
 +<wrap em>PostgreSQL 10以降のマニュアル(shared_buffers欄)には、「Windowsシステムでの有効なshared_buffersの範囲は一般的に64MBから512MBです。」の記載が消えている。https://github.com/le0pard/pgtune/discussions/50</wrap>
  
 既定値:128MB 既定値:128MB
行 151: 行 153:
 </code> </code>
  
-  * [[https://blogs.yahoo.co.jp/yukigaku0313/21115869.html|PostgreSQL インストールのトラブルシューティング]]+  * [[https://web.archive.org/web/20180912063813/https://blogs.yahoo.co.jp/yukigaku0313/21115869.html|PostgreSQL インストールのトラブルシューティング]]
   * [[http://software.fujitsu.com/jp/manual/manualfiles/m130025/b1ws1136/01z200/b1136-00-04-03-02.html|4.3 インスタンスの作成 > 4.3.2 initdbコマンドを使用する場合]]   * [[http://software.fujitsu.com/jp/manual/manualfiles/m130025/b1ws1136/01z200/b1136-00-04-03-02.html|4.3 インスタンスの作成 > 4.3.2 initdbコマンドを使用する場合]]
  
行 501: 行 503:
   * Dead Tupleが各テーブルで定められた閾値を超えた場合(autovacuum_vacuum_threshold)   * Dead Tupleが各テーブルで定められた閾値を超えた場合(autovacuum_vacuum_threshold)
  
-統計情報の再計算\\+**統計情報の再計算**\\
 以下の計算式以上のレコードが更新(UPDATE/DELETE)されたテーブルは自動的に実行 以下の計算式以上のレコードが更新(UPDATE/DELETE)されたテーブルは自動的に実行
 +autovacuum_vacuum_thresholdがデフォルト 50で、autovacuum_vacuum_scale_factorがデフォルト 0.1となっている。
 +
 <code> <code>
 autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * レコード数 autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * レコード数
行 509: 行 513:
 AUTOVACUUMデーモン(Windowsサービス)が一定間隔でこれらの状況を監視し、ロック競合が発生しない限り、一定数量のAUTOVACUUM処理が実行される。 AUTOVACUUMデーモン(Windowsサービス)が一定間隔でこれらの状況を監視し、ロック競合が発生しない限り、一定数量のAUTOVACUUM処理が実行される。
  
-パラメータはテーブル単位でも決定可能 \\ 大規模テーブルではテーブル単位に autovacuum_vacuum_scale_factor を 0 に \\ autovacuum_vacuum_threshold を適切な値に変更し、頻繁に VACUUM を実行することを推奨\\ +パラメータはテーブル単位でも決定可能\\ 
-[[https://tihiro.hatenablog.com/entry/2018/07/17/223913|テーブルごとにAUTO_VACUUMおよびAUTO_ANALYZEをする閾値を設定する]]+大規模テーブルではテーブル単位に autovacuum_vacuum_scale_factor を 0 に\\ 
 +autovacuum_vacuum_threshold を適切な値に変更し、頻繁に VACUUM を実行することを推奨\\ 
 +[[https://web.archive.org/web/20190531052308/https://tihiro.hatenablog.com/entry/2018/07/17/223913|テーブルごとにAUTO_VACUUMおよびAUTO_ANALYZEをする閾値を設定する]] 
 + 
 +例えば、10000件廃止行数が超えたら、自動的にVACUUMさせたいって場合 
 + 
 +<code> 
 +ALTER TABLE {table_name} SET (autovacuum_vacuum_threshold = 10000); 
 +ALTER TABLE {table_name} SET (autovacuum_vacuum_scale_factor = 0); 
 +</code> 
 + 
 +<wrap em>巨大なテーブルに対して実行すると、vacuum処理に時間がかかりすぎることによって、表面のアプリケーション側に影響を及ぼすことがあるので、パラメータ変更はせずに非稼働時間に定期的にVACUME ANALIZEを各テーブルに行うようにしたい。</wrap>
  
 ==== VACUUM実行確認 ==== ==== VACUUM実行確認 ====
行 576: 行 591:
 ===== 統計情報 ====== ===== 統計情報 ======
 [[https://www.ospn.jp/osc2014.enterprise/pdf/OSC2014_Enterprise_hp.pdf|PostgreSQL安定運用のための障害予防と検知 - pdf]] [[https://www.ospn.jp/osc2014.enterprise/pdf/OSC2014_Enterprise_hp.pdf|PostgreSQL安定運用のための障害予防と検知 - pdf]]
 +
 +==== ANALYZE =====
 +ANYLYZEは、統計情報を行う。単独で動かせるし「VACUUM ANYLYZE」としてVACUUMと組み合わせることもできる。AUTOVACUUM時にもANYLYZEが行われている。\\
 +対象とするテーブルの読み取りロックのみ(読み込みはできるが書き込みができない状態)であり、そのテーブルに対する他の操作と並行して実行することができます。
 ==== 統計情報の取得 ===== ==== 統計情報の取得 =====
   * SQL文の実行計画作成には統計情報を使用   * SQL文の実行計画作成には統計情報を使用
行 712: 行 731:
 SELECT pg_database_size('db_name'); SELECT pg_database_size('db_name');
 </code> </code>
 +
 +=== テーブル単位のサイズを取得するSQL ===
 +<code sql>
 +SELECT pgn.nspname, relname, pg_size_pretty(relpages::bigint * 8 * 1024) AS size, CASE WHEN relkind = 
 +'t' THEN (SELECT pgd.relname FROM pg_class pgd WHERE pgd.reltoastrelid = pg.oid) WHEN nspname = 
 +'pg_toast' AND relkind = 'i' THEN (SELECT pgt.relname FROM pg_class pgt WHERE SUBSTRING(pgt.relname 
 +FROM 10) = REPLACE(SUBSTRING(pg.relname FROM 10), '_index', '')) ELSE (SELECT pgc.relname FROM 
 +pg_class pgc WHERE pg.reltoastrelid = pgc.oid) END::varchar AS refrelname, CASE WHEN nspname = 
 +'pg_toast' AND relkind = 'i' THEN (SELECT pgts.relname FROM pg_class pgts WHERE pgts.reltoastrelid = 
 +(SELECT pgt.oid FROM pg_class pgt WHERE SUBSTRING(pgt.relname FROM 10) = REPLACE(SUBSTRING(pg.relname 
 +FROM 10), '_index', ''))) END AS relidxrefrelname, relfilenode, relkind, reltuples::bigint, relpages 
 +FROM pg_class pg, pg_namespace pgn WHERE pg.relnamespace = pgn.oid AND pgn.nspname NOT IN 
 +('information_schema', 'pg_catalog') ORDER BY relpages DESC
 +</code>
 +
 +[[https://qiita.com/awakia/items/99c3d114aa16099e825d|PostgreSQLで各テーブルの総サイズと平均サイズを知る]]
  
 === テーブル単位のダンプ === === テーブル単位のダンプ ===
it技術/データベース/postgresql/運用.1627867476.txt.gz · 最終更新: 2021/08/02 10:24 by yajuadmin