我正在使用 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 代理连接到数据库)