AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 319437
Accepted
padjee
padjee
Asked: 2022-11-10 22:20:51 +0800 CST2022-11-10 22:20:51 +0800 CST 2022-11-10 22:20:51 +0800 CST

WAL 因某种原因增加

  • 772

这对我来说是新的。我一直在网上搜索但没有结果。

我有一台服务器Server A已经运行了几周,它是一台新服务器。我为此服务器设置了 FDW,以访问public来自 2 个数据库(db B1 和 db B2)的模式中的所有表,我们称它为Server B。所有表都“存储”在服务器 A 上 3 个不同数据库(db A1、A2、A3)上的特定模式中。这个服务器和服务器C之间也有streaming replication

这是我做的 FDW 的总结:

  • 设置服务器 B:添加条目pg_hba以接受所有连接create user fdwuser,重新加载配置文件

  • 设置服务器 A:

  1. 在db A1、A2、A3上创建这些模式以保存来自服务器 B的数据:

     CREATE SCHEMA reference;
     CREATE SCHEMA profile;
     GRANT USAGE ON SCHEMA profile TO jhon, bon;
     GRANT USAGE ON SCHEMA reference TO jhon, bon;
    
  2. 为 db A1、A2、A3 上的每个数据库创建 FDW 扩展:

    CREATE EXTENSION IF NOT EXISTS postgres_fdw;
    
  3. 创建外国服务器:

    CREATE SERVER foreign_profile 
      FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '10.10.8.40', port '5432', dbname 'db_profile'); ` 
    
    CREATE SERVER foreign_referensi 
      FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host     '10.10.8.40', port '5432', dbname 'db_reference');` 
    
  4. 创建用户映射:

    CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password        
    'secret');  
    CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user fdwuser, password 
    'secret'); 
    CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password        
    'secret');  
    CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user fdwuser, password 
    'secret');  
    CREATE USER MAPPING FOR jhon SERVER foreign_reference OPTIONS (user fdwuser, password 
    'secret');  
    CREATE USER MAPPING FOR bon SERVER foreign_profile OPTIONS (user referensi, password 
    'secret'); 
    
  5. 将外部模式导入数据库 A1、A2、A3:

    IMPORT FOREIGN SCHEMA public FROM SERVER foreign_profile INTO profile;  
    IMPORT FOREIGN SCHEMA public FROM SERVER foreign_referencd INTO reference; 
    

整个过程是成功的。我可以从 Server A 访问 Server B 上的外部表。很好,没问题。

现在,我使用SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';. 它显示了大约 2100 多个文件。这令人担忧。

这是服务器A上的设置:

archive_command cd .
archive_mode    on
checkpoint_completion_target    0.9
checkpoint_flush_after  32
checkpoint_timeout  300
wal_level   replica
wal_keep_segments   8
max_wal_senders 10
max_wal_size    8192
hot_standby on

然后我做一些检查:

  1. select * from pg_catalog.pg_stat_activity

    共有 250 个条目,以backend_type=parallel worker或client backend

  2. select * from pg_catalog.pg_stat_archiver

    Failed_count = 0;
    Archived_count = 71; 
    
  3. 几分钟后,我又跑select * from pg_catalog.pg_stat_archiver了。它现在说:

    Failed_count = 0;
    Archived_count = 3; -- it seems to be reset for some reasons
    
  4. 检查复制: select * from pg_catalog.pg_stat_replication。结果 :

    state = streaming

    sync_state = async

我认为这台服务器似乎很忙。

问题:

  1. 为什么 WAL 不断增加?这是正常的吗?如果不是,我应该减少它们吗?
  2. 为什么是archived_count复位?
  3. 这个命令是做什么的archive_command cd .:
postgresql
  • 1 1 个回答
  • 34 Views

1 个回答

  • Voted
  1. Best Answer
    jjanes
    2022-11-11T07:29:39+08:002022-11-11T07:29:39+08:00

    导入外部模式需要生成 WAL,因为它需要将这些表的描述输入到系统目录中。但它不应该产生大量的 WAL,除非那些外部模式有大量的表(重要的是表和列的数量,而不是表中的行数。因为只记录了表的描述,而不是内容)。

    所以很可能,FDW 与此无关。是其他东西生成了 WAL,还有其他东西(可能是复制槽)导致 WAL 被保留。

    您可以pg_waldump在保留的 WAL 上运行以尝试找出造成这么多问题的原因。这不容易解释,所以最好先想想你的系统在做什么而不是 FDW 来首先提出理论。

    • 1

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve