金蝶云星空---SQLserver数据中心实体过大问题分析及解决方案原创
金蝶云社区-Tony_123
Tony_123
27人赞赏了该文章 8,705次浏览 未经作者许可,禁止转载编辑于2020年11月13日 18:43:50
summary-icon摘要由AI智能服务提供

本文概述了数据库实体增至100G后的优化方法。首先需确定占用空间的是日志还是数据文件,对于日志文件过大,可通过更改恢复模式为简单并收缩日志来优化。若数据文件MDF过大,需清理系统临时表、非业务数据表及历史核算等数据。此外,还提供了针对特定大表如日志表、附件表等的优化策略,包括归档、文件服务器存储等方法。最后,提到数据库增长模式的调整及临时表的清理,同时给出了处理特定表如业务流程快照表、供应链日志表等的详细操作及升级建议。

问题:软件使用一段时间,数据库实体增到100G,如何优化

1、首先定位是什么文件占用的空间过大,是数据库日志还是数据


登录数据库管理器之后找到数据库实体文件路径存放的位置

图片.png


打开数据库存放路径----查看数据库大小 。如下图日志文件过大

图片.png


A、日志文件过大的优化方法


第一步:检查数据库的恢复模式,数据库实体名称右键-----属性----选项----恢复默认---简单

图片.png


第二步:数据库日志收缩:

图片.png


找到文件类型---切换到 日志。  可以看到可用空间情况----收缩操作选择释放未使用的空间。

图片.png



B、数据库数据 MDF文件过大 ---清理系统临时表和非业务数据表

b.1通过数据库的报表分析表磁盘占用情况分析


右键----属性---报表----标准报表----按排在前面的表的磁盘使用情况

图片.png

图片.png

根据您统计出来的结果进行信息分析,常见的几个大表说明

1、T_BAS_OPRATELOG及T_BAS_OPRATELOGBK---日志表

上机操作日志表,后者为日志归档表,记录各用户在Cloud系统中的所做的业务操作,可使用具有管理员权限的用户进入上机操作日志查看具体信息


2、T_BAS_ATTACHMENT----附件表

,如果单据附件存储选择在数据库中则此表数据会逐渐增长,建议使用文件服务器,将附件存储在文件服务器的目录下


3、T_BF_INSTANCESNAP----业务流程快照表

业务领域配置的反写规则很多,反写快照表,需要把每个反写规则的反写情况都记录下来,如果企业实际场景中这方面的业务量较多,则该表占用磁盘空间会比较大,分为自动和手动两种归档方法,具体如下:


4、其他表

1.1 核算及分配过程

不用看历史期间的核算过程,分配过程。这些表的数据都可以清理:

T_CB_COSTALLOPROREC_H

T_CB_COSTALLOPRORECEXP_H

T_CB_COSTALLOPROSEND_H

T_CB_COSTALLOPROSENDEXP_H

T_CB_EXPALLOPROCESSREC_H

T_HS_EXPENSESPROCESS_H

T_CB_EXPALLOPROCESSSEND_H


T_HS_ACCTGPROCESSENTRY_H-----核算过程明细历史表

T_BF_INSTANCESNAP-----业务流程快照表。

T_HS-EXPENSESPROCESS_H------核算日志信息

T_PLN_MTRLDSDETAILDATA------用来记录MRP运行时物料的明细数据

T_WF_TESTPROCINST-----工作流测试表


具体说明和操作参考:

参考吧唧吧唧大神:金蝶云星空数据库大表清理:https://vip.kingdee.com/article/163073


b.2、临时表清理,历史业务监控消息清理

长时间未做优化,临时表占用空间过大。

第一种方式:推荐方式使用数据瘦身功能

数据瘦身功能首次订阅,administrator登录html5 页面点击添加

图片.png


图片.png


双击数据瘦身功能自动统计出可清理的空间。

图片.png


数据瘦身功能详情参考吧唧吧唧:https://vip.kingdee.com/article/8776


第二种方法方式手工清理----参考软件优化指南,软件安装包help文件夹下

--如果临时表很多,想统计下临时表占用空间,可使用下面的语句进行统计分析:

-- 查看系统所有临时表占用的总空间

select cast(sum(a.total_pages)*8/1024 as varchar)+' MB' total        

from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id

join sys.tables it on p.object_id = it.object_id

where it.name like 'TMP%'

图片.png



SQLserver手工删临时表的方法(可在业务期间运行,推荐使用该方法删除临时表):

--第一步:删除登记表中的可删除的临时表登记记录

delete from T_BAS_TEMPORARYTABLENAME where FPROCESSTYPE=1 or FCREATEDATE<GETDATE()-1


说明:默认清理今天之前的临时表数据,如果临时表过多,可以分批清理,先清理一个月的临时表

delete from T_BAS_TEMPORARYTABLENAME where FPROCESSTYPE=1 or FCREATEDATE<GETDATE()-30。


清理临时表之后,数据库属性---可用空间会存在一个较大的值。

图片.png

按日志收缩的方式,对数据库收缩一次。


按下图勾选参数---预留一定比例的空间。执行收缩比较耗时,影响业务使用,需要在空闲时间执行。

图片.png

最后要调整数据库增长模式:

登录数据库找到对应的数据库实体,点击鼠标右键,打开属性界面,点击进入【文件】,点开自动增长后的按钮,设置增长速率为 30M.

图片.png


其他:

在数据库表磁盘分析时有其他表空间过大

1、业务流程快照表 T_BF_INSTANCESNAP归档,归档会压缩表数据,如果遇到归档速度慢,推荐升级到cloud7.5.1.202005版本下(补丁:PT-146836)。

业务流程归档详情参考:https://vip.kingdee.com/article/171524



2、供应链日志表

T_IOS_DELINNERBILLLOG(删除内部单据日志),

T_SCM_INVOKEILOG(管易接口调用日志)

通过系统的执行计划列表---供应链自动清理日志数据---定时清理,如果清理速度比较慢,推荐升级到cloud7.5.1.202010版本。专项优化了这两个日志清理速度。


不方便升级的可以手动清理,数据库执行  truncate table  + 表名。

例如: truncate table T_SCM_INVOKEILOG


3、条码日志表

T_UN_BARCODELOG 为优联条码的日志表, 可以升级到cloud7.5.1.202010(补丁:PT-146854),增加定时删除移动条码日志表单(定时)清理日志,升级之后,系统会自动保留一周的日志记录。

也可手动清理。



如果以上方案未能将数据瘦身,业务数据表可以清洗历史数据,将当前的表数据进行清洗和拆分,需要专项服务数据分拆,参考 https://vip.kingdee.com/questions/2438/answers/2368




图标赞 27
27人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!