关于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]; ...
随机推荐
- 全新升级的AOP框架Dora.Interception[6]: 实现任意的拦截器注册方式
Dora.Interception提供了两种拦截器注册方式,一种是利用标注在目标类型.属性和方法上的InterceptorAttribute特性,另一种采用基于目标方法或者属性的调用表达式.通过提供的 ...
- UiPath循环活动Do While的介绍和使用
一.Do While的介绍 先执行循环体, 再判断条件是否满足, 如果满足, 则再次执行循环体, 直到判断条件不满足, 则跳出循环 二.Do While在UiPath中的使用 1. 打开设计器,在设计 ...
- IntelliJ IDEA 项目文件旁边都有0%classes,0% lines covered
IntelliJ IDEA 项目文件旁边都有0%classes,0% lines covered,解决方法:http://yayihouse.com/yayishuwu/chapter/2247
- 求求你们,别再刷 Star 了!这跟“爱国”没关系!
这几年,随着几大互联网公司的强大,纷纷投入云计算产业的建设,开源项目作为维护潜在客户群体(开发者)的重要手段,是各大云计算厂商都在努力做的事. 这几年也诞生了很多真正优秀和看似优秀的开源项目.真正优秀 ...
- NC14247 Xorto
NC14247 Xorto 题目 题目描述 给定一个长度为 \(n\) 的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为 \(0\) . 输入描述 第一行一个数 \(n\) 表示 ...
- idea 内置tomcat jersey 跨服务器 上传文件报400错误
报错内容 com.sun.jersey.api.client.UniformInterfaceException: PUT http://.jpg returned a response status ...
- Josephus问题(Ⅱ)
题目描述 n个人排成一圈,按顺时针方向依次编号1,2,3-n.从编号为1的人开始顺时针"一二"报数,报到2的人退出圈子.这样不断循环下去,圈子里的人将不断减少.最终一定会剩下一个人 ...
- MyBatis-通用Mapper-tk.mybatis的使用
MyBatis-通用Mapper[更新中] tk.mybatis的使用 前言 使用MyBatis开发,如果是普通是同MyBatis进行开发,那么就需要在xml文件中编写大量的SQL.当数据库表结构发生 ...
- 一些JS库汇总
作者:wlove 链接:https://www.zhihu.com/question/429436558/answer/2348777302 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...
- git diff与linux diff的输出格式之unified format
前言 前面有一篇文章<一个有些意思的项目--文件夹对比工具(一)>,里面简单讲了下diff算法之--Myers算法. 既然是算法,就会有实现,比如git diff中有Myers的实现,gi ...