1999 VALUES LESS THAN (20000101),
PARTITIONP_GREATER_THAN_20120101 VALUES LESS THAN (MAXVALUE)
);
创建索引后采用MapReduce方式对出生日期按照年的方式导出数据,读的速度加快很多。
7. 确保两张表的所有字段,特别是索引字段为同一数据类型
这个经过检查可以确认对应字段全部一致。
8. 尝试晴空内存空间(Shared Pool),然后看执行计划及消耗的内存/CPU量
alter system flush shared_pool;
alter system flush buffer_cache;
9. 避免重复语句解析(Parse)
这里Java代码中执行语句中RYID是采用参数传入的方式,所以避免了重复语句解析的状况出现。
10. 增加PGA参数看看效果
监控PGA的视图:v$sql_workarea_active、v$sql_workarea、v$sesstat、v$process、v$sysstat、v$sql_workarea_histogram等。
使用下面的视图查看Oracle建议的评估设置:
Select pga_target_for_estimate/1024/1024 ||'M' "Estimate PGA Target"
,estd_pga_cache_hit_percentage "CacheHit(%)"
,estd_extra_bytes_rw/1024/1024 ||'M'"Extra Read/Write"
,estd_overalloc_count "Over alloccount"
From v$pga_target_advice
选出的4个列中,Over alloc count指示Oracle SQL工作区内存分配的三种情况:optimal完全可以在内存中完成操作;onepass需要进行一次磁盘交换;multipass需要进行多次磁盘交换。第四列的值就是需要进行磁盘交换的数量。
PGA_AGGREGATE_TARGET的值最好选择: Over alloc count为0、Cache Hit(%)尽可能高、Extra Read/Write尽可能低的Estimate PGA Target值。
l PGA_AGGREGATE_TARGET参数用以在PGA自动管理模式下,设置所有用户会话对PGA内存的使用限制,也就是说,PGA在自动管理模式下,能够妥善地利用PGA的内存空间。而对于需要大量内存空间来进行运算的SQL语句来说,Oracle能够优先分配足够的空间,并尽量将其作业保持在Optimal Size类型的工作区域中以增加效率,PGA_AGGREGATE_TARGET的大小范围是10 MB至4 GB。
联机事务处理系统(On-LineTransaction Processing System,OLTP)公式为:PGA_ AGGREGATE_TARGET = (物理内存大小* 80%) * 20%。
而决策支持系统(DecisionSupport Systems,DSS)的公式为:PGA_AGGREGATE_ TARGET = (物理内存大小* 80%) * 50%。
ALTER SYSTEM SET pga_aggregate_target=1024M;
l 设置数据高速缓冲区大小
ALTER SYSTEM SET db_cache_size=1024;
l 设置共享池大小
ALTER SYSTEM SET shared_pool_size=1024;
l 设置Java池大小
ALTER SYSTEM SET java_pool_size=1024;
l 设置大型池大小
ALTER SYSTEM SET large_pool_size=1024;
l 设置SGA内存总和
ALTER SYSTEM SET sga_target=1024;
11. 查看Redo_Log文件块
重做日志文件块过多也会造成系统性能下降,可以通过以下语句查找重做日志文件,
select * fromv$logfile order by GROUP#;
如果需要清除重做日志文件组,可以使用以下语句:
alter databaseclear logfile group 2;该语句会清除文件组2的日志文件内容
12. 分区表技术介绍
请根据项目的实际情况选择采用哪种分区技术实践
l 范围(Range)分区,按一张表指定的一个字段值或多个字段值的范围进行分区,一般适用于按时间周期进行数据的存储,缺点是字段记录值变动太多的话将导致记录在分区之间移动太频繁,影响性能。
l 哈希(Hash)分区,是指Oracle通过一个内部的Hash散列算法,以分区字段值为输入,进行散列运算,返回一个分区值,最后自动将记录插入到该分区。最大的特点是记录被Oracle均匀分布到各分区。适合于静态数据。
l 列表(list)分区,通过对分区字段的散列值进行分区,或者说以枚举方式进行分区。该分区是不排序的,而且分区之间没有关联关系,另外,只支持单个字段。与范围分区的差别在列表分区是按记录的离散值进行分区的,适用场景和优缺点完全一致。
l 间隔(Interval)分区,通过该分区技术,用户可指定时间间隔,例如假设按月进行分区,则Oracle在每个新月到来时,自动创建该月的分区,免去了DBA此方面的管理工作。
l 基于虚拟列(VirtualColumn-Based)的分区技术,支持在字段函数基础上进行分区,例如to_char,substr这些函数。
l 引用(Reference)分区技术,支持通过外键直接管理子表的分区。
l 系统(system)分区,允许应用程序控制写入记录到哪个分区。
13. 对索引进行碎片分析,如果需要则整理
l 查表的索引及状态
select *from USER_INDEXES where table_name = 'HZCZRK_JBXXB'
l 2. 开启Oracle索引监控
ALTERINDEX SYS_C0010867 MONITORING USAGE
l 3. 执行sql语句
l 4. 关闭Oracle索引监控
ALTERINDEX SYS_C0010867 NOMONITORING USAGE
l 5. 查看索引是否有被使用
SELECT *FROM V$OBJECT_USAGE;
l 6. 索引碎片分析
ANALYZEINDEX SYS_C0010867 VALIDATE STRUCTURE ONLINE;
SELECTNAME,DEL_LF_ROWS_LEN,LF_ROWS_LEN,(DEL_LF_ROWS_LEN/LF_ROWS_LEN)*100 FROMINDEX_STATS;
如果碎片率超过20%,则需要整理
l 7. 碎片整理
ALTERINDEX SYS_C0010867 REBUILD;
l 8.碎片压缩
ALTER INDEX SYS_C0010867 COALESCE;
14. 在线重新定义表技术
DBMS_REDEFINITION支持在几乎不中断业务的情况下,通过创建一个中间表,并通过内部机制,保证原表与中间表的数据同步,最后通过一个切换操作,完成表结构的在线重新定义,即非分区表向分区表的转换,或者已分区表向另一种分区表的转换等。
15. 尝试并行执行语句/*+Parallel*/
l SELECT /*+PARALLER()*/ JB.RYID, JB.GM