1.查看當前數據庫版本:
select* from v$version;(以下示例基於oracle 11.2.0.1.0)
2.ROWID
oracle數據庫的表中的每一行數據都有一個唯一的標識符,該標識符表明了該行在oracle數據庫中的物理具體位置.
3.execute procedure 命令是在PL/SQL命令窗口執行的。
4.SQL/PLUS下查看執行計劃詳細信息
說明:
recursive calls 用戶執行一條SQL語句的時候,Oracle必須調用其他的語句,這些額外調用的語句,就稱爲"recursive calls"
consistent gets:一致性讀,爲了保持讀一致性而獲取的塊, 通常情況下針對select語句產生的
db block gets:其實這個名字可能有點歧義,這個表示 no consistent gets,即非一致性讀, 通常情況下針對 dml語句產生的
PhysicalReads(物理讀)物理讀的內容不在內存中,要去硬盤中讀入內存,包含了邏輯讀。
PhysicalReads=dbblockgets+consistentgets;
LogicalReads(邏輯讀)邏輯讀內容在內存中,不需要讀硬盤。
logical reads= (db block gets + consistent gets) - physical reads。(這裏的- physical reads 表示排除物理讀)
所以不管是db block gets還是consistent gets,都可能出現了physical reads和logical reads兩種情況(由buffer中的是否已經存在需要的數據)
,也即是說,db block gets與consistent gets兩者已經構成了一次數據庫操作中讀取的所有block的總次數了。
因此,logical reads自然也就可以通過如下公式算的:logical reads= (db block gets + consistent gets) - physical reads。
由於在Oracle中,取數據最後都是從Buffer中取,所以每出現一個physical reads必然會出現一次 logical reads,但是這裏有一個需要注意的地 方,就是當出現一個physical reads後接着會有一個logical reads這裏,實際上這裏只算了1 block(physical reads)!
5 sqlplus如何設置SQLPlus結果顯示的寬度
SQLPlus查詢的結果可以根據自己的屏幕情況進行調節,設置如下:
1.設置頁面顯示總行數
show pagesize; //首先查看目前的pagesize,默認是14
set pagesize 800; //將pagesize設置好800,則可以一次顯示夠多行記錄了
2.設置行的寬度
show linesize; //查看目前的linesize,默認是80
set linesize 800; //設置成800或者更寬都可
6 查看執行計劃的幾種方式(常用)
1 explain plan(plsql中按 F5快捷鍵)
1.1 往 explain plan命令中添加目標SQL
explain plan for select t.id,t2.user_name,t2.note from t_user t, t_user2 t2 where t.id=t2.id;
1.2 PLAN_TABLE$ 用來保存目標SQL的執行計劃對應的具體步驟
select * from sys.PLAN_TABLE$;
1.3 查看PLAN_TABLE表中目標SQL執行計劃
select * from table(dbms_xplan.display)
說明1 explain plan 查看目標SQL 執行計劃時,目標SQL不會真正的執行。
說明2 explain plan得到執行計劃不一定準確, 當explain plan 執行的目標SQL綁定變量時,得到執行計劃不準確
說明3 explain plan 執行目標爲DML語句時會真正去執行,例如 delete from t1。
2 dbms_xplan(適用於SQLPLUS,執行完SQL後,執行)
select * from table(dbms_xplan.display);
select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
select * from table(dbms_xplan.display_cursor('sql_id/hash_value',child_cursor_number,'advanced'));
select * from table(dbms_xplan.display_awr('sql_id'));
-- 說明1 除第一個外,其它3個會真正執行目標SQL。
-- 說明1 除第一個外,其它三個能得到真實的執行計劃
3 autotrace開關(sqlplus)
語法 set autotrace {off| on |traceonly } [explain] [statistics] 默認爲off
set timing on (顯示執行時間)
set autotrace on (顯示執行結果具體內容,執行計劃,統計信息)
set autotrace traceonly (顯示執行結果數量,執行計劃,統計信息)
set autotrace traceonly explain(顯示執行計劃)
set autotrace traceonly statistics (顯示統計信息)
說明1 set autotrace {on,traceonly},執行目標SQL時,目標SQL會真實被執行。
說明2 上面所有autotrace 的執行計劃都來源於explain plan ,得到執行計劃不一定準確。
7.Buffer Cache與Shared Pool原理
7.1 Buffer Cache
7.2 Buffer Cache
7.3 清空共享池和緩存(sqlplus下)
alter system flush shared_pool;
alter system flush buffer_cache;
8.vsqlarea視圖
v$sqlarea和v$sql兩個視圖的不同之處在於,v$sql中爲每一條SQL保留一個條目,
而v$sqlarea中根據sql_text進行group by,通過version_count計算子指針的個數。 v$sqlarea和v$sql的數據存在於shared_pool。
8.1 v$sql 列信息
8.2 v$sqlarea 列信息
9.位圖索引
9.1位圖索結構(左邊表數據,右邊位圖索引結構)
9.2說明:
10 執行計劃順序
10.1 執行計劃順序
示例:
執行步驟:4, 6 ,5, 3, 9, 10, 8 ,13, 12 ,11, 7, 2 ,1, 0
思路:由上往下找到的第一個並列是id爲3和7,靠上的(id=3)先執行,再看id=3裏面的節點信息, id=4和id=5並列,則上面的(id=4)先執行,然後再看下面,id=5裏面有葉子節點則先執行id=6再執行id=5, 接着看id=7裏面有id=8和id=11,按照靠上的先執行,則看id=8裏面的節點,裏面有id=9和id=10並列,則先執行id=9,再執行id=10,再接着看id=11裏面的節點,得知執行順序爲13,12,11 最後執行第一個並列節 點的父節點id=2,然後是2,1。
參考博客:http://blog.itpub.net/30126024/viewspace-2141974/
10.2 通過執行腳本顯示執行計劃順序
10.2.1 通過管理員賬號登陸後執行腳本 F:\WWK\xuexi\oracle\腳本\XPLAN_修正後.sql
腳本包括2個類型和一個包,其中包分爲包聲明和包體,2都要分開執行,不然後會報錯。
10.2.2 然後執行 grant execute on sys.xplan to scott2(用戶名);
10.2.3 用scoot2登陸 操作如下:
11 表連接方式以及執行計劃
11.1 排序合併連接 Sort Merge
11.1.1 原理
11.1.2 優缺點及適應場景
11.1.3 執行計劃
說明:最先掃描t2全表,然後對t2.col2進行排序,然後掃描t1全表,然後對t2.col2進行排序,最後進行合併。
12 嵌套循環連接 Nested Loops
12.1.1 原理
12.1.2 優缺點及適應場景
12.1.3 執行計劃
說明 從執行步驟上看先執行 t2 全表掃描(t2 是驅動表),從t2表中取出一條記錄到t1表中遍歷尋找匹配記錄,成功後,再從t2表中取出一 條記錄再到t1表中遍歷匹配記錄,直至全部匹配完。
ordered user_no 則將t1設爲驅動表
14 反連接 Anit Join
14.1.1 描述
14.1.2 not in 和<>ALL執行計劃
select * from t1 where col2 not in (select col2 from t2);
select * from t1 where col2 <> all (select col2 from t2);
14.1.3 not exists 執行計劃
14.1.4 當連接列上有NULL值時
15 半連接 Semi Join
15.1.1 描述
15.1.2 int, exists 執行計劃
16 AND-EQUEL(INDEX-MARGE)
16.1.1 描述
16.1.2 and-equel 執行計劃(如果謂詞有一個是唯一索引則不會走and-equal 則會走索引唯一掃描)