程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> 解析Oracle 8i/9i的計劃穩定性

解析Oracle 8i/9i的計劃穩定性

編輯:關於Oracle數據庫

  由Oralce8.1開始,Oracle增加了一個新的特性就是Stored Outlines,或者稱為Plan Stability(計劃穩定性)。這個特性帶來三個好處。首先,你可以優化開銷很大的語句的處理。第二,如果有一些語句Oracle需要花費長時間來優化(而不是執行),你可以節省時間並且減少優化階段的競爭。最後,它可以讓你選擇使用新的cursor_sharing參數而無需要擔心因此而不采用優化的執行路徑。

  要知道如何使用存儲概要才是最優的,我們首先運行一些極度沒有效率的SQL的存儲過程開始,要注意的是,我們不能修改源代碼(理論上)。
 
  我們將看一下如何跟蹤SQL語句,並且查看它當前在數據庫中的執行計劃,找出一些提示來改進SQL語句的性能,然後再重新執行該SQL語句時,讓Oracle使用我們的提示。

  在這個示例中,我們將創建一個用戶,在該用戶的模式中建一個表格,並且創建一個存儲過程訪問該表格,我們將在這個存儲過程上使用wrap工具,這樣我們就不能通過反向方式得到源代碼。然後我們將通過該存儲過程來調試SQL的執行。

  例子中我們將假定存儲慨要已經在數據庫創建的時候被自動安裝。

  准備工作

  創建一個用戶,他的權限有:create session, create table, create procedure, create any outline, and alter session。以該用戶連接並且運行以下的腳本來創建一個表格:

create table so_demo (
n1 number,
n2 number,
v1 varchar2(10)
)
;

insert into so_demo values (1,1,'One');

create index sd_i1 on so_demo(n1);
create index sd_i2 on so_demo(n2);

analyze table so_demo compute statistics;

  接著需要編碼來創建一個存儲過程訪問該表格。創建一個稱為c_proc.sql的腳本,如下:

create or replace procedure get_value (
i_n1 in number,
i_n2 in number,
io_v1 out varchar2
)
as
begin
select v1
into io_v1
from so_demo
where n1 = i_n1
and n2 = i_n2
;
end;
/

  當然,也可以直接執行這個腳本來建立該過程--不過,為了更有效果,轉到操作系統的命令行並且執行以下命令:

  wrap iname=c_proc.sql

  響應是:

  Processing c_proc.sql to c_proc.plb

  這裡不是通過執行c_proc.sql腳本來產生該過程,而是執行看不到源碼的c_proc.plb腳本,你將會發現在user_source的視圖中找不到我們的SQL語句。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁
  • 尾頁
  • 共3頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved