使用SQL来分析数据库参数(二)(r10笔记第82天)
公众号:杨建荣的学习笔记 · 作者:杨建荣 · 发布:2016-11-14 23:35:52 · 原文链接
拖延症的我终于接下来第二篇数据库参数的分析。
数据库的参数分析一直以来是调优中的重要一环,而感觉有时候却感觉找不到一些方法,我分析了一下,还是蛮有意思。数据库的参数分析基于下面的几个环境。
10gR2(10.2.0.5.0)
11gR2(11.2.0.4.0)
12cR1(12.1.0.2.0)
大体来说数据库的参数在Oracle中还有很大一部分没有开放,而在很多博客,技术分析中,总是会自然而然的分析到隐含参数,通过这些参数可以让我们一窥Oracle对的运行机制。
那么公开和未公开的比例有多大呢,保守的算法,不到10%的比例。我们来上两个图。
第一个图是数据库所有的参数在10g,11g,12c中的变化情况,可以大体感觉到参数随着版本是越来越多。

而开放的参数呢,就是我们通过v$parameter,show parameter能够查看到的,在10g,11g,12c中大体是这样的一个演进图。

这里你可以很明显看到一个拐点,在11g到12c的过程中,公开的参数相对在减少。
而怎么分析这些参数呢,能不能挖掘出一些重要的信息呢。
下面是参数情况的数据。在10g,11g,12c中大体是这样的一个比例,GENERAL的代表可以通过v$parameter查看到,为ALL的则代表是能够查看到的所有参数。
DB_VERSION PARAM_TYPE COUNT(*)-------------------- -------------------- ----------10.2.0.5.0 ALL 161810.2.0.5.0 GENERAL 25911.2.0.4.0 ALL 291211.2.0.4.0 GENERAL 35112.1.0.2.0 ALL 397512.1.0.2.0 GENERAL 380
我们来简单分析一下。
我抛出了下面的几个问题,如果没有对比数据,这些很难回答,而又了数据,这些就可以轻松应答。
哪些参数是11g新增的?
哪些是12c新增的?
哪些11g的隐含参数,在12c正式引入? 哪些是11g的隐含参数,在12c中被废弃? 哪些是10g的隐含参数,在11g被废弃? 哪些是10g的隐含参数,在11g被正式引入?
哪些是10g默认的参数,在11g有所变化?
哪些是11g默认的参数,在12c中有所变化?
要得到这些数据方法也很直白,就是查询视图数据转储。具体方法参见。使用SQL来分析数据库参数(一)(r10笔记第68天)
我们首先创建一个表来存放这些参数信息。
create table db_param (db_version varchar2(30),param_type varchar2(10),name varchar2(80),value varchar(512),isdefault varchar2(9),isdeprecated varchar2(5),description varchar2(255));
然后使用下面的控制文件导入数据
load datainfile *append into table db_param_allfields terminated by '|'(db_version,param_type,name,value,isdefault,isdeprecated,description)
如果导入有个别的参数失败,也不必失望,哪些很可能是归档路径参数等。
数据得到了,我们来通过SQL进行简单分析。
1)哪些参数是11g新增的?
select name from db_param where db_version='11.2.0.4.0' and param_type='GENERAL' and name not in (select name from db_param where db_version='10.2.0.5.0' and param_type='GENERAL');
这样的参数有104个,我举几个例子。
log_archive_dest_31这个参数是归档相关的,在11g中进行了扩展,原本10g里面是10个,11g里面扩展了不少。
限于篇幅就不一一列举了,我举出几个说明即可。
ddl_lock_timeoutdeferred_segment_creationsec_max_failed_login_attemptsdiagnostic_dest
2)那些是12c新增的?
select name from db_param where db_version='12.1.0.2.0' and param_type='GENERAL' and name not in (select name from db_param where db_version='11.2.0.4.0' and param_type='GENERAL')
这个输出结果只有31条,而纵观参数的变化,主要就是在两个方面,PDB和IMO,可见这两个特性是12c里深入骨髓了。
3)哪些11g的隐含参数,在12c正式引入?
select name from db_param where db_version='12.1.0.2.0' and param_type='GENERAL' and '_'||name in (select name from db_param where db_version='11.2.0.4.0' and param_type='ALL' minus select name from db_param where db_version='11.2.0.4.0' and param_type='GENERAL' );
这些代表着那些隐含参数已经转正了,不过数量确实很少。
active_instance_countdb_block_buffersparallel_degree_levelresource_manager_plan
4)哪些是11g的隐含参数,在12c中被废弃?
select name from db_param where db_version='12.1.0.2.0' and param_type='GENERAL' and ISDEPRECATED='TRUE' and '_'||name in (select name from db_param where db_version='11.2.0.4.0' and param_type='ALL' minus select name from db_param where db_version='11.2.0.4.0' and param_type='GENERAL' )
经过一番查找,还真找到一个。
active_instance_count
5)哪些是10g的隐含参数,在11g被正式引入?
select name from db_param where db_version='11.2.0.4.0' and param_type='GENERAL' and '_'||name in (select name from db_param where db_version='10.2.0.5.0' and param_type='ALL' minus select name from db_param where db_version='10.2.0.5.0' and param_type='GENERAL' )涉及的参数只有
db_block_buffers
6)哪些是10g默认的参数,在11g有所变化?
这部分内容就尤其需要注意了,这些参数的设计在11g有了重大的变化
sga_max_size TRUE FALSE audit_trail FALSE TRUE db_keep_cache_size FALSE TRUE db_recycle_cache_size FALSE TRUE db_writer_processes TRUE FALSE log_archive_dest_3 FALSE TRUE log_archive_dest_state_2 FALSE TRUE log_archive_dest_state_3 FALSE TRUE log_archive_min_succeed_dest FALSE TRUE fal_server FALSE TRUE log_archive_trace FALSE TRUE log_archive_config FALSE TRUE log_archive_format FALSE TRUE log_archive_max_processes FALSE TRUE archive_lag_target FALSE TRUE db_file_multiblock_read_count TRUE FALSE standby_file_management FALSE TRUE undo_management TRUE FALSE undo_retention TRUE FALSE utl_file_dir TRUE FALSE job_queue_processes TRUE FALSE background_dump_dest TRUE FALSE user_dump_dest TRUE FALSE core_dump_dest TRUE FALSE
7)哪些是11g默认的参数,在12c中有所变化?
select db_12c.name,db_11g.name,db_12c.isdefault,db_11g.isdefault--,db_12c.value,db_11g.valuefrom (select name,value,isdefault from db_param where db_version='12.1.0.2.0' and param_type='GENERAL' ) db_12c,(select name,value,isdefault from db_param where db_version='11.2.0.4.0' and param_type='GENERAL' ) db_11gwhere db_12c.name=db_11g.name and db_12c.isdefault!=db_11g.isdefault;输出如下,大概有20个
standby_file_management TRUE FALSEsec_case_sensitive_logon FALSE TRUElocal_listener TRUE FALSEdg_broker_start TRUE FALSEdb_keep_cache_size TRUE FALSEdb_recycle_cache_size TRUE FALSElog_archive_dest_1 TRUE FALSElog_archive_dest_state_2 TRUE FALSElog_archive_dest_state_3 TRUE FALSElog_archive_min_succeed_dest TRUE FALSEfal_server TRUE FALSElog_archive_trace TRUE FALSElog_archive_config TRUE FALSElog_archive_format TRUE FALSElog_archive_max_processes TRUE FALSEarchive_lag_target TRUE FALSE
我重点想说的是两个参数standby_file_management 和sec_case_sensitive_logon,大小写登录敏感在11g是一个新特性,但是到了12c里面竟然参数被废弃了。
由此可见数据库中,我们只是一瞥其中的奥妙,里面还有很多很多的未知问题等待着我们。
