Oracle索引、查询相关问题求教!!

[复制链接]
查看11 | 回复9 | 2016-4-21 14:08:53 | 显示全部楼层 |阅读模式
先给大家描述一下现况:
现在有一个表,存放最近7天的数据,每天大概400万的数据量,采用的表分区的模式。每天晚上删除7天之前的分区,新建明天的。表上建的全局索引,每次一删除分区就会失效,所以又写了个job定时扫描失效的索引,发现之后就进行重建。重建索引又会引起线程死锁,又写了个清理线程的job,每个小时执行一次,清理连接超过一个小时的session。
现在的问题是每天最开始的前几次的登陆和查询会很慢,平时用的时候偶尔也会很慢。
想问问大家有没有什么办法能解决这个问题,或者有其他更好的建索引的方案也行。

回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
你怎么清理分区数据,加一下UPDATE GLOBAL INDEXES
ALTER TABLE 表名 truncate PARTITION 分区表UPDATE GLOBAL INDEXES PARALLEL 16;
回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
abao2000521 发表于 2015-7-3 11:04
你怎么清理分区数据,加一下UPDATE GLOBAL INDEXES
ALTER TABLE 表名 truncate PARTITION 分区表UPDATE ...

表分区是直接drop掉的,才引起的索引失效
回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
1、不建全局索引,改本地索引。
2、分别生成慢时和快时的ASH报告(报告时间范围在10分钟以内),看看能否定位慢的原因。
回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
drop掉就不要用全局索引啊.这样维护索引的代价太大。
回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
abao2000521 发表于 2015-7-3 11:22
drop掉就不要用全局索引啊.这样维护索引的代价太大。

那是要用局部索引吗局部索引的话 如果查询的数据跨天的话还会起作用吗分区列上要建索引吗
回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
1天一个分区有必要吗?
回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
bfc99 发表于 2015-7-3 11:22
1、不建全局索引,改本地索引。
2、分别生成慢时和快时的ASH报告(报告时间范围在10分钟以内),看看能否定 ...

本地索引的话对于跨分区的查询会有影响吗?如果有分区列和其他字段的符合索引应该怎么处理
回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
winerr 发表于 2015-7-3 11:37
1天一个分区有必要吗?

用分区的方式是为了让这个表只保存最近七天的数据,处理的时候比较方便
回复

使用道具 举报

千问 | 2016-4-21 14:08:53 | 显示全部楼层
hebeixmg 发表于 2015-7-3 11:38
本地索引的话对于跨分区的查询会有影响吗?如果有分区列和其他字段的符合索引应该怎么处理

1、跨分区查询的话,会有影响,性能上要比全局索引差,但差多少,要根据具体的数据来评判。不过,我感觉仅7个分区而言,不会差到哪里去。
2、在建本地索引时,是否需要把分区键所在的列加上(通常位于构成索引的列顺序中的第一位),建议在实际的环境(或是测试环境)中评估一下。我认为对于本地索引而言,可以不加,这样索引更小,访问和检索时的代价更小。
3、总之,分区后,一个需要特别注意的地方就是访问相关表的SQL代码的WHERE条件中,一定要有分区键列的条件,不然,分区的优势将无从发挥。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行