问题标签 [wal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
335 浏览

sqlite - Sqlite WALmode 不支持内存模式?

我使用内存模式创建我的 sqlite DB 连接:

连接 = DriverManager.getConnection("jdbc:sqlite:file:" + dbName + "? mode=memory&cache=shared ")

然后通过执行使用 WAL 模式:“ pragma journal_mode=WAL

我发现插入/删除操作时内存大小一直在增长。即使我调用 wal_checkpoint(TRUNCATE),它也无法释放。

0 投票
1 回答
207 浏览

json - 使用 JQ 优化 JSON 非规范化 - 1:N 的“笛卡尔积”

我有一个 JSON 数据库更改日志,输出为wal2json. 它看起来像这样:

每个顶级条目 ( xid) 都是一个事务,其中的每个项目change都是一个变化。一行可能会更改多次。

要导入功能集有限的 OLAP 系统,我需要明确说明顺序。所以我需要为sn事务中的每个更改添加一个。
此外,每个更改都必须是顶级条目 - OLAP 不能在一个条目中迭代子项。

(原因是OLAP在导入过程中转换数据的能力有限,也没有顺序作为参数。)

所以,我这样做使用jq

问题是性能。我jq每个条目都打了几次电话。这是相当慢的,比没有转换慢大约 1000 倍。

如何仅使用一次传递执行上述转换?(jq不是必须的,也可以使用其他工具,但应该在 CentOS 软件包中。我想避免为此编写额外的工具。

看来man jq它可以一次性处理整个文件(每行的 JSON 条目)。我可以在 XSLT 中做到这一点,但我无法理解jqchange尤其是数组的迭代和组合columnnamescolumnvalues映射。

  • 对于迭代,我认为map还是map_values可以使用的。
  • 对于要映射的 2 个数组,我看到了from_entriesandwith_entries函数,但无法让它工作。

jq有哪位高手指点一下吗?

0 投票
1 回答
92 浏览

postgresql - 在 PostgreSQL 上重新启用表日志记录

我们最近有一个 PostgreSQL 数据库,其中一些表关闭了 WAL。

如果我要再次启用日志记录。

这是否使它好像总是打开日志记录,还是我只会从我重新打开它的点开始记录?

0 投票
1 回答
1269 浏览

postgresql - PostgreSQL 复制 - 使用 pg_recvlogical 和 wal2json 读取后如何更新 LSN?(没有超级用户)

我正在尝试为我们的 PostgreSQL 9.5 数据库实现定期增量更改转储。

我选择了 WAL、wal2json插件和pg_recvlogical. 一切都以某种方式工作,除了一件事:

当所有数据都被读取时,pg_recvlogical就会安静下来。没有办法让它在一段时间后不做任何改变就退出,对吧?所以我用kill -2(SIGINT)终止它,这给了我

当我想要下一批更改时,复制槽从与以前相同的位置开始,即再次发送条目。

我如何告诉 PostgreSQL 对于某些插槽,我想将复制位置设置为客户端的当前位置?

有两个功能似乎可以做到这一点,

  • SELECT * FROM pg_replication_origin_advance(node_name text, pos pg_lsn)
  • SELECT * FROM pg_replication_origin_progress(node_name text, flush bool)

但是,我不确定将什么作为参数传递。说明书没说。什么是 node_name?而对于这个职位,wal2json给我的只是xid

更新:我可以使用pg_replication_origin_advance("sas2json", "28/160E2250"),请参阅我的答案。但是,当我尝试时:

错误:只有超级用户可以查询或操作复制源

这是在 Amazon RDS 中。而且我不能拥有 SUPERUSER - 这是 AWS 政策。

还有其他方法可以设置 LSN 位置吗?

0 投票
1 回答
200 浏览

postgresql - PostgreSQL 保留任何复制槽都不需要的 WAL 段

我已经wal_keep_segments设置为3000. 但是目录pg_xlog包含超过 6000 个 WAL 段。有趣的是,在 8 月 14 日之后有大约 3000 个文件,所以我猜 8 月 14 日之前的文件不应该存在。这些文件也有一个可执行位集。

```

此集群没有复制槽,archive_mode已启用但archive_command设置为/bin/true. 我认为新的 WAL 段已被回收,总量约为 6000,但 postgres 出于某种原因不会删除旧文件。有任何想法吗?

0 投票
1 回答
1160 浏览

android - 如何在 android 中为 SQLite 启用 Write-Ahead Log(WAL) 日志模式?

我想为 journal_mode 启用 WAL 模式。我正在使用CIPHER 包的SqliteDatabase类。它没有方法。相反,我尝试通过事务启用该模式。enableWriteAheadLogging()

但是有一个例外,"Caused by: net.sqlcipher.database.SQLiteException: cannot change into wal mode from within a transaction: PRAGMA journal_mode = WAL".我没有解决它的变体。请帮帮我!

0 投票
1 回答
2034 浏览

postgresql - 没有数据更改时,AWS RDS Postgresql 事务日志继续运行?

你可以看到这些问题

  1. https://www.reddit.com/r/aws/comments/7snob5/postgresql_transaction_logs_fill_up_storage_till/

  2. https://dba.stackexchange.com/questions/173267/aws-rds-postgres-logical-replication?rq=1

我的问题可能有点不同。当数据发生变化时,我使用https://github.com/jiamo/python-psql-replication进行从 postgres 到 es 的复制。当有数据更改时,事务日志很好。但是,当不再有数据更改时,事务日志将继续如下所示:

在此处输入图像描述

09/23 - 09/25 是周末(所以数据不再变化,事务日志继续运行)

我有一些技巧,想通过更新 crontab 中的一些数据来解决这个问题。但是当数据发生变化时,事务日志似乎不会立即下降(这需要更多时间来验证此方法)

我现在的问题是:任何人都可以解释这种现象并提供更好的解决方法吗?

添加更多关于诀窍的信息。

两小时后:

当没有插入/更新/删除活动时。pg_current_wal_lsn 仍在不断增加。

pg 插槽是这样的

confirmed_flush_lsn太小了pg_current_wal_lsn

诀窍(这里是日志),我使用 crontab 更新了一个简单的行,但之后数据不再更改。而confirmed_flush_lsn 保持在 CD/140235B8

我想要做的是增加confirmed_flush_lsn没有其他数据更改的时间(通过更新一行的状态列)。但似乎它增加了价值但不让RDS删除一些事务日志。

- - - - 更新 - - - - - -

我改变了改变两行而不是一行的技巧(意味着有更多的数据更改)这次可以减少事务日志,但仍然不会像这个 png 那样减少太多。在周末,我的技巧可以减少事务日志的大小。但不像正常的一天,数据变化更多,大小可以减少到0。 在此处输入图像描述

0 投票
1 回答
213 浏览

postgresql - reusing old master as slave in PostgreSQL

I have a Master node (A) and a slave node (B).

Assume a checkpoint has occurred at instant T and some transactions have been completed since the checkpoint (The dirty pages are not yet persisted on the disk). Assume the WAL position after the transaction is X.

Now node A fails, and I have promoted B as master.

I want to repair the node A and attach it as slave to B (the current master).

My doubt here is, will the transactions that occurred in node A (old master node A) get replayed and then it replays the streaming wal from current master (B) ??

My questions are,

1) In this case, from which point the wal will be streamed from new master to new slave? From the checkpoint or from position X?

2) when a old master is reused as slave, from where does the replay start? Any older wal present in the node gets replayed?

0 投票
0 回答
621 浏览

android - 在每次插入/更新/删除操作后,在 WAL 模式下创建 SQLITE 数据库的检查点

我的 Xamarin Android 应用程序中有 SQLITE 数据库,我需要能够从不同的线程和/或进程同时读取和写入它。所以我现在尝试在 WAL 模式下使用它。它大部分工作正常。我之前遇到的 SQLITE_BUSY 错误不再发生。

问题是我还希望能够将这个数据库从设备中取出(即通过电子邮件发送)——最好是在一个文件中。

在 WAL 模式下,我有主数据库文件 x.db3 以及 x.db3-wal 和 x.db3-shm,这对于此目的来说还不够好。因此,您的想法是pragma checkpoint(passive)在每次插入、更新或删除操作之后执行,这样数据库实际上几乎总是由一个文件组成。就我而言,更新很少见,因此性能下降可能不是问题。我知道在检查点期间,读者将无法读取数据,而我可以处理它。但无论如何,我的直觉告诉我,这不是使用 WAL 日志记录的正确方法,这就是我要问的原因。在我看来,它“看起来”像是虐待。

对于使用这种方法可能遇到的问题,我将不胜感激。

0 投票
1 回答
85 浏览

arangodb - ArangoDB 超时,由于过多的预写日志

我正在尝试重新启动我的 ArangoDB 实例,但我一直超时,我认为这是因为重播了 WAL 日志文件。

起初有 2725 个文件,现在有 2701 个。我让 Arango 重播所有文件(如下所示),但我仍然超时。

当我重新启动时,服务在这里挂起:

两个问题:

  • 我有哪些选择可以恢复我的数据并重新启动 arango?
  • 为什么当我重播所有日志文件时,日志文件的数量只减少了 24 个?