关于KingbaseES临时文件过大问题
背景
前几天碰到一个问题,现场并发很高,数据量很大(6T),主备库经常出现临时文件过多。
临时文件概念:
当私有进程buffer不够用时,会将buffer内容dump到tempfile供数据库正常sql使用。常见的几个功能场景:ExecSorts、ExecHashJoin、ExecMergejoin、tempTable、CTE等,当work_mem或者是temp_buffers不足以容纳sql中间功能环节结果集时会产生tempfile。
通过work_mem可以设置会话Query使用的临时内存的阈值,当然一个Query中如果使用了大量并行的排序等操作时,或者使用了并行计算多个WORKER PROCESS时,可能用到多个WORK_MEM空间,那么内存的使用量会比较大。
注意,临时表与Query执行过程中使用的临时文件概念不同,包括我们后面提到的几个临时文件使用跟踪的参数,实际上跟踪的都是Query执行过程中产生的临时文件,而不是临时表。请注意。
在控制临时文件使用量,使用个数的参数上,控制的也是Query执行过程中产生的临时文件,并不会控制临时表使用多少文件。
Query使用临时文件相关
限制一条个backend process最多能使用多少临时空间,通常临时空间在事务结束、Query结束后会自动回收。
包括数据库启动时,也会自动清理临时文件。
#temp_file_limit = -1 # limits per-process temp file space
# in kB, or -1 for no limit
1、temp_file_limit (integer)
指定进程可用于临时文件的最大磁盘空间量,例如排序和哈希临时文件,或用于保留光标的存储文件。试图超过此限制的交易将被取消。该值以KB为单位指定,而-1(默认值)表示没有限制。只有超级用户可以更改此设置。
此设置限制给定Kingbase进程使用的所有临时文件在任何时刻使用的总空间。应该注意的是,用于显式临时表的磁盘空间,与查询执行中后台使用的临时文件不同,不计入此限制。
这个参数作用可以避免操作系统磁盘空间被临时文件占用过多。
当临时文件使用量大于设置阈值时,记录日志。
#log_temp_files = -1 # log temporary files equal or larger
# than the specified size in kilobytes;
# -1 disables, 0 logs all temp files
2、log_temp_files (integer)
控制临时文件名和大小的日志记录。可以为排序、哈希和临时查询结果创建临时文件。删除每个临时文件时,会为其创建一个日志条目。值为零记录所有临时文件信息,而正值仅记录大小大于或等于指定KB数的文件。默认设置为-1,这将禁用此类日志记录。只有超级用户可以更改此设置。
例如,把log_temp_files设置成0 ,就会针对需要到临时空间的sql记录日志。
3、work_mem (integer)
指定内部排序操作和哈希表在写入临时磁盘文件之前要使用的内存量。该值默认为4MB。请注意,对于复杂的查询,可能会并行运行多个排序或哈希操作;在开始将数据写入临时文件之前,将允许每个操作使用此值指定的内存量。此外,几个正在运行的会话可以同时执行此类操作。因此,使用的总内存可能是work_mem值的许多倍;在选择值时,有必要牢记这一事实。排序操作用于ORDER BY、DISTINCT和merge联接。哈希表用于哈希联接、基于哈希的聚合和子查询中基于哈希的处理。
最后需要说明,虽然增大work_mem可以避免过多临时文件,但是如果查询并发过大有可能造成内存溢出的严重后果。
相关参数
临时表相关
前面提到临时表和Query使用临时文件不相干。
#temp_buffers = 8MB # min 800kB
1、temp_buffers (integer)
设置每个数据库会话使用的最大临时缓冲区数。这些是会话本地缓冲区,仅用于访问临时表。默认值为8MB。设置可以在单个会话中更改,但只能在会话中首次使用临时表之前更改;随后更改该值的尝试将不会对该会话产生影响。
会话将根据需要分配临时缓冲区,直至达到temp_buffers缓冲区给定的限制。在实际上不需要许多临时缓冲区的会话中设置一个大值的成本仅为一个缓冲区描述符,即temp_buffers缓冲区中的每一增量约64个字节。但是,如果实际使用了缓冲区,则会为其消耗额外的8192字节(或者通常为BLCKSZ字节)。
#temp_tablespaces = '' # a list of tablespace names, '' uses
# only default tablespace
总结
当进行一些Query的操作,使用的内存量大于work_mem指定阈值时,就会触发使用临时文件。包括排序,IDSTINCT,MERGE JOIN,HASH JOIN,哈希聚合,分组聚合,SRF,递归查询 等操作。
通过设置 log_temp_files ,当会话使用临时文件大小超过了设置大小,就可以跟踪到临时文件的使用。
关于KingbaseES临时文件过大问题的更多相关文章
- PHPExcel解决内存占用过大问题-dw 查找memoryCacheSize把1M改为2048M
http://blog.sina.com.cn/s/blog_4ec7952d0101fcrd.html PHPExcel解决内存占用过大问题-设置单元格对象缓存 PHPExcel是一个很强大的处理E ...
- PHPExcel解决内存占用过大问题-设置单元格对象缓存
PHPExcel解决内存占用过大问题-设置单元格对象缓存 PHPExcel是一个很强大的处理Excel的PHP开源类,但是很大的一个问题就是它占用内存太大,从1.7.3开始,它支持设置cell的缓存方 ...
- 如何充分利用KingbaseES日志
作为现代关系数据库中,KingbaseES带有许多用于微调的参数.需要考虑的领域之一是KingbaseES应该如何记录其活动.日志记录在Kingbases数据库管理中经常被忽略,如果不被忽略,通常会被 ...
- KingbaseES OOM 可能原因汇总
背景 不久前,遇到过一个问题.KingbaseES数据库主机系统触发OOM现象是数据库进程被KILL, 数据库进入crash然后restart(when restart_after_crash=on) ...
- KingbaseES的表空间
表空间的概念 KingbaseES中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置.实际上表空间就是给表指定一个存储目录. 表空间的作用 通过使用表空间,管理员可以控制一个Kingba ...
- IE8,IE10下载的临时文件到哪里去了???
操作攻略: 打开IE浏览器=>工具=>Internet选项=>常规选项卡中,找到"浏览历史记录"=>设置,然后就可看到"当前位置"所列出 ...
- SQLite剖析之临时文件、内存数据库
一.7种临时文件 SQLite中,一个数据库由单个磁盘文件构成,简化了SQLite的使用,因为移动或备份数据库只要拷贝单个文件即可.这也使得SQLite适合用作应用程序文件格式.但是,当在单个文 ...
- Apache Spark技术实战之8:Standalone部署模式下的临时文件清理
未经本人同意严禁转载,徽沪一郎. 概要 在Standalone部署模式下,Spark运行过程中会创建哪些临时性目录及文件,这些临时目录和文件又是在什么时候被清理,本文将就这些问题做深入细致的解答. 从 ...
- windows API 创建临时文件
创建完临时文件后,即可用C\C++标准函数写入.读取,也可以用API.MFC方法来操作. TCHAR szPathName[MAX_PATH]; TCHAR szFileName[MAX_PATH]; ...
随机推荐
- Event Loop我知道,宏任务微任务是什么鬼?
在介绍宏任务和微任务之前,先抛出一个问题.相信大家在面试的时候,会遇到这样的相似的问题: setTimeout(function(){undefined console.log('1') }); ne ...
- SAP - 拆包,组件入库
场景: 一个成品商品,例如汽车,有很多零部件:车轮,框架,发动机等.以整体形式发货过账,在遇到质量问题客户退货情况,需要把汽车拆开,然后零部件退回到库(按照BOM结构拆卸). MB1A/MIGO:发货 ...
- FTP安装及使用
通过网络传输数据的手段 1. ssh 2. http 3. nfs 4. rsync 5. ftp 6. samba ftp的简介: 1. ftp是应用层协议,是基于TCP 2. 使用21端口 FTP ...
- vmware修改虚拟机网卡mac地址
选中"虚拟机" 右键 "设置",然后选中"网络适配器",然后点击"高级",设置"MAC地址"
- Consider defining a bean of type 'redis.clients.jedis.JedisPool' in your configuration.
报错信息 原因是没有Jedispool没有注入 import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml ...
- 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的
☞☞☞ 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的 ☜☜☜ ○○○○○○○○○○○○○○○ 大家好,又见面了~ kafka作为一种高吞吐量的分布式发布订阅消息系统,在业务系统中被广泛 ...
- 利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率
一.目的 (1)在固定节点个数的前提下,仿真求得使网络保持连通的最小通信半径(最低能级). (2)在上述节点个数和通信半径的前提下,计算随机布撒的节点的覆盖率. 二.方法描述 (1)首先假设通信半径都 ...
- java的elasticsearch做高亮显示
import org.apache.commons.lang3.reflect.FieldUtils;import org.elasticsearch.action.search.SearchResp ...
- APISpace 绕口令API接口 免费好用
绕口令又称急口令.吃口令.拗口令等.是一种民间传统的语言游戏 ,由于它是将若干双声.叠韵词或发音相同.相近的语.词有意集中在一起,组成简单.有趣的语韵,要求快速念出,所以读起来使人感到节奏感强,妙趣横 ...
- C#基础语法之-泛型
泛型:一共7个知识点 1.引入泛型,延迟声明 2.如何声明和使用泛型 3.泛型的好处和原理 4.泛型类,泛型方法,泛型接口,泛型委托 5.泛型约束 6.协变,逆变 7.泛型缓存 一.为啥会出现泛型,有 ...