0

我正在使用 TypeOrm 框架从 lambda 函数连接到 RDS Aurora Postgres Db。我观察到实体(具有子实体列表)的保存操作花费的时间比预期的要长。当我检查 RDS 日志时,我可以看到以下内容

2021-06-07 22:07:24 UTC INSERT INTO parent table ...... 

然后一堆像下面这样的select语句重复了N次

2021-06-07 22:07:24 UTC:172.70.80.81(9889):rdsproxyadmin@postgres:[25422]:LOG:  statement: SELECT current_setting('transaction_read_only') AS transaction_read_only, current_setting('max_connections') AS max_connections, EXTRACT(EPOCH FROM now() - pg_postmaster_start_time()) AS uptime, durable_lsn, current_read_lsn FROM aurora_replica_status() WHERE server_id = '';

    2021-06-07 22:07:24 UTC:172.70.80.81(9889):rdsproxyadmin@postgres:[25422]:LOG:  statement: SELECT current_setting('transaction_read_only') AS transaction_read_only, current_setting('max_connections') AS max_connections, EXTRACT(EPOCH FROM now() - pg_postmaster_start_time()) AS uptime, durable_lsn, current_read_lsn FROM aurora_replica_status() WHERE server_id = '';
    2021-06-07 22:07:24 UTC:172.70.80.9(49854):user@databasename:[28032]:LOG:  statement: /*pga4dash*/
        SELECT 'session_stats' AS chart_name, pg_catalog.row_to_json(t) AS chart_data
        FROM (SELECT
           (SELECT count(*) FROM pg_catalog.pg_stat_activity WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Total",
           (SELECT count(*) FROM pg_catalog.pg_stat_activity WHERE state = 'active' AND datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400))  AS "Active",
           (SELECT count(*) FROM pg_catalog.pg_stat_activity WHERE state = 'idle' AND datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400))  AS "Idle"
        ) t
        UNION ALL
        SELECT 'tps_stats' AS chart_name, pg_catalog.row_to_json(t) AS chart_data
        FROM (SELECT
           (SELECT sum(xact_commit) + sum(xact_rollback) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Transactions",
           (SELECT sum(xact_commit) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Commits",
           (SELECT sum(xact_rollback) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Rollbacks"
        ) t
        UNION ALL
        SELECT 'ti_stats' AS chart_name, pg_catalog.row_to_json(t) AS chart_data
        FROM (SELECT
           (SELECT sum(tup_inserted) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Inserts",
           (SELECT sum(tup_updated) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Updates",
           (SELECT sum(tup_deleted) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Deletes"
        ) t
        UNION ALL
        SELECT 'to_stats' AS chart_name, pg_catalog.row_to_json(t) AS chart_data
        FROM (SELECT
           (SELECT sum(tup_fetched) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Fetched",
           (SELECT sum(tup_returned) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Returned"
        ) t
        UNION ALL
        SELECT 'bio_stats' AS chart_name, pg_catalog.row_to_json(t) AS chart_data
        FROM (SELECT
           (SELECT sum(blks_read) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Reads",
           (SELECT sum(blks_hit) FROM pg_catalog.pg_stat_database WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 16400)) AS "Hits"
        ) t

最后插入到子表

2021-06-07 22:07:32 UTC INSERT INTO child_table

插入父表和子表之间有 8 秒的延迟。请帮助我理解这种行为。为什么这些选择语句被触发以及为什么它们会导致缓慢(注意:我正在使用 RDS 代理连接到数据库)

4

0 回答 0