本文概述了数据库实体增至100G后的优化方法。首先需确定占用空间的是日志还是数据文件,对于日志文件过大,可通过更改恢复模式为简单并收缩日志来优化。若数据文件MDF过大,需清理系统临时表、非业务数据表及历史核算等数据。此外,还提供了针对特定大表如日志表、附件表等的优化策略,包括归档、文件服务器存储等方法。最后,提到数据库增长模式的调整及临时表的清理,同时给出了处理特定表如业务流程快照表、供应链日志表等的详细操作及升级建议。
问题:软件使用一段时间,数据库实体增到100G,如何优化
1、首先定位是什么文件占用的空间过大,是数据库日志还是数据。
登录数据库管理器之后找到数据库实体文件路径存放的位置
打开数据库存放路径----查看数据库大小 。如下图日志文件过大
A、日志文件过大的优化方法
第一步:检查数据库的恢复模式,数据库实体名称右键-----属性----选项----恢复默认---简单
第二步:数据库日志收缩:
找到文件类型---切换到 日志。 可以看到可用空间情况----收缩操作选择释放未使用的空间。
B、数据库数据 MDF文件过大 ---清理系统临时表和非业务数据表
b.1通过数据库的报表分析表磁盘占用情况分析
右键----属性---报表----标准报表----按排在前面的表的磁盘使用情况
根据您统计出来的结果进行信息分析,常见的几个大表说明
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 页面点击添加
双击数据瘦身功能自动统计出可清理的空间。
数据瘦身功能详情参考吧唧吧唧: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%'
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。
清理临时表之后,数据库属性---可用空间会存在一个较大的值。
按日志收缩的方式,对数据库收缩一次。
按下图勾选参数---预留一定比例的空间。执行收缩比较耗时,影响业务使用,需要在空闲时间执行。
最后要调整数据库增长模式:
登录数据库找到对应的数据库实体,点击鼠标右键,打开属性界面,点击进入【文件】,点开自动增长后的按钮,设置增长速率为 30M.
其他:
在数据库表磁盘分析时有其他表空间过大
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