暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG 的性能采集分析工具 PoWA 部署实践

概述


本文主要介绍 PG 的一个性能采集和分析工具 PoWA 的部署方法和使用特点。欢迎留言交流。

该工具利用 PG 的扩展插件实现,其性能诊断分析能力比较接近 ORACLE AWR 报表功能。

PG 软件源仓库简介


PG 和相关插件的安装都可以从 PG 专用软件源仓库下载安装。根据操作系统版本的不同,软件源仓库的配置方法有所不同。

 

CentOS/Redhat

 

PG 在 CentOS、Redhat 上的软件源仓库描述地址:https://yum.postgresql.org/

 

软件可以使用 yum 或 dnf 命令安装软件包。

 

    # Install the repository RPM:
    sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    # Disable the built-in PostgreSQL module:
    sudo dnf -qy module disable postgresql
    # Install PostgreSQL:
    sudo dnf install -y postgresql14-server
    # Optionally initialize the database and enable automatic start:
    sudo usr/pgsql-14/bin/postgresql-14-setup initdb
    sudo systemctl enable postgresql-14
    sudo systemctl start postgresql-14

     Ubuntu/Debian

     

    PG 在 Debian 上的软件源仓库描述地址:https://wiki.postgresql.org/wiki/Apt

     

    软件可以使用 apt 命令安装软件包。

      sudo apt install curl ca-certificates gnupg
      curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null
      sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > etc/apt/sources.list.d/pgdg.list'
      sudo apt update
      sudo apt install postgresql-14 postgresql-client-14 postgresql-contrib-14

      apt update
       可能会很慢,就把 debian 源地址替换为国内镜像。如下面这个。

        root@292f2c855627:/# cat etc/apt/sources.list# deb http://snapshot.debian.org/archive/debian/20201012T070000Z buster main
        deb http://mirrors.ustc.edu.cn/debian buster main
        # deb http://snapshot.debian.org/archive/debian-security/20201012T070000Z buster/updates main
        deb http://mirrors.ustc.edu.cn/debian-security buster/updates main
        # deb http://snapshot.debian.org/archive/debian/20201012T070000Z buster-updates main
        deb http://mirrors.ustc.edu.cn/debian buster-updates main

        PoWA 部署介绍

        部署架构简介

         

        PoWA 4.0 之后的部署架构支持本地部署和远程部署。推荐用远程部署方式,部署架构图如下。


         

         在每个 PG 实例里启用插件,在独立的服务器上部署采集程序 PoWA collector 和主程序 PoWA web。


        上面架构图用到的插件简介如下:

        • pg_stat_statements
           :记录指定 PG 实例上所有 SQL 的统计信息,具体数据在视图 pg_stat_statements
           上。

        • pg_qualstats
           :采集 SQL 语句的  where
           和  join
           语句中的条件的统计信息。

        • pg_stat_kcache
            :采集主机系统指标的统计信息。

        • pg_wait_sampling
           :采集 SQL 语句的等待事件,并提供等待事件的汇总统计视图。

        • pg_track_settings
           :主要是跟踪实例的参数配置变化。

         

        PoWA archivlist 部署介绍

        • 简介

        PoWA-archivlist 是 PoWA 项目的重要组件之一,它包含 2 个元素:
          • 扩展  powa
             ,包含一些管理用的函数。

          • 模块  powa
             ,可选,在后台运行,采集本地实例的性能。

         

        • 安装方法

        建议使用 PGDG 软件源里的安装包安装。
          apt-get -y install postgresql-14-powa
          • 在目标 PG 实例里创建数据库  powa
             和相应的扩展。

            postgres=# create database powa;
            CREATE DATABASE
            postgres=# \c powa
            You are now connected to database "powa" as user "postgres".
            powa=# create extension powa;
            CREATE EXTENSION
            powa=# create extension btree_gist ;
            CREATE EXTENSION
            powa=# create extension powa;
            CREATE EXTENSION
            powa=#

             

            也可以用下面方式自动创建依赖的扩展。

              postgres=# drop database powa;
              DROP DATABASE
              postgres=# create database powa;
              CREATE DATABASE
              postgres=# \c powa;
              You are now connected to database "powa" as user "postgres".
              powa=# create extension powa cascade ;
              NOTICE: installing required extension "pg_stat_statements"
              NOTICE: installing required extension "btree_gist"
              CREATE EXTENSION
              powa=# \dx
              List of installed extensions
              Name | Version | Schema | Description
              --------------------+---------+------------+------------------------------------------------------------------------
              btree_gist | 1.6 | public | support for indexing common datatypes in GiST
              pg_stat_statements | 1.9 | public | track planning and execution statistics of all SQL statements executed
              plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
              powa | 4.1.4 | public | PostgreSQL Workload Analyser-core
              (4 rows)
              • 修改 PG 配置文件。

              安装完成后修改  postgresql.conf 里预加载的模块参数,需要重启 PG 实例才可以加载模块。

                shared_preload_libraries = 'pg_stat_statements' # (change requires restart)


                并且增加相应的参数控制记录不同 SQL 查询的个数(默认是1000,太少了)。

                 

                  pg_stat_statements.max = 10000

                  重启 PostgreSQL 实例,让配置生效。

                  • 查看使用示例

                    powa=# \x auto
                    Expanded display is used automatically.
                    powa=# select query, calls, total_exec_time, rows from pg_stat_statements order by calls desc limit 2;
                    -[ RECORD 1 ]---+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                    query | select spcname as TABLESPACENAME,pg_tablespace_size(spcname)/$1/$2 as total_mb,$3 as free, (select count(*) from pg_catalog.pg_database where dattablespace=a.OID) as datcount, (select rolname from pg_catalog.pg_authid where oid=b.oid) as ownuser from pg_catalog.pg_tablespace a left join pg_catalog.pg_roles b on a.spcowner=b.oid +
                    calls | 254
                    total_exec_time | 9499.660649999998
                    rows | 508
                    -[ RECORD 2 ]---+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                    query | select a.*, b.* +
                    | from +
                    | (select sum(numbackends) numbackends, sum(xact_commit) xact_commit, sum(xact_rollback) xact_rollback, sum(blks_read) blks_read, sum(blks_hit) blks_hit, sum(tup_returned) tup_returned, sum(tup_fetched) tup_fetched, sum(tup_inserted) tup_inserted, sum(tup_updated) tup_updated, sum(tup_deleted) tup_deleted, +
                    | sum(conflicts) conflicts, sum(temp_files) temp_files, sum(temp_bytes) temp_bytes, sum(deadlocks) deadlocks +
                    | from pg_stat_database) a, (select * from pg_stat_bgwriter) b
                    calls | 252
                    total_exec_time | 3321.225349999999
                    rows | 252

                    PoWA 插件部署介绍

                    pg_qualstats 部署介绍

                    • 简介

                     

                    pg_qualstats
                     主要是采集 SQL 语句的  where
                     和  join
                     语句中的条件的统计信息,帮助 DBA 分析下面问题:
                      • 使用这个列查询的语句集合是哪些?

                      • where
                         语句里常用的查询条件的值是哪些?

                      • where
                         语句里常用的查询条件是哪些?


                    • 安装方式采取安装软件包。

                      apt -y install postgresql-14-pg-qualstats
                      • 在目标 PG 实例的数据库  powa
                         创建相应的扩展。

                        CREATE EXTENSION pg_qualstats;
                        • 修改 PG 配置文件。

                        安装完成后修改  postgresql.conf
                         里预加载的模块参数,需要重启 PG 实例才可以加载模块。

                          shared_preload_libraries = 'pg_stat_statements,pg_qualstats'    # (change requires restart)

                          下面是插件相关的参数

                          也在  postgresql.conf
                           里添加。

                            _qualstats.enabled = true
                            pg_qualstats.max = 10000
                            pg_qualstats.track_pg_catalog = false
                            pg_qualstats.resolve_oids = false
                            pg_qualstats.track_constants = true
                            pg_qualstats.sample_rate = 0.1

                             

                            pg_stat_kcache 部署介绍

                            • 简介

                            pg_stat_kcache
                              :采集主机系统指标的统计信息。这个扩展可以帮助 DBA 查看每个查询、用户或数据库消耗的主机资源。主机资源包括:
                              • CPU (user time 和 system time)

                              • 物理磁盘访问读写次数

                             

                            • 安装方式采取安装软件包。

                             

                              apt -y install postgresql-14-pg-stat-kcache
                              • 在目标 PG 实例的数据库  powa
                                 创建相应的扩展。

                                CREATE EXTENSION pg_stat_kcache;
                                • 修改 PG 配置文件。

                                安装完成后修改 postgresql.conf
                                 里预加载的模块参数,需要重启 PG 实例才可以加载模块。

                                  shared_preload_libraries = 'pg_stat_statements,pg_qualstats,pg_stat_kcache'    # (change requires restart)

                                  pg_stat_kcache
                                   采集的记录数跟插件  pg_stat_statements
                                   的参数保持一致。

                                  重启实例后在  powa
                                   库中执行下面语句:

                                    SELECT powa_kcache_register();

                                    pg_wait_sampling 部署介绍

                                    • 简介

                                     

                                    pg_wait_sampling
                                     :采集 SQL 语句的等待事件,并提供等待事件的汇总统计视图。

                                    • 安装方式采取安装软件包。

                                      apt -y install postgresql-14-pg-wait-sampling
                                      • 在目标 PG 实例的数据库  powa
                                         创建相应的扩展。

                                        CREATE EXTENSION pg_wait_sampling;
                                        • 修改 PG 配置文件。

                                        安装完成后修改  postgresql.conf
                                         里预加载的模块参数,需要重启 PG 实例才可以加载模块。

                                          shared_preload_libraries = 'pg_stat_statements,pg_qualstats,pg_stat_kcache,pg_wait_sampling'    # (change requires restart)

                                          pg_stat_kcache
                                           提供参数配置插件行为。 

                                            pg_wait_sampling.profile_period = 50
                                            pg_wait_sampling.profile_pid = true
                                            pg_wait_sampling.profile_queries = true

                                             重启实例后在  powa
                                             库中执行下面语句:

                                              SELECT powa_wait_sampling_register();
                                              • 查看使用示例

                                               

                                              视图  pg_wait_sampling_profile
                                               统计了每个 pid 的等待事件类型、语句id 和数量。
                                                powa=# select * from pg_wait_sampling_profile ;pid | event_type |        event        |       queryid        | count
                                                -----+------------+---------------------+----------------------+-------
                                                27 | Activity | CheckpointerMain | 0 | 8164
                                                28 | Activity | BgWriterMain | 0 | 8164
                                                35 | Client | ClientRead | 0 | 8105
                                                33 | Activity | LogicalLauncherMain | 0 | 8164
                                                30 | Activity | AutoVacuumMain | 0 | 8158
                                                49 | Client | ClientRead | 0 | 5143
                                                34 | Client | ClientRead | 0 | 8100
                                                35 | IO | DataFileRead | -8101737766526846102 | 1
                                                29 | Activity | WalWriterMain | 0 | 8163
                                                48 | Client | ClientRead | 0 | 5247
                                                51 | Client | ClientRead | 0 | 5108
                                                (11 rows)

                                                有关 PG 等待事件的详细介绍可以参考  https://www.postgresql.org/docs/current/monitoring-stats.html#WAIT-EVENT-TABLE  。

                                                pg_track_settings 部署介绍

                                                • 介绍

                                                pg_track_settings :主要是跟踪实例的参数配置变化。包括下面:

                                                  • 参数文件  postgresql.conf
                                                     或命令  alter system
                                                     修改后在视图  pg_settings
                                                     里的变化。

                                                  • 用户  role
                                                     或数据库级别的变化,主要是命令  alter role 
                                                    或  alter database 
                                                    修改后在视图  pg_db_role_setting
                                                     里的变化。

                                                在 PoWA 的远程部署架构里,这个插件必须在  powa
                                                 元数据库以及远程 PG 实例的  powa
                                                 里都要安装。
                                                • 安装方式采取安装软件包。

                                                 

                                                  apt -y install postgresql-14-pg-track-settings
                                                  • 在目标 PG 实例的数据库  powa
                                                     创建相应的扩展。

                                                    CREATE EXTENSION pg_track_settings;

                                                    还要执行下面语句注册这个实例。

                                                      SELECT powa_track_settings_register();
                                                        

                                                      HypoPG 部署介绍

                                                      HypoPG 插件可以充分利用前面各个插件的特性,主要是用来创建虚拟索引,然后用  explain
                                                       命令来检验虚拟索引的执行计划是否符合预期。虚拟索引不会产生磁盘 IO ,在磁盘上并不存在。
                                                      • 安装方式采取安装软件包。

                                                       

                                                        apt -y install postgresql-14-hypopg
                                                        • 在目标 PG 实例的数据库  powa
                                                           创建相应的扩展。

                                                          CREATE EXTENSION hypopg ;

                                                          汇总所有插件部署方法

                                                           

                                                          如果要安装所有插件,命令汇总如下。其中 14 是 PG 版本号,需要根据实际情况修改。

                                                            apt-get install postgresql-14-powa postgresql-14-pg-track-settings postgresql-14-pg-qualstats postgresql-14-pg-stat-kcache postgresql-14-hypopg postgresql-14-pg-wait-sampling

                                                            然后创建数据库  powa
                                                             并在下面创建相应扩展。

                                                              create database powa;
                                                              \c powa
                                                              CREATE EXTENSION pg_stat_statements;
                                                              CREATE EXTENSION btree_gist;
                                                              CREATE EXTENSION powa;
                                                              CREATE EXTENSION pg_qualstats;
                                                              CREATE EXTENSION pg_stat_kcache;
                                                              CREATE EXTENSION pg_wait_sampling;
                                                              CREATE EXTENSION pg_track_settings;
                                                              CREATE EXTENSION hypopg;
                                                              CREATE ROLE powa SUPERUSER LOGIN PASSWORD '********' ;

                                                              修改配置文件  postgresql.conf
                                                               并重启 PG 实例。

                                                                shared_preload_libraries = 'pg_stat_statements,pg_qualstats,pg_stat_kcache,pg_wait_sampling'    # (change requires restart)
                                                                  # Add settings for extensions here
                                                                  pg_stat_statements.max = 10000
                                                                  track_io_timing = on
                                                                  pg_qualstats.enabled = true
                                                                  pg_qualstats.max = 10000
                                                                  pg_qualstats.track_pg_catalog = false
                                                                  pg_qualstats.resolve_oids = false
                                                                  pg_qualstats.track_constants = true
                                                                  pg_qualstats.sample_rate = 0.1
                                                                  pg_wait_sampling.profile_period = 50
                                                                  pg_wait_sampling.profile_pid = true
                                                                  pg_wait_sampling.profile_queries = true

                                                                  重启实例后,在数据库  powa
                                                                   里再运行下面语句。

                                                                    SELECT powa_kcache_register();
                                                                    SELECT powa_wait_sampling_register();
                                                                    SELECT powa_track_settings_register();

                                                                    查看所有插件情况

                                                                      powa=# \dx
                                                                      List of installed extensions
                                                                      Name | Version | Schema | Description
                                                                      --------------------+---------+------------+------------------------------------------------------------------------
                                                                      btree_gist | 1.6 | public | support for indexing common datatypes in GiST
                                                                      hypopg | 1.3.1 | public | Hypothetical indexes for PostgreSQL
                                                                      pg_qualstats | 2.0.4 | public | An extension collecting statistics about quals
                                                                      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
                                                                      pg_track_settings | 2.1.0 | public | Track settings changes
                                                                      pg_wait_sampling | 1.1 | public | sampling based statistics of wait events
                                                                      plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
                                                                      powa | 4.1.4 | public | PostgreSQL Workload Analyser-core
                                                                      (9 rows)

                                                                      配置远程实例

                                                                      在 PoWA 的元数据库里注册远程PG 实例。

                                                                       

                                                                        SELECT powa_register_server(hostname => '10.0.0.109',
                                                                        port => '15432',
                                                                        alias => 'monitor-beta',
                                                                        username => 'powa',
                                                                        password => '********',
                                                                            extensions => '{pg_stat_statements,pg_qualstats,pg_stat_kcache,pg_wait_sampling,pg_track_settings}');

                                                                        查看注册的实例。

                                                                          powa=# select * from powa_servers;
                                                                          id | hostname | alias | port | username | password | dbname | frequency | powa_coalesce | retention | allow_ui_connection | version
                                                                          ----+------------+--------------+-------+----------+-----------+--------+-----------+---------------+-----------+---------------------+---------
                                                                          0 | | <local> | 0 | | | | -1 | 100 | 00:00:00 | t |
                                                                          2 | 10.0.0.109 | monitor-beta | 15432 | powa | admIN@123 | powa | 300 | 100 | 1 day | t |
                                                                          (2 rows)

                                                                          如果要增加扩展,方法如下:

                                                                            SELECT powa_activate_extension(2, 'pg_track_settings');
                                                                            更多操作方法请参考文档:background worker configuration — PoWA 4.1.4 documentation 。

                                                                            PoWA collector 部署介绍

                                                                            • 安装方法

                                                                              apt-get -y install python3 python3-psycopg2
                                                                              apt-get -y install powa-collector
                                                                              • 配置方法

                                                                                vim etc/powa-collector.conf
                                                                                {
                                                                                "repository": {
                                                                                "dsn": "postgresql://powa@127.0.0.1:5432/powa"
                                                                                },
                                                                                "debug": false
                                                                                }
                                                                                • 运行 PoWA collector

                                                                                  nohup powa-collector.py 2>&1 1>/tmp/powa-collector.log &

                                                                                   

                                                                                  PoWA web 部署

                                                                                  • 安装方法

                                                                                   

                                                                                  在 debian 系统上 ,powa-web 包跟 PG 版本无关。

                                                                                    apt-get -y install powa-web

                                                                                    在  CentOS/Linux 系统上,powa-web 包跟 PG 版本有关。

                                                                                      yum -y install powa_14-web
                                                                                      • 配置 PoWA web

                                                                                        [root@monitor-test1 ~]# vim etc/powa-web.conf
                                                                                        servers={
                                                                                        'main': {
                                                                                        'host': '127.0.0.1',
                                                                                        'port': '5432',
                                                                                        'database': 'powa',
                                                                                        'username': 'powa',
                                                                                        'password': '*********',
                                                                                        }
                                                                                        }
                                                                                        cookie_secret="SECRET_STRING"
                                                                                        port=8808

                                                                                        注意,监听端口是 8808 。

                                                                                         

                                                                                        • 启动 PoWA web

                                                                                          nohup powa-web 2>&1 1>/tmp/powa-web.log &
                                                                                          • 登录

                                                                                           

                                                                                          网址:http://10.0.0.107:8808/login
                                                                                          用户名和密码就是元数据库  powa
                                                                                           的访问账号。


                                                                                           


                                                                                          PoWA 使用简介

                                                                                          功能概览

                                                                                          PoWA 能够采集和展示本地 PG 实例和多个远程 PG实例的性能指标,并能够从实例到数据库到SQL语句级别进行下钻分析。

                                                                                           

                                                                                           

                                                                                           

                                                                                          使用示例

                                                                                          官网提供了一个公网的例子,可以在线查看。

                                                                                          • 地址:https://demo-powa.anayrat.info/

                                                                                          • 用户名:postgres

                                                                                          • 密码:postgres

                                                                                           

                                                                                          下面是几个功能截图。

                                                                                           

                                                                                          首先是主页,展示多个PG实例信息。

                                                                                           

                                                                                          每个实例的配置中有扩展启用信息。


                                                                                          这个是具体的一个 PG 实例的主页,展示多个角度的指标图。

                                                                                           

                                                                                          这个是具体的一个PG 实例下的多个数据库性能汇总信息。

                                                                                          下面两个是 SQL 的 IO 信息。包括对 PG 缓存和 OS 缓存的利用情况。

                                                                                          最厉害的还是这个功能,索引建议功能。


                                                                                          其他问题

                                                                                          PoWA的不足之处就是采集账户权限比较大,且在配置的时候还是明文密码保存。所以需要控制好  PoWA web 和 PG 的访问安全。



                                                                                          PG考试咨询


                                                                                          PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL认证考试,2023春节特惠,开始啦!
                                                                                          PGCCC,公众号:PostgreSQL考试认证中心永远都不晚:PostgreSQL认证专家(培训考试-广州站)
                                                                                          PostgreSQL-PCP认证专家-上海站、广州站
                                                                                          PGCCC,公众号:PostgreSQL考试认证中心开班通知-PCP认证专家(上海站)培训开班1106
                                                                                          PostgreSQL-PCP认证专家-北京站-精彩花絮
                                                                                          PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL认证专家考试(培训)(10月16日北京站)精彩花絮
                                                                                          PostgreSQL-PCP认证专家-成都站
                                                                                          公众号:PostgreSQL考试认证中心开班通知-PCP认证专家(成都站)培训开班1016
                                                                                          PostgreSQL-PCP认证专家考试-北京站-考试风采
                                                                                          PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL认证专家考试(培训)-北京站-成功举办
                                                                                          PostgreSQL-PCA认证考试-贵阳站-考试风采
                                                                                          PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL PCA+PCP认证考试在贵阳成功举办
                                                                                          PostgreSQL-PCP认证专家考试-上海站-考试风采
                                                                                          PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL PCP认证考试(上海站)成功举办
                                                                                          PostgreSQL认证专家考试-学员考试总结
                                                                                          薛晓刚,公众号:PostgreSQL考试认证中心难考的PostgreSQL认证考试
                                                                                          PostgreSQL-PCM认证大师考试-天津站-考试风采
                                                                                          PGCCC,公众号:PostgreSQL考试认证中心PostgreSQL-PCM认证大师考试(天津站)成功举办
                                                                                          如何在工业和信息化部教育与考试中心官网查询证书
                                                                                          PG考试认证中心,公众号:PostgreSQL考试认证中心如何在工业和信息化部教育与考试中心查询PostgreSQL证书
                                                                                          中国PostgreSQL考试认证体系
                                                                                          PG考试认证中心,公众号:PostgreSQL考试认证中心中国PostgreSQL考试认证体系




                                                                                          文章转载自PostgreSQL考试认证中心,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                                          评论