暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T IO优化逻辑读、顺序读和随机读

原创 章芋文 2019-09-25
1326

首先逻辑读和物理读是影响性能的重要因素。

逻辑读是指要读的数据块已经在缓存中而不需要发生实际的IO,这时主要消耗CPU;而物理读是指缓存中没有要读的数据块,需要发生实际的IO,这时消耗的主要是IO。如果一些数据经常被读取,那么就很可能在内存中命中,不需要物理读。

逻辑读和物理读的开销差距很大,因为读内存比读磁盘要快得多,一般可以快10倍以上。那么同样读取一千个数据块,如果全是物理读可能需要1分钟,而如果全是逻辑读则可能只需要几秒钟。这也是为什么同样的语句,第一次执行往往比第二次执行慢的原因了。


IO是最消耗资源的,减少IO的次数是有效的性能调优方法,那么哪些方法可以减少IO的消耗呢?

合理的业务需求:

如果每次查询都要把一个千万级的表统计一遍,那必然带来大量的IO,即使是逻辑读也是非常影响性能的。


多块读

如果操作系统的缓存比较大,而且要读取的数据块是相邻的,那么就可以使用多块读,即一次IO读取多个数据块,这样可以减少IO的消耗。

对表做全表扫描是可以使用多块读的,因为表每次申请的空间(extent)都是连续的,而普通的索引扫描就不适合,首先索引块之间是指针相连的,而且同一个索引块中的数据在表中也不一定是连续分布的。想想查字典的例子,你应该能明白为什么通过索引访问内容不能使用多块读。

当然一次IO读取128个块的开销要比只读取1个块的开销大,但是肯定比使用128次IO小的多。


顺序读和随机读

顺序读和随机读也是一组重要概念。

顺序读比随机读的效率高的多。如果要读100条数据,它们是连续分布的,那么只要读取两三个数据块,如果是随机分布在100个数据块的,那么就要读取100个数据块。而且磁盘读写时需要转动磁头,当然是读取连续的内容效率最高

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论