现象
Trafodion中执行大数据集的加载或基于大数据集创建索引等情景下,有时会报以下错误,
*** ERROR[10007] Sort failed while writing to a scratch file with error 28. Details: SQScratchFile::executeVectorIO
分析
在执行大数据集的加载时,数据在加载到目标表前经常需要先进行排序,排序需要把中间结果写到一个临时的scratch file文件,scratch file的路径一般在数据库安装的时候指定,默认路径为 MYSQROOT/tmp。如果数据集很大,默认的 MY_SQROOT/tmp空间可能不足,因此需要修改scratch file文件路径。
解决
以下/data1,/data2,/data3为不同的数据磁盘,每块磁盘下面均有/tmp目录,且属主为trafodion:trafodion.
- session级别
cqd scratch_dirs '/data1/tmp:/data2/tmp/:data3/tmp';
- 数据库级别
1. su – trafodion
2. cd $MY_SQROOT/etc
3. vi ms.env, 修改 STFS_HDD_LOCATION=$MY_SQROOT/tmp 为STFS_HDD_LOCATION=/data1/tmp:/data2/tmp/:data3/tmp)
4. 同步ms.env到每个节点,pdcp $MY_NODES ms.env $PWD/
5. 重启数据库,sqstop; sqstart