oracle 優化分析

2021-08-31 10:26:08 字數 3751 閱讀 8234

記錄下來,做資料庫優化和索引分析的方案

案例:1:在分割槽表中,全域性索引可能會導致索引失效,這樣執行計畫中不走索引,改本地索引local

2:對錶進行分析,不用analyze,用了會對執行計畫產生影響,對錶和索引分析建議用dbms

exec dbms_stats.gather_table_stats(user,upper('tb_ori_0076'),cascade => true,degree => 2);

exec dbms_stats.gather_table_stats(user,

upper('tb_public_0005'),

cascade => true,

degree => 2);

exec dbms_stats.gather_table_stats(user,

upper('tb_index_0056'),

cascade => true,

degree => 2);

exec dbms_stats.gather_table_stats(user,

upper('tb_index_0055'),

cascade => true,

degree => 2);

exec dbms_stats.gather_index_stats(user,'idx83882807',degree=>2);

3:學會檢視explain plan for 執行計畫,並建立合適的索引,必要的時候需要用到hint

使用方法:sqlplus user/username@sid

explain plan for sql語句

set timing on

set pagesize 1000

set linesize 150

spool c:/abc.lst

@?/rdbms/admin/utlxplp

spool off

4:使用跟蹤事件10046,10046事件是oracle提供的內部事件,是對sql_trace的增強

sql>select * from dual;

sql>alter session set events '10046 trace name context forever,level 12';

sql>貼上要跟蹤的sql並執行完成

sql>alter session set events '10046 trace name context off';

sql>exit

c:\>e:

e:\oracle\product\10.1.0\admin\testdb\udump>tkprof testdb_ora_1484.trc abc sys=no

可以在該目錄中找到abc這個跟蹤檔案,進行分析

5:附件是2個寫好的plsql命令,abc.sql是利用oracle後台job進行分割槽在某個時間自動新增分割槽,tabinfo.sql是分析資料庫中當前表,並檢索出表中各個字段情況。

通過此分析能快速幫我們排除哪些欄位上建立索引最合適。

sql>@c:\abc.sql 需要開啟oracle後台作業程序oraclejobscheduler

sql> select job_name,next_run_date from dba_scheduler_jobs where job_name='monthly_add_partition';檢視job任務

任務刪除 drop_scheduler drop_job

sql>@c:\tabinfo.sql 輸入使用者名稱和表名即可

select no_, stock_code, stock_name, price_, money_flow_5, business

from (select /*+ ordered index(t4 tb_ora_0004_idx1) index(t4_b tb_ora_0004_idx1) */ row_number () over (order by ( t4.f0004_028n- t4_b.f0004_028n) desc) no_,

t4.f0004_005v stock_code, t5.f0005_002v stock_name,

t4.f0004_007n price_,

t4.f0004_028n - t4_b.f0004_028n money_flow_5,

t55.f0055_002v as business

from tb_ori_0004 t4

inner join

(select /*+ index(tb_ori_0004 tb_ora_0004_idx1) */ f0004_005v, f0004_003v, f0004_004v,

max (f0004_002v) f0004_002v

from tb_ori_0004

where f0004_001d = (select max (f0076_001d)

from tb_ori_0076)

group by f0004_005v, f0004_003v, f0004_004v) t

on t4.f0004_003v = t.f0004_003v

and t4.f0004_004v = t.f0004_004v

and t4.f0004_005v = t.f0004_005v

and t4.f0004_002v = t.f0004_002v

and t4.f0004_001d = (select max (f0076_001d)

from tb_ori_0076)

inner join tb_ori_0004 t4_b

on t4_b.f0004_003v = t.f0004_003v

and t4_b.f0004_004v = t.f0004_004v

and t4_b.f0004_005v = t.f0004_005v

and t4_b.f0004_002v =to_char (to_date (t.f0004_002v, 'hh24mi') - 4 / (24 * 60),

'hh24mi'

)and t4.f0004_001d = t4_b.f0004_001d

inner join tb_public_0005 t5

on t4.f0004_003v = t5.f0005_007v

and t4.f0004_004v = t5.f0005_005v

and t4.f0004_005v = t5.f0005_001v

inner join

(select t.f0056_003v, t.f0056_002n

from tb_index_0056 t

where t.f0056_001d = (select max (t.f0056_001d)

from tb_index_0056 t)) t6

on t6.f0056_003v = t5.f0005_001v

inner join

(select t.f0055_001n, t.f0055_002v

from tb_index_0055 t

where t.f0055_003v = '新申萬一級') t55

on t55.f0055_001n = t6.f0056_002n

)where no_ <=30;

JVM優化分析

看過了jvm的記憶體模型,自己總結一下jvm的優化過程。1.首先要分析情況,關注三大塊的情況 cpu 記憶體和io 磁碟 網路 jstack檢視執行緒cpu的使用情況,記憶體使用jmap來檢視記憶體使用情況,iostat來檢視磁碟讀寫情況 iotop也可以,但需要安裝 然後使用jinfo來列印下虛擬...

sql優化分析

sql 語句前加explain 分析sql掃瞄行數 table 顯示該語句涉及的表 type 這列很重要,顯示了連線使用了哪種類別,有無使用索引,反映語句的質量。possible keys 列指出mysql能使用哪個索引在該表中找到行 key 顯示mysql實際使用的鍵 索引 如果沒有選擇索引,鍵是...

Explain優化分析

當你寫入乙個select查詢語句,mysql底層會有查詢優化器來對你的拆線呢語句給出mysq自己的理解。人的理解與機器的理解存在偏差,從而造成查詢效能變慢這一重大影響。為了讓人能夠迎合機器的理解去更好的書寫sql查詢語句,我們需要對已存在的sql語句進行分析,看存在哪些問題才使得機器難以快速執行。而...