MiBDP,数据开发、项目团队、数据应用和产品在路上,金融保险、互联网网游、电商、新零售行业、大数据和AI在路上。对数仓、模型、ETL、数据产品应用了解。DTCC 2013演讲嘉宾,曾做过两款大获好评的数据产品平台。知识星球ID:35863277
分类: Oracle
2007-05-18 15:03:50
shmmax |
共享内存段,建议设大点, 达到最大SGA |
shmmin |
最小的共享内存段. |
shmmni |
共享内存标志符的数量. |
shmseg |
一个进程可分配的最大内存段数. |
shmall |
最大可允许的内存数,比SGA还要大. |
semmns |
信号量,跟ORACLE的PROCESS数有关. |
semmsl |
一个信号量中最大的信号量数. |
sga_max_size |
例程存活期间所占用的系统全局区的最大大小,一般为物理内存的1/2-1/3
|
shared_pool_size |
指定共享池的大小,共享池包含:共享游标、存储的过程、控制结构和并行执行消息缓冲区等对象,较大的值用于改善多用户系统的性能,该参数调整不能过大,会增加管理负担和latch 的开销,一般是在200M-500M左右
|
db_cache_size |
该参数指定数据缓冲区的大小,原则上是越大越好,取代了8i中的db_block_size * db_block_buffers
|
log_buffer |
重做日志缓冲区大小,该参数设置大没有意义,Oracle推荐log_buffer最大为cpu_count乘以128KB或512KB中最大值
|
processes |
系统用户进程的最大数量,该参数设置为系统最繁忙时估计并发用户数
|
large_pool_size |
如果不设置MTS,通常在 RMAN 、OPQ 会使用到,但是在10M --50M应该差不多了。可以考虑为 session * (sort_area_size + 2M)。
|
Java_pool_size |
它用于存放java代码,若不使用java,建议设置为30M
|
pga_aggregate_target |
程序全局区大小,1.对于OLTP系统PGA_AGGREGATE_TARGET= (
|
timed_statistics |
建议将timed_statistics 设置为true,否则无法查看到准确的统计信息(9i版本后的设置为true对系统性能影响较小,千分之一) |
spdrop.sql |
删除脚本,丢弃统计分析的相关包、视图、表、同义词等对象(首次创建无须执行)
|
spcreate.sql |
创建脚本,生成统计分析的相关包、视图、表、同义词等对象(首次执行前建议创建一个统计用的表空间)
|
spreport.sql |
生成报告记录sql ,生成的报告文件在系统当前路径下,文件名默认为:sp_开始快照号_结束快照号.lst
|
sprepsql.sql |
分析相关快照中的sql执行计划。
|
sppurge.sql |
删除在两个快照号之间包括本身的所有统计分析数据。
|
sptrunc.sql |
截取statspack统计分析的相关数据 在统计分析的对应用户perfstat下执行 |
stats$snapshot |
快照相关信息; selectsnap_id,snap_time from stats$snapshot;
|
stats$sqltext |
快照统计sql信息,查询统计sql(statspack报告中sql过长会被截掉)select sql_text from stats$sqltext where hash_value=&value and last_snap_id=begin_snap_id order by piece; |
db file sequential read |
等待事件,一般问题出现在读索引上,建议将业务表空间和索引表空间分开存储在不同的物理卷下,以提高磁盘的I/O性能。
|
db file scattered read |
建议程序中尽量避免使用全表扫描的语句,或者可以增大db_file_multiblock_read_count的值,提高全表扫描一次读取数据块的速度,减少磁盘I/O。
|
db file parallel write |
说明DBWR进程正等待把缓冲区的内容并行写入数据文件中去,等待将一直持续到所有的I/O全部完成。建议增大初始化参数中的db_writer_processes的值
|
log file sync |
说明任何时候一个事物提交时,它将通知LGWR将LOG_BUFFER写入日志文件,如果此部分占用时间较长,应减少COMMIT的次数,建议将重做日志放到较快的磁盘上进行存储。
|
log file parallel write |
等待事件,和上面一样建议将重做日志放到较快的磁盘上进行存储。 |
Full Table Scans |
全表扫描、无可用索引 |
Index Unique Scans |
索引唯一扫描 |
IndexRange Scans |
索引范围扫描 |
IndexRange Scans Descending |
索引降序范围扫描 |
Index Skip Scans |
索引跳跃扫描 |
Full Scans |
全索引扫描 |
Fast Full Index Scans |
快速全索引扫描 |
Index Joins |
索引连接 |
Bitmap Joins |
位图连接 |
Nested Loops |
会循环外表(驱动表),逐个比对和内表的连接是否符合条件。 基于Cost的Oracle优化器(CBO)会自动选择较小的表做外表。 |
优点:在驱动表比较小,内表比较大,而且内外表的连接列有索引的时候比较好,嵌套循环连接比其他连接方法有优势,它可以快速地从结果集中提取第一批记录,而不用等待整个结果集完全确定下来。
缺点:如果内部行源表(读取的第二张表(内表)已连接的列上不包含索引,或者索引不是高度可选时, 嵌套循环连接效率是很低的。 |
SORT- merge JOIN |
将两表的连接列各自排序然后合并,只能用于连接列相等的情况,适合两表大小相若的情况 |
优点:在缺乏数据的选择性或者可用的索引时,或者两个源表都过于庞大(超过记录数的5%)时,排序合并连接将比嵌套循环连更加高效。
局限性:排列合并连接只能用于等价连接排列合并连接需要临时的内存块,以用于排序( 如果SORT_AREA_SIZE设置得太小的话)。这将导致在临时表空间占用更多的内存和磁盘I/O |
HASH JOIN |
在其中一表的连接列上作散列,因此只有另外一个表做排序合并, 只有基于代价的优化器才可以使用哈希连接。 |
当缺少有用的索引时,哈希连接比嵌套循环连接更加有效。哈希连接可能比排序合并连接更快,,哈希连接使用内存资源,并且当用于排序内存不足时,会增加临时表空间的I/O(这将使这种连接方法速度变得极慢 |
Hint Syntax |
Description |
优化方式 |
|
/*+ ALL_ROWS */ |
表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化
|
/*+ CHOOSE */ |
表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;
表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法; |
/*+ FIRST_ROWS */ |
表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化,在做分页查询时有时可以改善性能
|
/*+ RULE */ |
表明对语句块选择基于规则的优化方法 |
处理方法 |
|
/*+ AND_EQUAL(table index) */ |
提示明确进行执行规划的选择,将几个单列索引的扫描合起来.
SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306' |
/*+ CLUSTER(table) */ |
Explicitly chooses a cluster scan to access the specified table.
|
/*+ FULL(table) */ |
表明对表选择全局扫描的方法
SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT' |
/*+ INDEX(table index) */ |
表明对表选择索引的扫描方法.
SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M'; |
/*+ INDEX_ASC(table index) */ |
表明对表选择索引升序的扫描方法 |
/*+ INDEX_COMBINE(table index) */ |
为指定表选择位图访问路经,如果INDEX_COMBINE中没有提供作为参数的索引,将选择出位图索引的布尔组合方式.
例如: SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS WHERE SAL<5000000 AND HIREDATE |
/*+ INDEX_DESC(table index) */ |
表明对表选择索引降序的扫描方法. |
/*+ INDEX_FFS(table index) */ |
对指定的表执行快速全索引扫描,而不是全表扫描的办法. |
/*+ NO_INDEX(table index) */ |
表明优化器不采用扫描相对应的索引 |
/*+ ROWID(table) */ |
明确表明对指定表根据ROWID进行访问.
SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA' AND EMP_NO='SCOTT'; |
/*+ USE_CONCAT */ |
对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询. |
连接操作 |
|
/*+ USE_HASH(table) */ |
将指定的表与其他行源通过哈希连接方式连接起来.
SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO; |
/*+ USE_MERGE(table) */ |
将指定的表与其他行源通过合并排序连接方式连接起来.
SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO; |
/*+ USE_NL(table) */ |
将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表. |