#latency #replication #postgresql #topic #secondary #primary #pub-sub

app pgdelaytest

一个用于评估 PostgreSQL 上复制延迟的简单工具

1 个不稳定版本

0.1.0 2022年12月12日

#11#secondary

Apache-2.0

26KB
134

PostgreSQL 延迟测试

这是什么?

这个小型实用程序显示了两个 PG 实例之间的复制延迟。它基本上在主实例上增加一个计数器,并测量该更改传播到从实例所需的时间。它可以可选地将每个数据点发布到您选择的 Google Cloud pub/sub 主题。这样,通过自动 BigQuery 订阅,可以轻松存储和分析大量数据点。

使用方法

使用 Rust 编译此工具(例如 cargo install --path .)并从命令行启动它。对于 PostgreSQL,创建一个表并使用此简单脚本插入一行

CREATE TABLE tbl(id INT, value INT);                                                              

INSERT INTO tbl(id, value) VALUES(1, 900);

工具所需的参数是两个连接字符串(格式如下指定:https://docs.rs/tokio-postgres/latest/tokio_postgres/config/struct.Config.html)。您还可以可选地更改尝试之间的睡眠时间和要写入的 pub/sub 主题。

例如,以下命令

pgdelaytest --primary-connection-string "host=primary user=test password=password" --secondary-connection-string "host=secondary user=test password=password" publish --pub-sub-topic pglatency

测试了 primarysecondary 之间的延迟,并将结果同时发布到 stdout 和 GCP 主题 pglatency 以流式传输到 BigQuery。

请注意,为了发布到 pub/sub,必须可用有效的 GCP 身份验证和适当的权限。

使用方法(Docker)

您可以使用 docker build . -t pgdelaytest:latest 构建容器,或者从 Docker.io 拉取它。然后通过传递环境变量执行它。例如

docker run -e PRIMARY_CONNECTION_STRING="host=host user=test password=password" -e SECONDARY_CONNECTION_STRING="host=secondary user=test password=password" -e PUB_SUB_TOPIC=topic -e GOOGLE_APPLICATION_CREDENTIALS=/service_account_pvk.json -v /service_account_pvk.json:/service_account_pvk.json pgdelaytest:latest

注意:此示例使用服务帐户密钥文件,如果您不需要发布到 pub/sub 或您已有默认凭据,则不需要此文件。

方法论

该工具在主实例上更新一行,并立即尝试从从实例获取相同的行。如果值匹配,则报告的延迟为零。如果不匹配,则该工具会继续查询相同的行,直到值匹配,然后报告所需的时间作为 复制延迟

这意味着两件事

  1. 零延迟并不意味着零微秒:这意味着延迟如此之低,以至于该工具无法确定它。
  2. 测量的延迟,如果大于零,则包含一个与工具查询从实例速度相关的错误。它可以解释为上限。

该工具能够计算毫秒(甚至微秒),但考虑到上述限制,我认为最好以秒为单位给出粗略估计。如果您不同意,请提出一个问题,我将添加此选项。

发布/订阅

该工具可选择将事件消息发布到GCP中的发布/订阅主题。这可以用于自动将BigQuery订阅流数据流到BigQuery。您可以在schema.proto文件中找到消息的模式。BigQuery表的定义在create_table.sql文件中。

例如,此查询显示了最新的条目

SELECT TIMESTAMP_MILLIS(timestamp) AS event_time, latency_ms 
FROM `mind-lab-wash.someds.frompubsublatency` 
ORDER BY timestamp DESC
LIMIT 1000;

这可以通过Looker Studio或Pro图形化查看数据,非常有用。

依赖关系

~33–51MB
~1M SLoC