oracle分区两大陷阱是什么
这篇文章主要介绍“oracle分区两大陷阱是什么”,在日常操作中,相信很多人在oracle分区两大陷阱是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle分区两大陷阱是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1.个别场景不能从根本上提高查询速度
在Oracle10g时不支持自动生成分区,技术人员都是手动创建一年或者半年的分区或者当超过限制时把数据都load到最大值分区,但是一年半年过后要么出现数据无法插入或者某个分区数据剧增,这个时候出现了Oracle11g的自动分区功能,但是自动分区名称不能人为设置。如果说数据量过大或者出现跨分区查询会出现性能问题。
举个栗子:线上有一个日志储存系统,每天大概存储1000W左右的数据,支持分页排序并且按照日期查询功能(如果不排序,这个数据量对于Oracle是小ks)于是我们采用了分区+覆盖索引(如果想进一步了解.....)查询的的功能,性能稍微提升。但是一段时间后发现还是拖死系统。(因为这就是CAP问题,想从根本上解决问题,请建议公司采用nosql(habase、ELK)实现)。
如果有这样一种这样场景,工资小于等于5000,大于5000并且小于等于12000,大于12000并且小于25000,大于等于25000分别按照这些工资级别创建分区则非常高效,因为可以指定分区进行查询(` select * from TBL_OPR_CNT partition(5000_part);`),因为指定分区查询,效率直接提升。
由此得知,关系数据库效率高低,在于我们如何发挥它的长处。
2. 手动对表进行move操作,或者删除表分区会导致索引失效
在实际线上环境,常常当发现性能出现问题时,这个时候才采取分区的解决方案,但是分区表一般都是全局索引,然后直接在原表采取分区功能,用了一段时间产生了历史分区数据,然后删除了其中一部分历史分区,发现数据无法插入了。如下错误:
jdbc.exception.UncategorizedSQLException: uncategorized SQLException for SQL [insert into AUDITS(C_ID,N_PERSON_ID,C_NAME,C_CODE,C_DEPT,N_LOG_TIME,C_LOG_TYPE,C_CONTENT,C_RESULT,C_SN,N_DEPT_ID) values(?,?,?,?,?,?,?,?,?,?,?)]; SQL state [72000]; error code [1502]; ORA-01502: index 'AUDITS_PK' or partition of such index is in unusable state; caused by: ORA-01502: index 'AUDITS_PK' or partition of such index is in unusable state
采取如下方法重建索引解决处理。
select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='AUDITS_PK';
alter session set skip_unusable_indexes=false;
alter index AUDITS_PK rebuild;
commit;
3.其出现这个问题的根本原因和解决方法是什么呢?
移动或者删除表空间或者分区后,基于该table的索引会自动失效UNUSABLE;此时访问或操作该table时,会报ORA-01502异常;无论唯一还是普通索引都要通过重建解决。
解决方法:在使用表分区时尽量创建本地索引.( 例如:
create index AUDITS_PK on AUDITS(id) local;
因为id是分区键,所以这样就创建了一个有前缀的本地索引)
这样在删除分区后则索引不会出现失效问题。
到此,关于“oracle分区两大陷阱是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!