我有两个使用分割箭头的sql:
`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**:** ,我想有两个原因
select one column更多地使用rand read,从而使io吞吐量下降。select *会缓存更多的页面缓存,虽然我在执行之前删除了页面缓存,但是命中率很高。因此,对于select *,io吞吐量实际上受益于缓存命中率。期待你的帮助,谢谢!
发布于 2022-10-10 07:15:52
我使用圣母舰来获得页面缓存命中率,我发现select *的命中率(50%)高于select one column(27%),因此由于页面缓存的存在,select *的io吞吐量更好。
我尝试用O_DIRECT打开以确定结论,但是它报告了errno: 22, strerror: Invalid argument,我还没有找到错误的根本原因,但是我认为页面缓存命中率是io吞吐量的根本原因。
然而,为什么select *有更高的命中率?
https://stackoverflow.com/questions/74009954
复制相似问题