通过比较快照来优化数据库性能

本文档介绍了如何手动生成性能快照报告,以便您比较两个时间点之间的系统指标快照。您可以使用性能快照报告来识别和缓解 AlloyDB for PostgreSQL 数据库性能问题。在每个快照中捕获的系统指标包括虚拟 CPU (vCPU) 使用率、内存用量、磁盘 I/O、事务计数和等待事件。

自动和手动快照

AlloyDB 支持以下快照:

  • 自动快照:默认情况下,AlloyDB 会每天自动捕获一次快照,并将快照存储 7 天。自动快照有助于生成具有每日工作负载粒度的报告。您无法更改自动快照的保留期限,但可以配置频率

  • 手动快照:您可以手动捕获快照并生成报告。

您可以将自动快照和手动快照混合搭配,以生成效果报告。例如,您可以生成一份性能摘要报告,将手动生成的快照与自动生成的快照进行比较。

本文档介绍了如何手动生成性能快照报告。

Performance Snapshot Report 的工作原理

性能快照报告是 AlloyDB 内置的工具,可捕获和分析性能数据,以帮助您确定性能问题的原因。此工具可与其他 AlloyDB 可观测性功能(例如系统数据分析Query InsightsMetrics Explorer)相辅相成,这些功能可提供有关实例的实时指标。

Performance Snapshot Report 会在单个报告中显示两个时间戳之间的数据库指标。您可以使用性能快照报告信息来找出性能快照报告实例存在的性能问题,例如一天中的特定时间段内数据库性能下降或是特定时间段内性能下降。在读取池节点上使用时,该报告有助于确定复制延迟是由 CPU 或内存等系统资源限制引起的,还是由缓冲区固定等特定查询冲突引起的。

使用性能快照报告,您可以将指标与性能基准进行比较,以深入了解工作负载性能指标,您可以使用这些指标优化数据库性能或排查数据库性能问题。基准是一组自定义的数据库快照,用于衡量特定配置和工作负载下数据库的标准性能和行为。

如需了解 Performance Snapshot Report 中的等待事件,请参阅数据库 Performance Snapshot Report 报告参考

所需的角色

确保您拥有 alloydbsuperuser 角色。默认情况下,AlloyDB 会向 alloydbsuperuser 授予 pg_monitor 角色。如需了解详情,请参阅 PostgreSQL 预定义角色

如果您希望使用其他自定义角色,请先以 alloydbsuperuser 身份运行 GRANT pg_monitor TO my_user。如需了解详情,请参阅使用适当的角色更新 Identity and Access Management (IAM) 账号

创建快照

性能快照是了解和优化数据库性能的强大工具。它们会在特定时间点捕获关键系统指标,以便您比较数据库在两个时间点的性能。AlloyDB 支持两种类型的快照:

  • 系统指标的快照:这些快照会捕获关键系统指标,例如 vCPU 使用率、内存用量和磁盘 I/O。
  • 系统指标和 SQL 执行统计信息的快照:这些快照包含标准快照中的所有系统指标,以及来自 pg_stat_statements 扩展程序的详细 SQL 执行统计信息。

这样,您就可以灵活地选择分析所需的详细程度。

创建系统指标的快照

在您感兴趣的工作负载的开始和结束时间创建快照。两个快照之间的时间间隔应足够长,以便捕获具有代表性的工作负载样本。

请按照以下步骤优化 AlloyDB 数据库性能:

  1. 在数据库处于空闲状态或处理平均负载时创建基准快照。
  2. psql 客户端连接到 AlloyDB 实例。对于读取池节点,您必须直接连接到其 IP 地址。如需了解详情,请参阅检索读取池节点 IP 地址的列表
  3. 运行 SELECT perfsnap.snap()。输出类似于以下内容:

    postgres=# select perfsnap.snap();
     snap
    ------
        1
    (1 row)
    

    此命令的输出会返回快照 ID (snap_id),在本例中为 1。您需要此 ID 才能在稍后生成效果快照报告。您自己环境中的 snap_id 可能有所不同。

  4. 比较使用这两组快照创建的报告,确定可能会提高性能的更改。如需详细了解性能建议,请参阅数据库性能优化建议

从生成的性能快照报告中获取指标后,您可以创建另一组快照并重复此过程。

创建包含 SQL 执行统计信息的快照

默认情况下,AlloyDB 使用 pg_stat_statements 扩展程序来跟踪 SQL 语句。如要在性能报告中包含详细的 SQL 执行统计信息,您首先需要在 postgres 数据库中创建 pg_stat_statements 扩展程序。请注意,这些统计信息的捕获是通过 pg_stat_statements.track 标志启用的,而不是通过扩展本身启用的。

如需创建包含 SQL 执行统计信息的快照,请按照以下步骤操作:

  1. postgres 数据库中创建 pg_stat_statements 扩展程序。

    postgres=# CREATE EXTENSION pg_stat_statements;
    
  2. 现在,当您拍摄快照时,系统会自动纳入 pg_stat_statements 中的 SQL 统计信息。
      postgres=# select perfsnap.snap();
        snap
      ------
          2
      (1 row)
      

查看快照列表

  1. psql 客户端连接到 AlloyDB 实例。对于读取池节点,您必须使用 psql 直接连接到其 IP 地址。如需了解详情,请参阅检索读取池节点 IP 地址的列表
  2. 运行 SELECT * FROM perfsnap.g$snapshots。输出类似于以下内容:
    postgres=# select * from perfsnap.g$snapshots;
     snap_id |           snap_time           | instance_id  |               node_id           | snap_description  | snap_type | is_baseline
    ---------+-------------------------------+--------------+---------------------------------+-------------------+-----------+-------------
           1 | 2023-11-13 22:13:43.159237+00 | perf-primary | sab3-perf-primary-cab835ef-4cm8 | Manual snapshot   | Manual    | f
           2 | 2023-11-13 22:53:40.49565+00  | perf-primary | sab3-perf-primary-cab835ef-4cm8 | Automatic snapshot| Automatic | f
           3 | 2023-11-13 22:56:42.57094+00  | perf-replica | sab3-perf-replica-b9250422-tz4n | Automatic snapshot| Automatic | f
           4 | 2023-11-13 22:56:42.59476+00  | perf-replica | sab3-perf-replica-b9250422-63q3 | Automatic snapshot| Automatic | f
           5 | 2023-11-13 23:11:55.23157+00  | perf-replica | sab3-perf-replica-b9250422-tz4n | Manual snapshot   | Manual    | f
    (5 rows)

生成 Performance Snapshot Report

如需生成一个报告来捕获两个快照(例如快照 1 和快照 2)之间的差异,请运行:
SELECT perfsnap.report(1,2)

差分操作中的第二个快照不需要紧跟在第一个快照之后。不过在差分操作中,请务必在第一个快照之后捕获第二个快照。

生成的性能摘要报告类似于以下精简示例。

报告示例

以下是生成的性能摘要报告的精简示例:

Performance Snapshot Report 报告示例

$ psql -d postgres -U alloydbsuperuser
postgres=> select perfsnap.report(22, 23);

report
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 PGSNAP DB Report for:

 Snapshot details
 --------------------------------------
 Host                   i841-sr-primary-2a34f46e-06bc
 Release                14.12
 Startup Time           2024-10-08 03:23:15+00

              Snap Id    Snap Time
 ------------ ---------- ------------------------
 Begin Snap:          22 24.10.2024 04:33:56 (UTC) Automatic snapshot
   End Snap:          23 25.10.2024 04:38:56 (UTC) Automatic snapshot
    Elapsed:                      1 day 00:04:59.979321

 Database Cache sizes
 ~~~~~~~~~~~~~
            Shared Buffers:       31 GB        Block Size:         8192
      Effective Cache Size:       25 GB       WAL Buffers:        16384

 Host CPU
 ~~~~~~~~~~
       %User   %Nice %System   %Idle    %WIO    %IRQ   %SIRQ  %Steal  %Guest
     ------- ------- ------- ------- ------- ------- ------- ------- -------
        1.07    0.22    0.91   97.40    0.09    0.00    0.31    0.00    0.00

 Host Memory
 ~~~~~~~~~~~~
              Total Memory:       63 GB
          Available Memory:       11 GB
               Free Memory:      726 MB
            Buffers Memory:     3706 MB

 Load profile (in bytes)
 ~~~~~~~~~~~~~~~~~~~~~~~            Per Second         Per Transaction
                                    ------------       ---------------
                     Redo size:         63083.64               4489.93
                 Logical reads:          1961.21                139.59
                 ...

 Response Time Profile (in s)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 CPU time:               5399 (   0.39%)
 Wait time:           1386906 (  99.61%)
 Total time:           1392306

 Backend Processes Wait Class Breakdown (in s)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 IO                   119.300 (  98.91%)
 LWLock                 1.305 (   1.08%)
 IPC                     .010 (   0.01%)
 Lock                    .000 (   0.00%)

 Backend Processes Wait Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class         Waits      Time (us)      Avg (us)
 -------------------------------------- ------------- ------------- -------------- -------------
 CPU                                                                    1995948632
 WALInsert                                     LWLock             1           6656          6656

 Vacuum Information
 ~~~~~~~~~~~~~~~~~~~
             Num Analyze operations:             1976
              Num Vacuum operations:             3435

 Per Database Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Commits       Rollbacks     BlkRds        Blkhits       TempFiles     TempBytes
 ------------------------- ------------- ------------- ------------- ------------- ------------- -------------
 bench                             27939             0             0       7823038             0       0 bytes
 postgres                          39792             0             7      11089243             0       0 bytes

 Per Database DML & DQL Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Tuples returned  Tuples fetched   Tuples inserted  Tuples updated   Tuples deleted   Index splits     Index Only heap fetches   HOT updates
 ------------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ------------------------- ----------------
 bench                             16119481          4843262                0                0                0                0                        16                0
 postgres                          25415473          6327188                0               10                0                0                         0                8

 Per Database Conflict Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Lock Timeout  Old Snapshot  Buffer Pins   Deadlock
 ------------------------- ------------- ------------- ------------- -------------
 bench                                 0             0             0             0
 postgres                              0             0             0             0

 Per Database Vacuum Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                      Frozen XID    % Consumed    Aggregate Vacuum Gap
 ------------------------- ------------- ------------- --------------------
 bench                         179460916         9.00%         20539084
 postgres                      179339239         9.00%         20660761

 Per Database Sizing Information
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    Conn.
 Name                 Collation     Limit   Tablespace           DB Size    Growth
 -------------------- ------------- ------- -------------------- ---------- ----------
 bench                C.UTF-8            -1 pg_default                80 GB    0 bytes
 postgres             C.UTF-8            -1 pg_default               135 MB    0 bytes

 Backend Wait Event Histogram
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class       Waits    <= 1us    <= 2us    <= 4us    <= 8us   <= 16us   <= 32us   <= 64us  <= 128us  <= 256us  <= 512us
 -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------
 WALInsert                                  LWLock             1         0         0         0         0         0         0         0         0         0         0

 Background Wait Event Histogram
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Event                                          Class       Waits    <= 1us    <= 2us    <= 4us    <= 8us   <= 16us   <= 32us   <= 64us  <= 128us  <= 256us  <= 512us
 -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- --------
 WALInsert                                  LWLock           542       107       174        39       113        93         8         1         1         0         1

 Write Ahead Log (WAL) Statistics
 --------------------------------
 Records       Full Page Images   Bytes        Buffers Full   Write         Sync          Write Time    Sync Time
 -----------   ----------------   -----------  ------------   -----------   -----------   -----------   -----------
     2936305                100     805989345             0             0             0             0             0

 Summary Stats (across all databases)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Name                             Value
 -------------------------------- ----------------------------------
 Buffers evicted                  0
 Commits                          1216693
 ...

 Parameter Settings
 ~~~~~~~~~~~~~~~~~~~
 Parameter                         Value
 --------------------------------- --------------------------------------------------------------
 DateStyle                            ISO, MDY
 TimeZone                             UTC
 autovacuum                           on
 work_mem                             4096

 Columnar Engine available size  Columnar Engine configured size
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       14959MB                         19293MB

 Columnar Engine Statistics
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 name                                                       count
 ---------------------------------------------------------- ------------
 CU Populations/Refreshes                                          13197
 CU Auto Refreshes                                                 10975
 ...
 Columnar Engine Ultra-fast Cache Statistics
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Ultra-fast Cache Size (MB):                        19200
 Ultra-fast Cache Used Size (MB):                       0
 Ultra-fast Cache Block Size (MB):                     80

 SQL Report
 ~~~~~~~~~~
 NOTE: Query might be empty if query ID does not have a match in pg_stat_statements at report time. This is expected if the query is not run recently.
 Per Query Information (Top 50) By Total Elapsed Time
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Query Text                                                                                                 UserID         DBID          DBName          QueryID            Total Elapsed Time(ms)    Execution Count       Avg Elapsed Time(ms)
 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    prepare neword (INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) as select neword($1,$2,$3,$4,$5,$6)        36272        36274            tpcc      -5467151541922966497           276400877.8014            36928106                    7.4848
 prepare payment (INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, NUMERIC, VARCHAR) AS select p        36272        36274            tpcc       3864683359055073968           127719636.4656            36928456                    3.4586
                                        prepare delivery (INTEGER, INTEGER) AS select delivery($1,$2)        36272        36274            tpcc       2323704420019807054            48540963.0880             3694128                   13.1400
                                    prepare slev (INTEGER, INTEGER, INTEGER) AS select slev($1,$2,$3)        36272        36274            tpcc      -8637448842172635004            35361366.9271             3692785                    9.5758
 ...

 Per Query Information (Top 50) By Read IO
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Query Text                                                                                                 UserID         DBID          DBName          QueryID            Total ReadIO Time(ms)        Execution Count    Avg ReadIO Time(ms)    Total buffer hits         Avg buffer hits    Total blk reads         Avg blk reads
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 prepare ostat (INTEGER, INTEGER, INTEGER, INTEGER, VARCHAR) AS select * from ostat($1,$2,$3,$4,$5) a        36272        36274            tpcc      -1640504351418263816              498072.4004             3693895                    0.1348            80360201         21.75486877672484              105858 0.028657555236410347
                                        prepare delivery (INTEGER, INTEGER) AS select delivery($1,$2)        36272        36274            tpcc       2323704420019807054                  12.5438             3694128                    0.0000          4477308168        1212.0067761593534             1219908 0.33022894712906536
     prepare neword (INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) as select neword($1,$2,$3,$4,$5,$6)        36272        36274            tpcc      -5467151541922966497                   0.8039            36928106                    0.0000         10337394097         279.9329620912592             6245570 0.16912781825312134
              SELECT name, default_version, installed_version FROM pg_catalog.pg_available_extensions           10            5        postgres       6619165036968781114                   0.0000                 361                    0.0000                 361                         1                   0                   0
 ...

 Per Query Information (Top 50) By Standard Deviation of Elapsed Time
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Query Text                                                                                                 UserID         DBID          DBName          QueryID            Begin STDDEV Elapsed Time(ms)  End STDDEV Elapsed Time(ms)
 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                           SELECT COUNT($1) FROM perfsnap.g$snapshots           10            5        postgres      -8741741796612173369                      17.8084                      18.1239
                                        prepare delivery (INTEGER, INTEGER) AS select delivery($1,$2)        36272        36274            tpcc       2323704420019807054                      15.0626                      19.8495
     prepare neword (INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) as select neword($1,$2,$3,$4,$5,$6)        36272        36274            tpcc      -5467151541922966497                      13.9820                      17.0074
                                    prepare slev (INTEGER, INTEGER, INTEGER) AS select slev($1,$2,$3)        36272        36274            tpcc      -8637448842172635004                       8.4333                       9.6205

 ----------------------------------------------------
 Created by G_STATS v1.0.100
 ----------------------------------------------------
(xxx rows)

  

如需了解报告字段和性能优化建议,请参阅数据库性能优化建议。如需详细了解性能快照报告中的等待事件,请参阅数据库性能快照报告参考文档

删除快照

您必须先清除现有基准,然后才能删除属于该基准的快照。

如需删除快照,请运行以下命令:

SELECT perfsnap.delete(SNAP_ID);

SNAP_ID 替换为要删除的快照的 ID。

删除快照后,您将无法恢复快照。

将快照标记为性能基准

例如,如需将 ID 介于 1 到 3 之间的所有快照标记为系统性能基准,请运行
SELECT perfsnap.make_baseline(1, 3)

清除性能基准

例如,如需清除 ID 介于 1 到 3 之间的所有基准,请运行 SELECT perfsnap.clear_baseline(1, 3)

修改自动快照的频率

默认情况下,系统每天会自动为主实例和读取节点拍摄一次快照。

如需自定义自动快照的频率,请设置 perfsnap.interval 标志,该标志用于设置自动快照时间间隔(以秒为单位)。如需了解详情,请参阅配置数据库标志

建议您将标志值设置为至少几分钟,以便捕获有意义的信息。

为了优化资源使用情况,当您不再需要自定义频次时,请将该标志重置为默认值,即每天 86400 秒。

使用快照报告结果优化数据库性能

请按照以下步骤优化 AlloyDB 数据库性能:

  1. 在数据库处于空闲状态或处理平均负载时创建基准快照。
  2. 启动您要提高其性能的工作负载或查询。
  3. 当工作负载或查询达到峰值资源使用率时,创建另一组快照。我们建议您为这两份报告使用相同的时间间隔。
  4. 比较使用这两组快照创建的报告,确定可能会提高性能的更改。如需详细了解性能建议,请参阅数据库性能优化建议

数据库性能优化建议

下表列出了性能快照报告的各个部分,以及针对每个报告部分的建议改进措施。如需详细了解性能快照报告的各个部分和等待事件,请参阅数据库性能快照报告参考文档

部分 报告字段 报告字段说明 优化建议
快照详情 快照详情 提供主机、与 PostgreSQL 兼容的发布版本以及机器启动并正常运行的时间。 不适用
快照 ID 列出用于创建此报告的快照的 ID 和时间点。 不适用
系统数据分析 主机 CPU 主机 CPU 利用率详情。 如果 CPU 利用率超过 80%,我们建议您扩容到下一个可用大小。对于读取池实例,请确保节点大小与主实例相同或大于主实例。在繁重的写入工作负载期间,较小的读取节点可能无法跟上主节点的 WAL 生成速率。
主机内存 主机内存利用率详情。 如果可用内存小于 15%,我们建议您扩容到下一个可用大小。对于读取池实例,请确保节点大小与主实例相同或大于主实例。在繁重的写入工作负载期间,较小的读取节点可能无法跟上主节点的 WAL 生成速率。
负载配置文件 列出有助于根据生成的预写式日志记录 (WAL)、I/O 要求和连接管理来评估工作负载的计数器。 如果物理读取量高于逻辑读取量,请考虑扩容到下一个可用大小,以便为更大的数据缓存提供支持。
响应时间和等待类别细分 Postgres 进程在工作负载运行期间所用时间的细分。 例如,如果进程大多处于等待状态,请将调优重点放在缩短 I/O 等待时间上。
数据库工作负载信息 每个数据库的工作负载信息 每个数据库的关键指标,包括提交、回滚、命中率以及临时表和排序操作的相关信息。 如果回滚次数较多,请考虑诊断您的应用。
每个数据库的 DML 和 DQL 信息 查询操作的计数器。 将工作负载归类为读取密集型或写入密集型。
数据库冲突信息 常见应用和数据库问题的计数器。 如果存在死锁,请在应用中查找问题。如果读取池实例上的缓冲区 Pin 冲突较高,请考虑减小 max_standby_streaming_delay 值以允许重放继续进行,或将长时间运行的查询移至其他读取池,以避免长时间持有 Pin。
数据库大小调整信息 显示数据库在两个快照之间的时间间隔内的增长量。此字段还会显示数据库是否建立了连接限制。 如果数据库增长过大,请在应用中查找问题。
完全清理 (vacuum) 信息 完全清理 (vacuum) 信息 完全清理 (vacuum) 操作的 I/O 和计数器的详情。 默认情况下,AlloyDB 会执行自适应完全清理 (vacuum)。您可以替换部分完全清理 (vacuum) 设置,以适应您的工作负载。例如,如果这些请求消耗的 I/O 过多,请减少完全清理 (vacuum) 操作。
每个数据库的完全清理 (vacuum) 信息 显示以下信息:
  • 每个数据库的 datfrozenxid(最早未冻结 XID)的当前存在时长,或从 datfrozenxid 到当前事务 XID 的事务数量。
  • 所有事务 ID 中已消耗的未冻结事务 ID。
  • autovacuum_freeze_max_age - age(pg_database.datfrozenxid) 的结果,表示在第二个快照时间点(即在数据库聚合级别上触发自动完全清理 [autovacuum] 以防止回卷的时间)的近似存在时长差距(以事务为单位)。
如果 Frozen XID 字段的存在时长过长,或者消耗的事务百分比接近 90%,请考虑进行完全清理 (vacuum)。如果聚合完全清理 (vacuum) 差距减小,则表示 Postgres 将强制执行完全清理 (vacuum) 以防止回卷。
数据库进程等待详情 详细的后端和后台进程信息 后端和后台进程在报告时间间隔内进行的所有等待的详情。信息包括累计等待时间、CPU 时间和每种等待类型的平均时间。 例如,如需减少 WALWrite 的等待时间,请增加可供数据库使用的 wal_buffers 的数量。
详细的后端和后台等待事件直方图 默认情况下,这会包含在性能快照报告中。该列表包含后端和后台进程的等待事件直方图,这些进程分为 32 个分区,从 1 微秒到超过 16 秒不等。 查找等待事件,并确定较大等待时间分区内的等待事件是否过多。等待事件过多或每次等待时间过长可能会出现问题。
其他统计信息 预写式日志 (WAL) 统计信息 WAL 统计信息摘要。 如果同步时间过长,请调整相关数据库标志 (GUC) 以改善工作负载。GUC 是用于处理服务器配置的 PostgreSQL 子系统。
摘要统计信息(跨所有数据库) 快照时间间隔内发生的所有数据库操作的摘要。 不适用
参数设置 参数设置 快照结束时间的关键 Postgres 配置参数。 检查 GUC 参数设置(Postgres 数据库标志),确定这些值是否不符合预期或不推荐使用。对于复制延迟时间较长的读取池实例,请考虑调整以下设置:
  • max_standby_streaming_delay:调整此参数可平衡查询取消频率与复制延迟。
  • alloydb.promote_cancel_to_terminate:确保此值为 on,以强制终止对取消操作和阻塞恢复无响应的后端。
  • google_storage.log_replay_throttle_read_transactions: 当延迟时间超过阈值时,使用此参数可优先考虑复制赶超,而不是读取查询延迟时间。
SQL 执行统计信息 按总耗时列出的每次查询信息(前 50 名) 列出在两次快照期间花费时间最多的前 50 个查询,以及它们的总执行次数,按发出查询的用户和数据库进行细分。
Elapsed time = Difference of total_exec_time in pg_stat_statements at the two snapshot time
您可以使用此部分来确定最占用系统时间的最繁重查询。
按读取 IO 划分的每个查询信息(前 50 个) 列出在两个快照期间花费最多读取 IO 时间的前 50 个查询,以及它们的执行次数、缓冲区命中次数、blk 读取次数(包括总数和平均数)。
ReadIO = blk_read_time + temp_blk_read_time 在两个快照期间累积
Buffer Hits = shared_blks_hit + local_blks_hit 在两个快照期间累积
Buffer Reads = shared_blks_read + local_blks_read 在两个快照期间累积
由于设置了 track_io_timing,AlloyDB Cloud 默认会跟踪这些字段。
您可以使用此部分来识别 I/O 密集型查询,尤其是在这些查询需要频繁从磁盘读取数据时。
按运行时间标准差列出的每个查询的信息(前 50 个) 列出执行时间标准差最高的前 50 个查询,并列出在开始和结束快照时间计算出的标准差。
此处的值引用自 pg_stat_statementsstddev_exec_time
如果查询的标准差较高,则表示查询执行时间变化很大,可能需要检查 I/O。

限制

  • 为避免因存储空间消耗过多而导致空间膨胀,您最多可以在一个实例上手动创建 2500 个快照。

  • 如果快照数量超过快照限制,AlloyDB 会删除超过 90 天的所有手动快照。如需保持在快照限制范围内,您必须先清理不必要的快照,然后再创建新快照。

  • AlloyDB 会定期清理超过 90 天的手动快照。

后续步骤