記錄下來,做資料庫優化和索引分析的方案
案例: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語句進行分析,看存在哪些問題才使得機器難以快速執行。而...