- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我们在一台 16GB RAM 的机器上有一个 32GB 的生产数据库。由于缓存,这通常根本不是问题。但是每当我启动数据库的 pg_dump 时,来自应用服务器的查询就会开始排队,几分钟后队列就会消失,我们的应用就会停止运行。
我将是第一个承认我们存在查询性能问题的人,我们正在解决这些问题。同时,我希望能够每晚运行 pg_dump,以一种从数据库中获取数据并且不会关闭我们的应用程序的方式。我不在乎是否需要几个小时。我们的应用程序不运行任何 DDL,所以我不担心锁争用。
为了解决这个问题,我同时使用 nice 和 ionice 运行 pg_dump。不幸的是,这并没有解决问题。
nice ionice -c2 -n7 pg_dump -Fc production_db -f production_db.sql
即使使用 ionice,我仍然会看到上面的问题。问题似乎是 i/o 等待和大量查找导致的。
vmstat 1
显示 iowait 徘徊在 20-25% 左右,有时会飙升至 40%。实际 CPU 百分比在 2-5% 之间波动,有时会飙升至 70%。
我不认为锁是罪魁祸首。当我运行此查询时:
select pg_class.relname,pg_locks.* from pg_class,pg_locks where pg_class.relfilenode=pg_locks.relation;
我只看到标记为 granted = 't' 的锁。我们通常不会在生产环境中运行任何 DDL——因此锁似乎不是问题所在。
这是启用了 WCHAN 列的 ps 的输出:
PID WIDE S TTY TIME COMMAND
3901 sync_page D ? 00:00:50 postgres: [local] COPY
3916 - S ? 00:00:01 postgres: SELECT
3918 sync_page D ? 00:00:07 postgres: INSERT
3919 semtimedop S ? 00:00:04 postgres: SELECT
3922 - S ? 00:00:01 postgres: SELECT
3923 - S ? 00:00:01 postgres: SELECT
3924 - S ? 00:00:00 postgres: SELECT
3927 - S ? 00:00:06 postgres: SELECT
3928 - S ? 00:00:06 postgres: SELECT
3929 - S ? 00:00:00 postgres: SELECT
3930 - S ? 00:00:00 postgres: SELECT
3931 - S ? 00:00:00 postgres: SELECT
3933 - S ? 00:00:00 postgres: SELECT
3934 - S ? 00:00:02 postgres: SELECT
3935 semtimedop S ? 00:00:13 postgres: UPDATE waiting
3936 - R ? 00:00:12 postgres: SELECT
3937 - S ? 00:00:01 postgres: SELECT
3938 sync_page D ? 00:00:07 postgres: SELECT
3940 - S ? 00:00:07 postgres: SELECT
3943 semtimedop S ? 00:00:04 postgres: UPDATE waiting
3944 - S ? 00:00:05 postgres: SELECT
3948 sync_page D ? 00:00:05 postgres: SELECT
3950 sync_page D ? 00:00:03 postgres: SELECT
3952 sync_page D ? 00:00:15 postgres: SELECT
3964 log_wait_commit D ? 00:00:04 postgres: COMMIT
3965 - S ? 00:00:03 postgres: SELECT
3966 - S ? 00:00:02 postgres: SELECT
3967 sync_page D ? 00:00:01 postgres: SELECT
3970 - S ? 00:00:00 postgres: SELECT
3971 - S ? 00:00:01 postgres: SELECT
3974 sync_page D ? 00:00:00 postgres: SELECT
3975 - S ? 00:00:00 postgres: UPDATE
3977 - S ? 00:00:00 postgres: INSERT
3978 semtimedop S ? 00:00:00 postgres: UPDATE waiting
3981 semtimedop S ? 00:00:01 postgres: SELECT
3982 - S ? 00:00:00 postgres: SELECT
3983 semtimedop S ? 00:00:02 postgres: UPDATE waiting
3984 - S ? 00:00:04 postgres: SELECT
3986 sync_buffer D ? 00:00:00 postgres: SELECT
3988 - R ? 00:00:01 postgres: SELECT
3989 - S ? 00:00:00 postgres: SELECT
3990 - R ? 00:00:00 postgres: SELECT
3992 - R ? 00:00:01 postgres: SELECT
3993 sync_page D ? 00:00:01 postgres: SELECT
3994 sync_page D ? 00:00:00 postgres: SELECT
最佳答案
psql -c 'pg_start_backup()' rsync --checksum --archive /var/lib/pgsql /backups/pgsql psql -c 'pg_stop_backup()'但请注意,您还需要 continuous archiving为此进行设置,备份期间创建的所有 WAL 文件都存储在数据文件备份中。
关于sql - 在 postgres 的 pg_dump 中节流 i/o?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3866357/
当我在 railsApp 容器中运行命令 psql --version 时,我得到 9.4.12 并且当我在其中运行相同的命令时postgres 容器,我得到 9.6.2。如何获得匹配的版本? 当我尝
我刚刚安装了 PostgreSQL 8.4,然后安装了 PostgreSQL 9.0。我正在使用 PostgreSQL 9.0 服务,但无法运行 pg_dump。 我得到错误: pg_dump: se
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在运行 pg_dump 并添加五个 -T 标志以排除一组表。在生成的文件中,所有表都被排除在外,但仅排除了指定的 FIRST 表中的序列。 我仍然看到 SELECT pg_catalog.setv
我正在尝试使用 pg_dump 备份一个实时的 postgres 数据库,但是当我尝试这样做时它会导致事情崩溃。 我有许多实时查询积极地从实体化 View (它是一个缓存)读取,它积极地刷新(每分钟或
我在不同的服务器上有两个 postgres 数据库。两者都有一个“公共(public)模式”,里面有相同的表。其中之一用于开发,我正在一些表中创建新列的新表。我如何 pg_dump 正在开发的数据库结
多年来,我们一直使用此命令从名为“apflora”的数据库中转储数据: pg_dump --file=/shared/$FILENAME -Fc -Z9 -o apflora 而且一直有效。我们在 u
我正在寻找一种通过 LAN 在工作站上安装的驱动器上备份数据库的方法。基本上是工作站或服务器上的 Bash 脚本,用于将单个数据库转储到该卷上的路径中。该卷未正常安装,因此在给定用户名/密码和已安装的
我使用以下命令创建了一个 pg_dump - pg_dump -U postgres -d db -n public \ --exclude-table-data 'exclude_table_
我正在编写一个 cron 作业来使用 pg_dump 备份数据库。我正在寻找一种重定向错误消息的方法,以便我可以在流程结束时通过电子邮件发送备份日志文件。这可能吗?我在 pg_dump 文档中看不到任
pg_dump compress 选项具有以下 description : Specify the compression level to use. Zero means no compressio
我正在尝试在我的本地机器上使用 pg_dump 工具。但是,当我在终端窗口中键入 pg_dump database_name 时,我收到的消息是: pg_dump: [archiver (db)] c
我在一个数据库上运行了 pg_dump,并使用 pg_restore 恢复到一个新的、完全空的数据库中,我得到一个错误: pg_restore: [archiver (db)] could not e
为什么 postgresql pg_dump 不允许 sudo 产生权限被拒绝错误?即使是 root 用户也无法 pg_dump? 最佳答案 使用 pg_dump -U postgres [other
我正在尝试使用 pg_Dump 备份数据库产品。 数据库的总大小为 1.6 GB。数据库中的一个表是 product_image,它的大小为 1gb。 当我在数据库上运行 pg_dump 时,数据库备
如果我运行 pg_dump 将表转储到 SQL 文件中,它是否会为表中的最后一行拍摄快照,并将所有行转储到该行? 或者它是否继续转储所有行,甚至那些在运行 pg_dump 之后插入的行? 第二个问题是
我有一个 13GB 大小的数据库。当我用这个命令备份它时: pg_dump -f out.sql --format=p -b -o -O -x -U postgres mydb 文件 out.sql
我正在尝试从 PostgreSQL 数据库创建备份,但出现以下错误:pg_dump:找不到匹配的模式 我以root身份登录并运行命令 pg_dump -f db.dump --format=plain
有没有办法执行 pg_dump 并排除表/ View 和列的 COMMENT ON? 我广泛使用 COMMENT ON 命令来描述所有对象,并且经常在其中包含换行符以进行更清晰的描述,例如: COMM
尝试使用 pg_dump 备份 postgres 数据库 我通过命令提示符连接,这是我按照本教程执行的命令 http://www.postgresqltutorial.com/postgresql-b
我是一名优秀的程序员,十分优秀!