问题描述
系统三天不手工清理临时表,就会变得很卡,物料上上传的附件预览一直转圈,打不开。
分析处理过程
1、云星空执行计划列表里面的“临时表定时清理服务”,显示只有最近30分钟运行成功,每分钟执行一次的,但是在远程的过程中最近10分钟的执行成功没有显示了;
注:怀疑?!临时表堆积,导致无法一分钟执行完一次清理;上一轮没清理完就到了下一轮的清理时间了;导致直接执行失败;
2、远程查看临时表有120多G,如下图所示;
客户每天都需要手工在数据库里面执行语句清理临时表,每次都要3个小时左右。
给客户在数据库里面设置每天凌晨3点钟自动执行临时表清理语句(每次清理50个临时表),再观察;
3、综上情况,确实存在临时表堆积的情况;接下来,先进行后台语句清理临时表。
4、次日,客户早上9点在数据库执行了一次清理临时表;目前在云星空软件前台的数据瘦身界面这,统计4个小时之前的临时表,可清理的大小为0;如下图所示;
但是在数据库后台,用语句查询目前还有76G+的临时表(4个小时内产生的);如下图所示;
注:临时表大量堆积,所以导致前台执行计划里面的临时表执行计划无法执行,已手工设置为停止状态;
5、提供语句,后台执行清理临时表;在登记表清理6小时前的,显示有34万个临时表;如下图所示。
执行临时表清理语句,执行了40分钟,还没有完成;
6、手工停止掉清理语句,再次执行查询临时表数据的语句,显示还是剩下158289的临时表;如下图所示。
这个结果,相比执行清理语句之前的查询结果433365还是减少了很多了;
随后重新查询占用空间,也有大量减少,如下图所示;
再次执行清除登记表中的数量,也有大量减少,如下图所示;
综上,上一轮执行语句清理了40多分钟还是卓有成效的;
7、后面继续执行语句清理,等待多时之后,清理语句执行完成;如下图所示。
8、清理完成之后,再次查询临时表占用空间,还有14.9G;如下图所示;
临时表的数量也分别还是有15万和40万,如下图所示。
到这里为止,虽然已经清理掉了大量的临时表;但是从最后的查询结果看,一天的临时表还有14.9G,一天产生的临时表数量将近15万,这个量大的有点异常了?~!
9、每天几十万的临时表,这个量实在太大了,需要分析一下原因才行;
出于想找找大量产生临时表的原因,再次执行了如下查询;
①--10个小时产生了17万个临时表
select min(fcreatedate) , max(fcreatedate) , count (*) from T_BAS_TEMPORARYTABLENAME
②--20分钟,产生1W多临时表
select min(fcreatedate) , max(fcreatedate), count(*) from T_BAS_TEMPORARYTABLENAME where fcreatedate 〉 ' 2023-08-15 15:00:18.400'
③--查询具体某张临时表的具体结构;
sp_help 具体表名
④--显示出具体的表名,以及修改日期等字段;2秒,有88个临时表,
select top 1000 * from sys. tables where create_date > '2023-08-15 15:00:18.400’ order by create_date
需分析一下,这短暂时间,产生大量临时表的情况?
看这些表的表结构是不是一样的?
从结果和字段,值来判断,是那个业务的?
⑤--查询具体临时表的结构、字段;
从上述查询结果,初步判断是物料的;怀疑是有设置什么分配的策略,数据有问题,导致了不断执行的问题?
最终:这个提单转到业务领域研发分析。
研发答复是:产生的临时表都是物料分配产生的大量的分配临时表,目前客户配置了基础资料物料的自动分配,应该是这个功能产生的。
推荐阅读