详情页标题前

阿里云RDS数据库资源密集活动统计(pg_profile)-云淘科技

详情页1

RDS PostgreSQL支持使用pg_profile插件来统计数据库中资源密集型活动,用于分析优化数据库。

插件简介

此扩展基于PostgreSQL的统计视图(pg_stat_statements)和社区插件(pg_stat_kcache), 完全使用PL/pgSQL编写,无需任何外部库或软件,配合pg_cron插件即可实现资源密集活动的统计。

前提条件

RDS PostgreSQL实例需满足以下要求:

  • 实例大版本为PostgreSQL 10或以上版本。

  • 实例内核小版本为20230830或以上。

    重要

    20230830内核小版本之前已支持此插件,但为了规范插件管理,提升RDS PostgreSQL在插件侧的安全防护,RDS计划在内核版本迭代中陆续对部分存在安全风险的插件进行优化,部分插件在低内核小版本无法创建,更多信息,请参见【产品/功能变更】RDS PostgreSQL限制创建插件说明。

    • 如果您在20230830内核小版前已经使用了此插件,则不影响使用。

    • 如果您首次创建或重新创建此插件,请升级内核小版本到最新。

  • 已创建高权限账号。

注意事项

  • 该插件必须先启用pg_stat_statements插件,同时可以启用pg_stat_kcache插件来提供更多信息收集功能。

  • 存储采样信息将会占用磁盘空间,该插件有自动清理机制,请注意数据保存。

  • 一次采样较为耗时,无需频繁采样,推荐频率为每小时1~2次。

创建和删除插件

说明

推荐使用高权限账号可以执行如下命令。

  • 创建插件

    CREATE EXTENSION pg_profile;
  • 删除插件

    DROP EXTENSION pg_profile;

使用示例

本示例需要分别创建server数据库和profile数据库。

在采样时,profile数据库会向server数据库发出一个请求,server数据库收到请求后采样自己的信息,再将采样结果返回给profile,profile将收到的结果存储在表中。这样就可以从profile数据获取其他数据库的统计信息。

说明

profile数据库和server数据库可以创建在不同RDS PostgreSQL实例中,也可创建在同一实例中。

server数据库

  1. 创建server数据库。

    CREATE DATABASE server;
  2. 连接server数据库并创建插件。

    \c server
    CREATE EXTENSION pg_stat_statements;
    CREATE EXTENSION pg_stat_kcache;

    说明

    系统读写信息统计(pg_stat_kcache)插件依赖pg_stat_statements插件,这两个插件均需要在数据库启动时加载,请确保pg_stat_statementspg_stat_kcache已加入到shared_preload_libraries参数中。修改shared_preload_libraries参数方法请参见设置实例参数。

  3. 执行\dx查看插件创建详情。

            Name        | Version |   Schema   |                              Description
    --------------------+---------+------------+------------------------------------------------------------------------
     pg_stat_kcache     | 2.2.1   | public     | Kernel statistics gathering
     pg_stat_statements | 1.9     | public     | track planning and execution statistics of all SQL statements executed
     ...

profile数据库

  1. 创建profile数据库。

    CREATE DATABASE profile;
  2. 连接profile数据库并创建插件。

    \c profile
    CREATE EXTENSION plpgsql;
    CREATE EXTENSION dblink;
    CREATE EXTENSION pg_profile;
  3. 执行\dx查看插件创建详情。

        Name    | Version |   Schema   |                         Description
    ------------+---------+------------+--------------------------------------------------------------
     dblink     | 1.2     | public     | connect to other PostgreSQL databases from within a database
     pg_profile | 4.0     | public     | PostgreSQL load profile repository and report builder
     plpgsql    | 1.0     | pg_catalog | PL/pgSQL procedural language
     ...
  4. 创建server连接。

    SELECT create_server('server', 'host= dbname=server port= user= password=');

    参数

    示例值

    参数说明

    server

    server

    连接名,自定义。

    host

    127.0.0.1

    server数据库所在实例的连接地址。

    • 如果profile数据库与server数据库在同一实例中,则此参数固定配置为127.0.0.1

    • 如果profile数据库与server数据库在相同VPC下的不同实例中,则此参数配置为server数据库所在实例的内网地址。

    • 如果profile数据库与server数据库在不同VPC下的不同实例中:

      • profile数据库所在实例需要配置NAT网关并绑定公网IP。

      • server数据库所在实例需要开通外网地址,此参数配置为server数据库所在实例的外网地址。

    说明

    如何获取实例的内外网地址,请参见查看或修改连接地址和端口。

    dbname

    server

    数据库名。

    port

    3002

    server数据库所在实例的端口。

    • 如果profile数据库与server数据库在同一实例,此参数通过SQL命令SHOW PORT;查询获取。

    • 如果profile数据库与server数据库在相同VPC下的不同实例中,则此参数配置为server数据库所在实例的内网端口。

    • 如果profile数据库与server数据库在不同VPC下的不同实例中,则此参数配置server数据库所在实例的公网端口。

    user

    test_user

    server数据库所在实例的高权限账号。

    password

    T123456!

    账号对应的密码。

    结果示例:

                                         show_servers
    ---------------------------------------------------------------------------------------
     (local,"dbname=profile port=3002",t,)
     (server,"host=127.0.0.1 dbname=server port=3002 user=test_user password=****",t,)
    (2 rows)

    说明

    创建server连接后,会自动创建一个profile数据库的连接,即上述结果示例中的名为local的连接。

  5. 修改profile数据库连接信息,配置密码。

    SELECT set_server_connstr('local','host=127.0.0.1 dbname=profile port=3002 user= password=');

    参数

    示例值

    参数说明

    server

    local

    连接名,无需修改。

    host

    127.0.0.1

    固定为127.0.0.1。

    dbname

    profile

    数据库名。

    port

    3002

    此参数通过SQL命令SHOW PORT;查询获取。

    user

    test_user

    profile数据库所在实例的高权限账号。

    password

    T123456!

    账号对应的密码。

  6. 初次进行数据采集。

    SELECT take_sample();

    结果示例:

           take_sample
    -------------------------
     (server,OK,00:00:00.52)
     (local,OK,00:00:00.51)
    (2 rows)
  7. 对server数据库进行压测后,再次进行采集。

    1. 在命令行窗口执行如下命令,对server数据库进行压测。

      说明

      如下命令需要在命令行窗口执行,请确保已安装PostgreSQL客户端,pgbench是在PostgreSQL上运行基准测试的简单程序。该命令的更多用法,请参见PostgreSQL官方文档。

      pgbench -s 100 -i server -U test_user -h pgm-****.pg.rds.aliyuncs.com -p 5432

      参数

      示例值

      参数说明

      -s

      100

      100表示在pgbench_accounts表中创建10,000,000行数据。

      -i dbname

      server

      待进行测试的数据库。

      -U

      test_user

      server数据库所在实例的高权限账号。

      -h

      pgm-****.pg.rds.aliyuncs.com

      server数据库所在实例的连接地址。

      -p

      5432

      实例端口。

    2. 连接profile数据库所在实例,再次进行数据采集。

      SELECT take_sample();
    3. 查看采集数据。

      SELECT * FROM show_samples('server');

      结果示例如下:

       sample |      sample_time       | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset
      --------+------------------------+-----------------+---------------+-----------------+-----------------
            1 | 2022-09-30 02:14:07+00 | t               |               |                 |
            2 | 2022-09-30 02:16:59+00 | t               |               |                 |
            3 | 2022-09-30 02:17:58+00 | t               |               |                 |
  8. 将采集结果生成报告。

    您可以通过如下两种方式将采集结果导出到本地。

    • 通过psql在profile数据库中执行如下命令:

      \o report_2_3.html
      SELECT get_report('server',2,3);
    • 在本地命令行中执行如下命令:

      psql -Aqtc "SELECT profile.get_report('server',2,3)" -o report_server_2_3.html -d profile -h  -p 5432 -U  

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/156102.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 阿里云RDS数据库申请或释放外网地址-云淘科技

    RDS支持内网地址和外网地址两种地址类型,默认提供内网地址供您内部访问RDS实例,如果需要外网访问,您需要申请外网地址。 内网地址和外网地址 地址类型 说明 内网地址 默认提供内网地址,无需申请,无法释放,可以切换网络类型。 如果您的应用部署在ECS实例,且该ECS实例与RDS实例在同一地域,且网络类型相同,则RDS实例与ECS实例可以通过内网互通,无需申请…

    阿里云数据库 2023年12月9日
  • 阿里云RDS数据库RDS MySQL活跃线程数高问题-云淘科技

    本文介绍RDS MySQL活跃线程数高的原因及解决方案。 背景信息 活跃线程数或活跃连接数是衡量MySQL负载状态的关键指标,通常来说一个比较健康的实例活跃连接数应该低于10,高规格和高QPS的实例活跃连接数可能20、30,如果出现几百、上千的活跃连接数,说明出现了SQL堆积和响应变慢,严重时会导致实例停止响应,无法继续处理SQL请求。 查看活跃线程数 RD…

    阿里云数据库 2023年12月9日
  • 阿里云日志服务SLS开通日志审计功能-云淘科技

    本文介绍如何在Redis管理控制台上开通日志审计功能,将Redis审计日志推送到日志服务中。 前提条件 已创建满足如下条件的Redis实例。 Redis实例为本地盘版。 Redis实例为社区版或Tair内存型。 Redis实例的引擎版本为4.0或以上,且实例的小版本为最新。关于如何升级版本,请参见升级大版本和升级小版本。 操作步骤 重要 如果您使用RAM用户…

    阿里云日志服务SLS 2023年12月10日
  • 腾讯云对象存储恢复归档对象

    简介 本文档提供关于恢复归档对象操作相关的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 POST Object restore 恢复归档对象 将归档类型的对象取回访问 恢复归档对象 功能说明 将归档类型的对象取回访问(POST Object restore)。 方法原型 func (s *ObjectService) PostRestor…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云对象存储删除标记

    简介 删除标记用于版本控制的对象,删除标记在对象存储(Cloud Object Storage,COS)中可认为是“对象已被删除”的标记。删除标记与对象同样拥有对象键(Key)和版本 ID。区别在于以下几点:删除标记的内容为空。删除标记不存在 ACL 值。删除标记执行 GET 请求会返回404错误。删除标记只支持 DELETE 操作(需要主账号下发出请求)。…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。