首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“`select *”的io吞吐量比本地磁盘中使用拼图箭头的“选择一个colmun`”快

为什么“`select *”的io吞吐量比本地磁盘中使用拼图箭头的“选择一个colmun`”快
EN

Stack Overflow用户
提问于 2022-10-10 03:27:03
回答 1查看 35关注 0票数 0

我有两个使用分割箭头的sql:

代码语言:javascript
复制
`table` has 50 column
sql1 = `select * from table`, total_data_size = 45GB
sql2 = `select value from table`, total_data_size = 30GB

我添加了io吞吐量的配置文件(是的,删除页面缓存,只看磁盘-io)。

我发现的

HDFS上的地板: sql2比sql1快,大约是sql1的1.5倍

本地磁盘上的拼板(1MB randread=130MB;1MB read=250MB):sq1比sql2快4倍,这让人困惑。

通过iostat**:** ,我想有两个原因

  1. 当执行utils=90%~100%时,io负载较高(约100~130 io/s,sql2 ),这意味着select one column更多地使用rand read,从而使io吞吐量下降。
  2. select *会缓存更多的页面缓存,虽然我在执行之前删除了页面缓存,但是命中率很高。因此,对于select *,io吞吐量实际上受益于缓存命中率。

期待你的帮助,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-10-10 07:15:52

我使用圣母舰来获得页面缓存命中率,我发现select *的命中率(50%)高于select one column(27%),因此由于页面缓存的存在,select *的io吞吐量更好。

我尝试用O_DIRECT打开以确定结论,但是它报告了errno: 22, strerror: Invalid argument,我还没有找到错误的根本原因,但是我认为页面缓存命中率是io吞吐量的根本原因。

然而,为什么select *有更高的命中率?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74009954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档