辅助账余额表新增分区后分区索引无效
所属模块系统性能
适用版本EAS 6.0, EAS 7.0.1, EAS 7.0.2及之后版本
问题描述EAS701以上客户存在辅助账余额表数据量较大引发eas总账功能慢,对辅助账余额表做过分区处理。分区时分区时段一般指定在2013年底。不少客户的管理员或金蝶的服务或实施人员对相应表做了新增分区或分离分区的处理。处理后发现该表相关的sql执行很慢。
原因分析1.由于辅助账余额表分区中包含对组织id进行hash子分区,如果新增了hash子分区或分离了子分区后,导致一个分区的数据发生分裂,而分裂的结果不管原分区的数据是否发生变化,都会导致原分区索引无效。2.对于范围或列表分区而言,即使是SPLIT包含数据的分区,只要没有真正导致数据发生变化,就不会导致索引的失效。分区时我们会设置一个最大PMAX分区,如果将最大分区SPLIT成P2和P3两个分区,其中PMAX中的所有数据都进入P2分区,而P3分区为空,这种情况下没有数据的改变,因此所有分区索引的状态都不会变为不可用。查看子分区状态(如为unusable则为分区索引存在问题):select index_name,statusfrom user_ind_subpartitions where index_name='T_GL_ASSISTBALANCE的索引名'selectindex_name,status from user_ind_partitions where index_name='T_GL_ASSISTBALANCE的索引名' ORACLE EM监控到的表象是(辅助余额表走全表扫描,分区走的全分区):SQL语句如下:
解决方法1.将分区索引创建脚本进行保存。a.打开pl/sql developer工具b.新建一个sql window,输入t_gl_assistbalance,鼠标在表处右击鼠标,选择view:
选择下图partition页签可以看到这个表的分区情况,点击下图的view sql,查看建分区及索引的脚本:
将下图中创建的所有索引与主键约束脚本复制到txt文件中进行保存。
2.将分区索引进行删除。a.将上面图四表中建的索引名及主键约速提取出来。b.用以下脚本进行删除: 如主键约束名为PK_GL_ASSTBAL;其它索引名为IX_GL_PAR_ASSBALASST。alter tableT_GL_ASSISTBALANCE drop constraint PK_GL_ASSTBAL cascade; --删约束同时会把主键索引删除drop index IX_GL_PAR_ASSBALASST;3.用保存的建分区索引脚本执行。现以如下脚本为例,现场需用上图四中保存的建约束、主键索引、其它索引的脚本来创建:-- Create/Recreate indexes create unique index IX_GL_PAR_ASSBALACC on T_GL_ASSISTBALANCE(FORGUNITID, FPERIODID, FACCOUNTID, FBALTYPE, FCURRENCYID, FASSISTGRPID) local;create index IX_GL_PAR_ASSBALASST on T_GL_ASSISTBALANCE(FASSISTGRPID, FORGUNITID, FPERIODID, FBALTYPE, FCURRENCYID) local;-- Create/Recreate primary, unique and foreign keyconstraints alter table T_GL_ASSISTBALANCE add constraint PK_P_ASSTBAL primary key(FORGUNITID, FPERIODID, FACCOUNTID, FBALTYPE, FCURRENCYID, FASSISTGRPID);3.调优后语句执行计划如下所示(分区表走唯一索引扫描,分区不走全分区):
关键字辅助账余额表新增分区 索引无效 总账慢
适用版本EAS 6.0, EAS 7.0.1, EAS 7.0.2及之后版本
问题描述EAS701以上客户存在辅助账余额表数据量较大引发eas总账功能慢,对辅助账余额表做过分区处理。分区时分区时段一般指定在2013年底。不少客户的管理员或金蝶的服务或实施人员对相应表做了新增分区或分离分区的处理。处理后发现该表相关的sql执行很慢。
原因分析1.由于辅助账余额表分区中包含对组织id进行hash子分区,如果新增了hash子分区或分离了子分区后,导致一个分区的数据发生分裂,而分裂的结果不管原分区的数据是否发生变化,都会导致原分区索引无效。2.对于范围或列表分区而言,即使是SPLIT包含数据的分区,只要没有真正导致数据发生变化,就不会导致索引的失效。分区时我们会设置一个最大PMAX分区,如果将最大分区SPLIT成P2和P3两个分区,其中PMAX中的所有数据都进入P2分区,而P3分区为空,这种情况下没有数据的改变,因此所有分区索引的状态都不会变为不可用。查看子分区状态(如为unusable则为分区索引存在问题):select index_name,statusfrom user_ind_subpartitions where index_name='T_GL_ASSISTBALANCE的索引名'selectindex_name,status from user_ind_partitions where index_name='T_GL_ASSISTBALANCE的索引名' ORACLE EM监控到的表象是(辅助余额表走全表扫描,分区走的全分区):SQL语句如下:
解决方法1.将分区索引创建脚本进行保存。a.打开pl/sql developer工具b.新建一个sql window,输入t_gl_assistbalance,鼠标在表处右击鼠标,选择view:
选择下图partition页签可以看到这个表的分区情况,点击下图的view sql,查看建分区及索引的脚本:
将下图中创建的所有索引与主键约束脚本复制到txt文件中进行保存。
2.将分区索引进行删除。a.将上面图四表中建的索引名及主键约速提取出来。b.用以下脚本进行删除: 如主键约束名为PK_GL_ASSTBAL;其它索引名为IX_GL_PAR_ASSBALASST。alter tableT_GL_ASSISTBALANCE drop constraint PK_GL_ASSTBAL cascade; --删约束同时会把主键索引删除drop index IX_GL_PAR_ASSBALASST;3.用保存的建分区索引脚本执行。现以如下脚本为例,现场需用上图四中保存的建约束、主键索引、其它索引的脚本来创建:-- Create/Recreate indexes create unique index IX_GL_PAR_ASSBALACC on T_GL_ASSISTBALANCE(FORGUNITID, FPERIODID, FACCOUNTID, FBALTYPE, FCURRENCYID, FASSISTGRPID) local;create index IX_GL_PAR_ASSBALASST on T_GL_ASSISTBALANCE(FASSISTGRPID, FORGUNITID, FPERIODID, FBALTYPE, FCURRENCYID) local;-- Create/Recreate primary, unique and foreign keyconstraints alter table T_GL_ASSISTBALANCE add constraint PK_P_ASSTBAL primary key(FORGUNITID, FPERIODID, FACCOUNTID, FBALTYPE, FCURRENCYID, FASSISTGRPID);3.调优后语句执行计划如下所示(分区表走唯一索引扫描,分区不走全分区):
关键字辅助账余额表新增分区 索引无效 总账慢
辅助账余额表新增分区后分区索引无效
所属模块系统性能适用版本EAS 6.0, EAS 7.0.1, EAS 7.0.2及之后版本问题描述EAS701以上客户存在辅助账余额表数据量较大引发eas总账功...
点击下载文档
本文2024-09-16 22:39:56发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-49582.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章