ORACLE學習筆記 效能優化4

2022-05-08 19:24:10 字數 2782 閱讀 8326

13.怎麼樣能固定我的執行計畫

可以使用outline來固定sql語句的執行計畫,用如下語句可以建立乙個outline

create oe replace outline outln_name on

select col1,col2 from table

where .......

如果要刪除outline,可以採用

drop outline outln_name;

對於已經建立了的outline,存放在outln使用者的ol$hints表下面,對於有些語句,你可以使用update outln.ol$hints來更新outline,如

update outln.ol$hints(ol_name,'test1','test2','test2','test1)

where ol_name in ('test1','test2');

這樣,你就把test1 outline與test2 outline互換了,如果想利用已經存在的outline,需要設定以下引數

alter system/session set query_rewrite_enabled = true

alter system/session set use_stored_outlines = true

14.v$sysstat中的class分別代表什麼

統計類別

1 代表事例活動

2 代表redo buffer活動

4 代表鎖

8 代表資料緩衝活動

16 代表os活動

32 代表並行活動

64 代表表訪問

128 代表除錯資訊

15.怎麼殺掉特定的資料庫會話

alter system kill session 'sid,serial#';

或者alter system disconnect session 'sid,serial#' immediate;

在win上,還可以採用oracle提供的orakill殺掉乙個執行緒(其實就是乙個oracle程序)

在linux/unix上,可以直接利用kill殺掉資料庫程序對應的os程序

16.怎麼快速查詢鎖與鎖等待

資料庫的鎖是比較耗費資源的,特別是發生鎖等待的時候,我們必須找到發生等待的鎖,有可能的話,殺掉該程序。

這個語句將查詢到資料庫中所有的dml語句產生的鎖,還可以發現,任何dml語句其實產生了兩個鎖,乙個是表鎖,乙個是行鎖。

可以通過alter system kill session 『sid,serial#』來殺掉會話

select /*+ rule */ s.username,

decode(l.type,'tm','table lock','tx','row lock',null) lock_level,

o.owner,o.object_name,o.object_type,

s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser

from v$session s,v$lock l,dba_objects o

where l.sid = s.sid

and l.id1 = o.object_id(+)

and s.username is not null

如果發生了鎖等待,我們可能更想知道是誰鎖了表而引起誰的等待,以下的語句可以查詢到誰鎖了表,而誰在等待。

select /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name,

o.owner,o.object_name,o.object_type,s.sid,s.serial#

from v$locked_object l,dba_objects o,v$session s

where l.object_id=o.object_id

and l.session_id=s.sid

order by o.object_id,xidusn desc

以上查詢結果是乙個樹狀結構,如果有子節點,則表示有等待發生。如果想知道鎖用了哪個回滾段,還可以關聯到v$rollname,其中xidusn就是回滾段的usn

[q] 如何有效的刪除乙個大表(extent數很多的表)

[a] 乙個有很多(100k)extent的表,如果只是簡單地用drop table的話,會很大量消耗cpu(oracle要對fet$、uet$資料字典進行操作),可能會用上幾天的時間,較好的方法是分多次刪除extent,以減輕這種消耗:

1. truncate table big-table reuse storage;

2. alter table big-table deallocate unused keep 2000m ( 原來大小的n-1/n);

3. alter table big-table deallocate unused keep 1500m ;

....

4. drop table big-table;

17.如何收縮臨時資料檔案的大小

9i以下版本採用

alter database datafile 'file name' resize 100m類似的語句

9i以上版本採用

alter database tempfile 'file name' resize 100m

注意,臨時資料檔案在使用時,一般不能收縮,除非關閉資料庫或斷開所有會話,停止對臨時資料檔案的使用。

ORACLE學習筆記 效能優化4

13.怎麼樣能固定我的執行計畫 可以使用outline來固定sql語句的執行計畫,用如下語句可以建立乙個outline create oe replace outline outln name on select col1,col2 from table where 如果要刪除outline,可以採...

ORACLE學習筆記 效能優化4

13.怎麼樣能固定我的執行計畫 可以使用outline來固定sql語句的執行計畫,用如下語句可以建立乙個outline create oe replace outline outln name on select col1,col2 from table where 如果要刪除outline,可以採...

ORACLE學習筆記 效能優化1

1.查詢正在執行語句的執行計畫 也就是實際語句執行計畫 select from v sql plan where hash value select sql hash value from v session where sid 1111 其中id和parent id表示了執行數的結構,數值最大的為...