1 个不稳定版本
0.1.0 | 2022年12月12日 |
---|
#11 在 #secondary
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
测试了 primary
和 secondary
之间的延迟,并将结果同时发布到 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 或您已有默认凭据,则不需要此文件。
方法论
该工具在主实例上更新一行,并立即尝试从从实例获取相同的行。如果值匹配,则报告的延迟为零。如果不匹配,则该工具会继续查询相同的行,直到值匹配,然后报告所需的时间作为 复制延迟。
这意味着两件事
- 零延迟并不意味着零微秒:这意味着延迟如此之低,以至于该工具无法确定它。
- 测量的延迟,如果大于零,则包含一个与工具查询从实例速度相关的错误。它可以解释为上限。
该工具能够计算毫秒(甚至微秒),但考虑到上述限制,我认为最好以秒为单位给出粗略估计。如果您不同意,请提出一个问题,我将添加此选项。
发布/订阅
该工具可选择将事件消息发布到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