人大金仓数据库临时文件介绍

47 阅读2分钟

关键字:

KingbaseES、临时文件、外排序

1.什么是临时文件?

当数据库执行sql命令时,如果在进行内部排序或哈希时可用内存不足就会生成临时文件,尤其当执行诸如大表聚合、连接这样耗费内存的操作时生成临时文件的概率比较大,由于临时文件在sql命令执行结束后会被销毁,因此想要看到临时文件最好使用gdb对BufferFileClose函数打断点。临时文件只会在syssql_tmp目录下生成,该目录在没有指定临时表空间的情况下会在base目录下生成,而在指定临时表空间后该目录会在临时表空间下生成。

临时文件是数据库在进行花费大量内存的操作时不可或缺的一部分,为了保证执行效率数据库的大部分操作都会使用内存代替临时存储,仅仅当内存不足时使用临时文件,临时文件会在数据库操作执行并且内存不足时在临时表空间被创建,在数据库操作结束后被销毁,当进行排序、HASH JOIN、聚合等操作时用到临时文件的概率比较高,临时文件通常存储对表查询的中间结果集。

2.临时文件的生成方式

临时文件与conf文件中的变量work_mem的值的大小息息相关,当数据库进行运算时,中间结果通常会被缓存在tuplestore中,当在tuplestore中缓存的结果的大小超过了work_mem参数的预定值的时候,数据库就会使用临时文件来存储执行sql命令时产生的中间结果,比如在大表排序时数据库就会使用临时文件,并且在排序时会使用多路归并算法进行外排序。

临时文件属于BufferFile模块,该模块定义了操作临时文件的所有过程,该模块的设计将在下一文档中介绍。

更多信息,参见help.kingbase.com.cn/v8/index.ht…