达梦数据库有时执行SQL中有时报[-544]:Out of sort buf space, try to adjust SORT_BUF_GLOBAL_SIZE, SORT_BUF_SIZE, SORT_BLK_SIZE.
第一反应是这条语句占用排序区太大。但真实原因是前面执行的语句耗光了全局排序区,后面SQL任何小的排序操作都会报这个错误从而执行失败。下面是一个测试用例。参数SORT_FLAG=1,SORT_BUF_GLOBAL_SIZE=100。屏幕下方"insert into d select * from a order by 2"这条语句执行后全局排序区(VDTA POOL)由空涨到了110(实际分配往往会大于参数)。而后又执行了一条需要排序的语句,结果报排序区:Out of sort buf space。
值得说明地是,排序空间不足只会导致后续语句执行报错。正在排序的语句不受影响。内存不足时,排序操作将使用磁盘(查询v$mtab_used_history视图)。执行完毕排序区得以释放,后续排序语句恢复正常。