首页 > 其他分享 >【YashanDB知识库】swap空间使用超大报错

【YashanDB知识库】swap空间使用超大报错

时间:2024-07-17 15:11:15浏览次数:9  
标签:YashanDB group 报错 swap c2 c1 tmp1 concat

问题描述

问题单

使用GROUP_CONCAT函数时,数据库swap表空间上涨厉害

测试用例

drop table tmp1;
create table tmp1(c1 int,c2 double,c3 varchar(500),c4 int);
 
begin
for i in 1 .. 4994196 loop
insert into tmp1 select random()*100000000,random()*5000000,'hello world test xxxxxiio','' from dual;
end loop;
commit;
end;
/
 
select c1,c2,LISTAGG(c3) value_list from tmp1 where c4 is null group by c1,c2 having to_char(LISTAGG(c3)) = '15395169080,15395169080';
-- 能出结果,(swap空间590M)
 
源表数据2百多M,这个group_concat sql使用1百多G swap空间还不够
select c1,c2,group_concat(c3) value_list from tmp1 where c4 is null group by c1,c2 having to_char(group_concat(c3)) = '15395169080,15395169080';
-- 出不来结果,swap空间越来越大,(直到128.063G,报错退出)
YAS-02025 no free space in virtual memory pool
 
select c1,c2,group_concat(c3) value_list from tmp1 where c4 is null group by c1,c2 ;
-- 能出结果,swap空间一直增大(直到33.188G,报错退出)
YAS-00103 no free block in application pool
 
select c1,c2,group_concat(c3) value_list from tmp1 group by c1,c2
-- 能出结果,swap空间一直增大(直到33.188G,报错退出)
YAS-00103 no free block in application pool
 
select c1,c2 from tmp1 group by c1,c2 ;
-- 能出结果,swap空间到一定大小停下(128M)4994196行
 
select group_concat(c3) value_list from tmp1 ;
-- 能出结果,swap空间一定大小停下(252M)
 
select * from (
select c1,c2,group_concat(c3) value_list from tmp1 where C4 is null group by c1,c2
) where to_char(value_list) = '15395169080,15395169080';

结论

  • 23.2版本尝试该问题,现象相同。

  • 确认内置函数group_concat,该函数返回lob类型,导致vm大量增长。该接口需要优化。

规避方法

可以使用listagg替换group_concat。但是如果超过8000个字节,文本会被截断。

分析代码发现,group_concat返回的是lob类型,每一个分组都会申请一个lob空间,每一个lob空间都是88K大小,测试例子有4994196分组,所以它就会申请49941968*8K大小空vm空间,大概是304.8G大小,才能跑完,导致的问题。

代码分析如下

group_concat申请VM空间流程

调用流程

group_concat

group_concat返回lob类型,每一个分组都会申请一个lob空间

string转lob时,tmpVar是源表字段数据,调用anlLobAppend给value->vLob申请lob对象空间

VM空间申请

调用流程

vmAllocAndOpen
doVmAlloc
vmAllocSwap
vmAllocExtend
spcAllocExtent
doAllocExt
spcAllocDataFileExt

申请空间:

如上unitBlocks = 8,申请8个块的空间

如下:4是swap的表文件id

VM空间扩展

调用流程

spcAllocExtent
doExtendExt
spcExtendDatafile
dfExtend
dbExtendDevice
dbBuildDeviceBlocks
writeDevice
writeFile
write

一次扩大,写64M空间,8192*8192

标签:YashanDB,group,报错,swap,c2,c1,tmp1,concat
From: https://www.cnblogs.com/YashanDB/p/18307397

相关文章

  • 【已解决】包管理器pnpm的使用,并解决pnpm报错系统禁止运行脚本
    1.node包管理器pnpm的优势磁盘空间效率:pnpm使用全局磁盘内容可寻址存储,通过硬链接和符号链接管理node_modules,从而减少磁盘空间的使用,同时保持目录的清洁。安装速度:pnpm的安装速度比npm快近2倍,这得益于其共享依赖的机制,避免了在每个项目中重复安装相同包的副本。依赖管理:pn......
  • Vue3 - 微信公众号H5网站使用微信扫一扫(微信扫码),苹果报错 {“errMsg“:“scanQRCode
    前言关于此问题网上的教程都无法解决,如果您的报错信息与我相似,即可解决。在vue3|nuxt3微信公众号网页开发中,微信移动端h5网页使用JS-SDK中的“微信扫码(微信扫一扫)”wx.scanQRCode接口,苹果ios系统真机测试时出现报错:“errMsg”:“scanQRCode:thepermissi......
  • jpa报错 Failed to initialize JPA EntityManagerFactory: Unable to instantiate de
    报错2024-07-1711:18:57.558[][main]o.h.dialect.Dialect:HHH000400:Usingdialect:org.hibernate.dialect.MySQL5InnoDBDialect2024-07-1711:18:57.729[][main]tyManagerFactoryBean:FailedtoinitializeJPAEntityManagerFactory:......
  • 【YashanDB知识库】virt虚拟内存远大于res内存问题分析
    YASDB内存占用简介参数配置:默认参数配置:DBMS_PARAM高级包生成配置参数数据库内存配置,使用默认参数步骤:1、DBMS_PARAM.OPTIMIZE();//生成默认参数,使用总内存的80%2、SELECTDBMS_PARAM.SHOW_RECOMMEND()FROMdual;//查看生成的参数3、EXECDBMS_PARAM.APPLY_RECOMMEND();......
  • 麒麟sp3安装mongodb报错
    环境:OS:麒麟V10sp3db:4.4.22 [root@localhostconf]#/usr/local/services/mongodb/bin/mongod-f/home/middle/mongodb/conf/mongo.cnf/usr/local/services/mongodb/bin/mongod:errorwhileloadingsharedlibraries:libcrypto.so.10:cannotopensharedobjectfile:......
  • 一分钟解决CLIENT_PLUGIN_AUTH is required. IDEA连接数据库时报错
    CLIENT_PLUGIN_AUTHisrequired.IDEA连接数据库时报错​ 今天楼主在导入java项目时在连接数据库时IDEA报的错误为CLIENT_PLUGIN_AUTHisrequired.​ 报错如下图:经过多方排查,发现是之前下载过其他数据库,导致系统服务里已经启动了一个MySql服务​ 已经安装过小蜜蜂数据库,我......
  • 一些执行maven命令的报错
    1.mvnclean--settings./settings.xml[ERROR]Couldnotcreatelocalrepositoryat/github/workspace/repository->[Help1][ERROR][ERROR]Toseethefullstacktraceoftheerrors,re-runMavenwiththe-eswitch.[ERROR]Re-runMavenusingthe-X......
  • 2024-07-16 使用了.md文件作为路由文件来引用,在开发中能正常显示,打包的时候就报错了:Ca
    我使用了.md文件作为路由文件来引用,在开发中能正常显示,打包的时候就报错了//vite.config.ts import{defineConfig}from'vite'; importvuefrom'@vitejs/plugin-vue'; importmarkdownfrom"vite-plugin-md"; exportdefaultdefineConfig({  plugin......
  • 【YashanDB知识库】存储过程报错snapshot too old
    问题描述20231127上午客户反馈绩效系统20231125、20231126出现2次YAS-02020snapshottooold的问题,测试也有类似问题。该过程是客户新增的存储过程,目的是通过PRO_RUN_JOB作为主控,调度其他存储过程,后续不用其他调度引擎。原因分析错误信息收集分析分析存储过程报错日志,核查UN......
  • GLM-4-9B-Chat WebDemo 部署报错:ValueError: too many values to unpack
    用开源大模型食用指南self-llm项目的GLM-4-9B-ChatWebDemo部署文档部署时遇到如下错误:ValueError:toomanyvaluestounpack(expected2)Traceback:File"/root/miniconda3/lib/python3.10/site-packages/streamlit/runtime/scriptrunner/script_runner.py",line552,......