使用SQL來分析資料庫引數(二)

jeanron100發表於2016-11-14

拖延症的我終於接下來第二篇資料庫引數的分析。

資料庫的引數分析一直以來是調優中的重要一環,而感覺有時候卻感覺找不到一些方法,我分析了一下,還是蠻有意思。資料庫的引數分析基於下面的幾個環境。

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                        1618
10.2.0.5.0           GENERAL                     259
11.2.0.4.0           ALL                        2912
11.2.0.4.0           GENERAL                     351
12.1.0.2.0           ALL                        3975
12.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 data
infile *
append into table db_param_all
fields 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_timeout
deferred_segment_creation
sec_max_failed_login_attempts
diagnostic_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_count
db_block_buffers
parallel_degree_level
resource_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.value
from (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_11g
where db_12c.name=db_11g.name and db_12c.isdefault!=db_11g.isdefault;輸出如下,大概有20個

standby_file_management      TRUE    FALSE
sec_case_sensitive_logon     FALSE   TRUE
local_listener               TRUE    FALSE
dg_broker_start              TRUE    FALSE
db_keep_cache_size           TRUE    FALSE
db_recycle_cache_size        TRUE    FALSE
log_archive_dest_1           TRUE    FALSE
log_archive_dest_state_2     TRUE    FALSE
log_archive_dest_state_3     TRUE    FALSE
log_archive_min_succeed_dest TRUE    FALSE
fal_server                   TRUE    FALSE
log_archive_trace            TRUE    FALSE
log_archive_config           TRUE    FALSE
log_archive_format           TRUE    FALSE
log_archive_max_processes    TRUE    FALSE
archive_lag_target           TRUE    FALSE

我重點想說的是兩個引數standby_file_management 和sec_case_sensitive_logon,大小寫登入敏感在11g是一個新特性,但是到了12c裡面竟然引數被廢棄了。

由此可見資料庫中,我們只是一瞥其中的奧妙,裡面還有很多很多的未知問題等待著我們。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2128470/,如需轉載,請註明出處,否則將追究法律責任。

相關文章