33人参与 • 2025-12-26 • MsSqlserver
此篇详细解释一下 postgresql 中 pg_stat_database 视图里的 tup_returned 字段的含义。
tup_returned 字面意思是 “返回的元组数”。
这里的“元组”可以通俗地理解为 数据表中的一行。
因此,tup_returned 统计的是 从数据库中读取到的行数。
select * from table_name 查询,返回了 100 行,那么这 100 就会被累加到 tup_returned 中。update table_name set column = value 语句,它需要先找到所有要更新的行(类似于一个 select),假设它匹配了 50 行,那么这 50 行也会被累加到 tup_returned 中,即使它最终更新了这些行(更新操作本身由 tup_updated 统计)。delete 语句在删除前也需要先找到这些行,所以找到的行数也会计入 tup_returned。pg_stat_database 视图中的这个值,是该 postgresql 集群中 单个数据库 的累计值。它包含了该数据库内所有表、所有查询所返回的行数总和。tup_fetched 的区别:pg_stat_database 中,还有一个容易混淆的字段叫 tup_fetched。tup_returned: 主要由 顺序扫描 返回的行数。当数据库没有使用索引,需要全表扫描来查找数据时,读取的每一行都计入此项。tup_fetched: 主要由 索引扫描 返回的行数。当数据库通过索引查找到数据行时,通过索引“获取”到的每一行都计入此项。tup_returned ≈ 顺序扫描读到的行数tup_fetched ≈ 索引扫描读到的行数tup_returned 是一个非常重要的宏观性能指标:
tup_returned 和 tup_fetched,可以判断数据库的查询效率。tup_returned 的值远高于 tup_fetched,说明有大量的查询正在进行全表扫描,这可能意味着 缺少合适的索引。tup_fetched 会远大于 tup_returned,因为大部分查询都应该通过索引来快速定位数据。可以通过以下 sql 语句查看所有数据库的统计信息:
select
datname as database_name,
tup_returned,
tup_fetched,
tup_inserted,
tup_updated,
tup_deleted
from
pg_stat_database;
结果解读:
假设看到某个数据库的 tup_returned 是 10,000,000,而 tup_fetched 是 500,000。这强烈暗示该数据库中存在效率低下的全表扫描查询,应该去检查一下慢查询日志,并为频繁查询的字段添加索引。
| 特性 | 说明 |
|---|---|
| 中文名 | 返回的元组数 |
| 本质 | 从数据库中读取到的行数(累计值) |
| 主要来源 | 顺序扫描(全表扫描) |
| 对比指标 | tup_fetched(主要来自索引扫描) |
| 主要用途 | 评估数据库负载、分析查询效率(判断是否缺少索引) |
简单来说,tup_returned 就是一个说明“数据库自从启动以来,总共读取了多少行数据”的计数器。它是一个非常重要的、用于宏观性能分析和诊断的指标。
到此这篇关于postgresql 中 pg_stat_database 视图的 tup_returned 字段的含义详解的文章就介绍到这了,更多相关postgresql pg_stat_database tup_returned 字段内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论