1,sql parse的種類
sql parse又通常分為硬解析和軟解析,當sql第一次執行的時候,會發生硬解析,之後的執行如果在shared pool中能找到就是軟解析。因此,為提高資料效能,盡可能的讓每次執行的sql在shared pool找到。
2,sql在哪些情況下會傳送硬解析?
1)統計資訊改變
2)sql中的表上有做ddl操作,包括grant和revoke。
3)執行計畫被踢出shared pool
4)開啟了trace
5)繫結變數長度變化
6)啟用outline,11g啟用spm
7)sql語句相同但是所引用的表不同,例如不是同一屬主
8)環境發生變化,如sort area size、hash area size和locale setting發生變化
3,軟解析的條件
當你向oracle 提交乙個sql語句,oracle會首先在共享記憶體中查詢是否有相同的語句。這裡需要註明的是,oracle對兩者採取的是一種嚴格匹配,要達成共享,sql語句必須完全相同(包括空格,換行等)。如果完全相同,才會有軟解析。
4,如何判斷兩個sql語句是否是同乙個sql語句呢?
1)大小寫和空格以及字母值不一致:
select * from emp where empno = 1000;
和下列每乙個都不同
select * from emp where empno = 1000;
select * from emp where empno = 1000;
select * from emp where empno = 2000;
在上面的語句中列值都是直接sql語句中的,我們將這類sql稱為硬編碼sql或字面值sql
2)繫結變數名稱不同
使用繫結變數的sql語句中必須使用相同的名字的繫結變數(bind variables)
例如:a. 該2個sql語句被認為相同
select * from emp where empno = :empno;
select * from emp where empno = :empno;
b. 該2個sql語句被認為不相同
select * from emp where empno = :empno1;
select * from emp where empno = :empno2;
我們將上面的這類語句稱為繫結變數sql。
3)物件名稱相同,但是屬主不同
將所發出語句中涉及的物件與已存在語句所涉及物件相比較。
例如:如使用者user1與使用者user2下都有emp表,則
使用者user1發出的語句:select * from emp; 與
使用者user2發出的語句:select * from emp; 被認為是不相同的語句,
因為兩個語句中引用的emp不是指同乙個表。
4) 在sql語句中使用的**變數的**型別必須一致
oracle資料庫效能影響之Sql parse
1,sql parse的種類 sql parse又通常分為硬解析和軟解析,當sql第一次執行的時候,會發生硬解析,之後的執行如果在shared pool中能找到就是軟解析。因此,為提高資料效能,盡可能的讓每次執行的sql在shared pool找到。2,sql在哪些情況下會傳送硬解析?1 統計 資訊...
oracle資料庫效能影響之Sql parse
1,sql parse的種類 sql parse 又通常分為硬解析和軟解析,當sql第一次執行的時候,會發生硬解析,之後的執行如果在shared pool中能找到就是軟解析。因此,為提高資料效能,盡可能的讓每次執行的sql在shared pool找到。2,sql在哪些情況下會傳送硬解析?統計資訊改變...
磁碟排序影響Oracle資料庫效能
當建立同oracle會話時,會在伺服器 記憶體中劃分出乙個專門用來排序的區域,從而為會話提供排序空間。但是,這個排序空間畢竟有限,若記錄數量超過這個排序空間的話,就需要進行磁碟排序。但是,我們都知道,磁碟排序的執行速度要比記憶體排序的執行速度慢1400倍。而且,磁碟排序會消耗臨時表空間的資源,並且可...