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

flush 缓存对inmemory有什么影响?

原创 薛晓刚 2023-02-21
264

首先我们模拟写入1000万数据。图1这个由于我存储过程中写了一些运算,所以以每秒不到5000条的速度写入,这个性能未达到最佳。


                                                       图1 

我们的表是无主键无索引。如下面连续3副图。




我们来看一下全表查询的消耗。1000万需要2秒。因为大量读取了磁盘IO。


                                                           图2

再一次执行这句,只要470毫秒,0.47秒完成。因为都在缓存处理了,所以没有physical reads磁盘读,只有一致性读。


                                                           图3

当我换了一列的适合这是是count(a)而不是count(*).那么还是产生了一些磁盘读。如图4


                                                                                     图4

我再SUM一下a列,全是一致性读,没有磁盘读。如图5


                                                                                         图5

对a列做其他的聚合,效果一样。如图6


这个时候我们把缓存清掉。再查询。如图7,会发现physical reads多了,而且执行的时间也到1.7秒,慢了很多。因为清除缓存重新加载需要时间。


                                                                                         图7

打开inmemory,设置参数3G,并且开启多个进程加载。如图8


                                                                                图8

把xxg的表加载到inmemory中去。如图9


                                                                                图9

然后再次执行全表聚合。780毫秒完成。一致性读只有9了。比起之前的5万多,可以说忽略不计。如图10


                                                                                            图10

换其他列,发现也是如此。如图11


                                                                              图11

这个时候最好收集一下统计信息,如图12


                                                                                   图12

然后做极值函数的测试。如图13  14。可以看出max min都很稳定20毫秒(全表无索引的情况下)  统计信息的rows也准了。


                                                                                          图13



                                                                                      图14

然后这个时候去count这个表,全表。如图15也只有20毫秒。和之前图2的全磁盘2秒,图3的全内存470毫秒都是较大的提升。图2和图3都没有使用inmemory,也没有收集统计信息。


                                                             图15

这个时候也像刚才一样清空缓存如图16.会发现重新执行inmemory表的聚合,这里是count c列也会产生磁盘读,但是是48,比起原来没有inmemory清空缓存的5万多来说,也可以说忽略不计了。


                                                                         图16

这个时候去count其他列这里是count a列,如图17。1000万单表的聚合是10-20毫秒。所以1亿的单表聚合也在1秒左右这都是正常的。


                                                                                图17

小结:刷新缓存对传统来说有较大影响,对加载到inmemory的表影响很小。

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

评论