SORT_FLAG=0,使用传统排序的情况下,SORT_BUF_SIZE=100,是说每个会话进行排序时候,最大的内存使用量,那会话数量如果非常多的话,这个排序内存的总量能限制住么?
SORT_FLAG=1,使用新排序的情况下,SORT_BUF_GLOBAL_SIZE=30000,SORT_BLK_SIZE=3,这个SORT_BUF_GLOBAL_SIZE=30000就是排序的内存上限了吧。那每个会话分配多少排序内存啊,是按需申请么?也有可能单个会话申请到30000的排序内存?那样别的排序会话,是不是就执行不了,线程等待了? 而且新排序的情况下,参数SORT_BUF_SIZE是不是就没有 用处了
是这个意思,默认情况下,当SORT_FLAG=0时,没有内存上限,超过缓冲区就会进行刷盘使用磁盘排序,不会增加内存使用。SORT_FLAG=1时,申请到内存上限SORT_BUF_GLOBAL_SIZE,其他会话排序时就会因为排序区内存不足执行失败。

同时新增了自适应排序区的功能,设置SORT_ADAPTIVE_FLAG可以对排序大小进行预估,以图更好的分配排序内存,不过仍然是以上面两种排序思想为核心。