sql >> データベース >  >> RDS >> PostgreSQL

Postgres:バキュームコマンドは死んだタプルをクリーンアップしません

    VACUUM (VERBOSE)を使用する それが何をしているのか、そしてその理由の詳細な統計を取得するため。

    死んだタプルを削除できない理由は3つあります。

    1. クローズされていない長期実行トランザクションがあります。あなたは

      で悪い男の子を見つけることができます
      SELECT pid, datname, usename, state, backend_xmin
      FROM pg_stat_activity
      WHERE backend_xmin IS NOT NULL
      ORDER BY age(backend_xmin) DESC;
      

      pg_cancel_backend()を使用してトランザクションを取り除くことができます またはpg_terminate_backend()

    2. コミットされていない準備されたトランザクションがあります。あなたはそれらを見つけることができます

      SELECT gid, prepared, owner, database, transaction
      FROM pg_prepared_xacts
      ORDER BY age(transaction) DESC;
      

      ユーザーCOMMIT PREPARED またはROLLBACK PREPARED それらを閉じるために。

    3. 使用されていないレプリケーションスロットがあります。でそれらを見つける

      SELECT slot_name, slot_type, database, xmin
      FROM pg_replication_slots
      ORDER BY age(xmin) DESC;
      

      pg_drop_replication_slot()を使用します 未使用のレプリケーションスロットを削除します。



    1. ScaleGridDBaaSがCloudExcellenceAwards2018の最終候補になりました

    2. 単語リストのいずれかに対するPostgreSQLワイルドカードLIKE

    3. postgres列Xは存在しません

    4. SQL Serverで「smalldatetime」を「datetimeoffset」に変換します(T-SQLの例)