前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL 14通过libpq改进logging

PostgreSQL 14通过libpq改进logging

作者头像
yzsDBA
发布2021-11-26 14:06:39
5260
发布2021-11-26 14:06:39
举报
文章被收录于专栏:PostgreSQL研究与原理解析

PostgreSQL 14通过libpq改进logging

PG14中增强了libpq功能,以跟踪应用程序的服务器/客户端通信的可用性。它添加了新的选项控制输出格式。

背景

libpq是客户端库之一,用户可以运行PQtrace函数记录客户端-服务端通信。这个通信是PG使用的一种协议信息,包括:消息类型的标识符,消息长度,交换信息的消息内容。

应用开发者可以使用这个日志判断通信是否按预期执行。使用下面的的语句作为一个例子:

CREATE TABLESPACE regress_tblspacewith

LOCATION '/home/postgres/src/test/regress/testtablespace'

WITH (random_page_cost = 3.0);

PG13中调用PQtrace的应用会输出下面类型的日志到指定文件中:

PG13中libpq产生的日志
PG13中libpq产生的日志

需要注意,当前PG版本的PQtrace日志输出中不包含时间戳,因此不能作为参考分析慢查询。另外,因为消息标识符、server/client消息长度、输出内容分别单独一行,可靠性比较低,协议消息的分析比较困难。标记1的Z和C是协议消息的标识符。要了解每个标识符的含义,参考手册中Message Formats部分:

https://www.postgresql.org/files/documentation/pdf/13/postgresql-13-A4.pdf#page=2217

功能改进概述

PG14中,改进了PQtrace函数,使得输出的日志更具可读性并且包含时间戳。添加了新的函数PQsetTraceFlags用以控制时间戳的输出。

改进日志输出

PG14中改进的trace函数产生了下面类似的输出:

PG 14中libpq产生的日志
PG 14中libpq产生的日志

1)包含了时间戳

2)消息方向的代码更加直观:F表示前端,B表示后端

3)输出正式的消息名称,而不是协议消息的标识符

4)有意义的协议消息以一行形式输出

日志检索方法

和以前一样,通过调用libpq的PQtrace函数开始记录日志。如果不需要输出时间戳,可以通过PQsetTraceFlags函数控制。

影响

PQtrace输出时间戳,可以帮助用户识别慢查询。如果应用程序突然变慢,可以通过查看日志中时间戳差异来确定server或者client耗费了更长时间。有意义的协议消息以一行形式输出,使得不熟悉lipq日志的人可以轻松了解server和client之间发送的通信。通过使用PQsetTraceFlags函数控制是否输出时间戳,可以使用此日志进行回归测试。通过不输出时间戳,可以使用预期测试运行的结果填充日志,并轻松第将其与测试运行中得到的日志进行比较。

未来

PG14的libpq日志将包含时间戳和更具可读性的文本。在后续版本中,我们会在下面几个方面进一步提升可用性:

1) 当前函数将日志写入指定给PQtrace函数的文件。某些情况下,会使日志文件膨胀非常大,从而影响文件操作。为解决这个问题,我们希望提供一个功能来指定文件的最大大小。

2) 希望添加环境变量和连接参数,以设置日志输出的目录位置,以及日志文件名来适应环境,无需修改应用程序。

原文

https://www.postgresql.fastware.com/blog/improved-logging-by-libpq-in-postgresql-14

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PostgreSQL 14通过libpq改进logging
    • 背景
      • 功能改进概述
        • 影响
          • 未来
            • 原文
            相关产品与服务
            日志服务
            日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档