SORT_FLAG=0 SORT_BUF_SIZE=20
执行一段排序SQL,需要占用1G+的内存来排序
select * from LOG_COMMIT order by SESS desc;
排序过程中,查看V$MEM_POOL该会话的内存信息,这内存不止用了20MB。
查看临时表空间,使用量从70MB上升到649MB:
我想问的是排序会话占用的内存超过SORT_BUF_SIZE=20MB,是正常的么?有没有个上限,不会突然上升几百MB之类的吧
当SORT_FLAG=0时使用传统排序机制。传统机制下,每个会话会分配SORT_BUF_SIZE大小的本地排序区。如果排序数据超过这个大小,就会使用临时表空间。当SORT_FLAG=0时,使用临时表空间是正常现象,尤其是在处理大数据量的排序时。对于生产环境建议设置TEMP_SPACE_LIMIT参数限制临时表空间上限,避免磁盘空间耗尽,一般情况建议会设置100GB。
当SORT_FLAG=0时使用传统排序机制。传统机制下,每个会话会分配SORT_BUF_SIZE大小的本地排序区。如果排序数据超过这个大小,就会使用临时表空间。当SORT_FLAG=0时,使用临时表空间是正常现象,尤其是在处理大数据量的排序时。对于生产环境建议设置TEMP_SPACE_LIMIT参数限制临时表空间上限,避免磁盘空间耗尽,一般情况建议会设置100GB。