日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】Oracle Outline使用方法及注意事项

發布時間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】Oracle Outline使用方法及注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概要?
Oracle Outline是用來保持SQL運行計劃(execution plan)的一個工具。

我們能夠通過outline工具防止SQL運行計劃在

數據庫環境變更(如統計信息,部分參數等)而引起變化。?
Outline的主要使用在下面情況:?
1.?
為避免在升級后某些sql出現嚴重性能下降并且在短時間內不能優化的情況,?
我們能夠使用outline的功能將原生產庫中的sql運行計劃實施在新的數據庫上。?
2.?
為避免SQL的運行計劃在統計數據不準確的情況(如未能及時收集表或索引的統計信息)下導致變化從而引起的性能減少。?
3.?
避免大規模分布實施的應用出現數據庫版本號、配置等差別引起的優化器產生不同的運行計劃。?
4.?
某些Bug引起優化器生成較差的運行計劃。在bug修復前我們能夠使用outline來強制SQL的運行計劃的正確。?
Outline的機制是將所須要的運行計劃的hint保存在outline的表中。當運行SQL時,Oracle會與outline中的SQL比較,假設該SQL有保存的outline,則通過保存的hint生成運行計劃。?
Outline的使用注意事項?
Outline的使用須要注意下面事項。?
1.?
Outln用戶是一個很重要的系統用戶。其重要性跟sys,system一樣。

在不論什么情況下都不建議用戶刪除outln。否則會引起數據庫錯誤。

?


2.?
優化器通過Outline生成運行計劃前提是outline內全部hint都有效的。如:索引沒有創建的前提下,索引的hint是失效的。導致該SQL的outline計劃不會被使用。

?


3.?
參數Cursor_sharing=force時不能使用outline。?
4.?
literial sql的共享程度不高,Outline針對綁定變量的sql較好。

針對literial sql的情況,須要每條sql都生成outline。

?


5.?
創建outline須要有create any outline的權限。?
6.?
要注意從CBO的角度來看,數據庫表和索引的統計信息是隨著數據量的變化而不斷改變的。

固定的運行計劃在某些時段并不一定是最優的運行計劃。

所以outline的使用是要依據詳細情況來決定的。

?


Outline使用舉例?
本文舉例說明怎樣使用outline,而且將outline的內容從8i遷移到10g的數據庫上使用。?
操作步驟以scott用戶為例說明。

?


8i,10g中在scott用戶下創建測試表以說明outline的使用.?
Login as scott?
Create table t_test(col1 varchar2(2));?
1.?
確定8i生產庫的db,listener處于關閉的狀態。

?


2.?
啟動8i生產庫instance.?
3.?
8i庫使用system用戶登陸,賦create any outline權限給sql運行用戶。?
Grant create any outline to scott;?
4.?
8i庫使用scott用戶登陸。?
Create outline t_ol1 for category special on select * from t_test where col1=’00’;?
T_ol1àoutline name?
(注意每一個outline都須要使用唯一的名字,不能反復)?
Specialàoutline所屬的類(category)?
Select * from t_test where col1=’00’;à須要保存outline的sql?
5.?
10g,8i庫Unlock并改動outlin用戶口令。

注意,outln用戶的口令能夠改動可是outln用戶不能刪除。?


Alter user outln identified by outln account unlock;?
6.?
在8i庫使用outln用戶,導出outline數據。?
Exp outln/outln tables=ol/$ ol/$hints file=ol.dmp log=ol_exp.log?
將export的數據復制到10g庫所在機器?
7.?
在10g庫使用outln用戶導入outline數據?
imp outln/outln file=ol.dmp ignore=y log=ol_imp.log?
8.?
在10g庫使用sys用戶更新ouline的signature?
connect sys/manager?
exec dbms_outln.update_signatures;?
啟用stored outline?
alter system set use_stored_outlines=special;?
à指定outline category?
9.?
檢測outline是否被使用?
connect scott/tiger?
create index I_test on t_test (col1);?
à創建索引。以改變運行計劃?
explain plan for select * from t_test where col1=’00’;?
@?

/rdbms/admin/utlxplp?


PLAN_TABLE_OUTPUT?
Plan hash value: 4036493941?
----------------------------------------------------------------------------?
| Id? | Operation???????????????????????????????????????? | Name????? | Rows? | Bytes????? | Cost (%CPU)| Time???? |?
----------------------------------------------------------------------------?
|?? 0 | select STATEMENT?????????????????????? |???????????????? |???? 1????? |???? 3?????????? |? 1200?? (4)?????? | 00:00:17 |?
|*1? |TABLE ACCESS FULL?????????????????? | T_TEST |???? 1????? |???? 3?????????? |? 1200?? (4)????? | 00:00:17 |?
----------------------------------------------------------------------------?
Predicate Information (identified by operation id):?
---------------------------------------------------?
?? 1 - filter("COL1"='00')?
Note?
-----?
?? - outline "OL1" used for this statement?
à?
注意運行計劃指出online已經使用?
17 rows selected.?
說明outline已經啟用。?
假設沒有outline的情況下應該使用索引,運行計劃例如以下。?
PLAN_TABLE_OUTPUT?
--------------------------------------------------------------------------------?
Plan hash value: 614253159?
---------------------------------------------------------------------------?
| Id? | Operation??????????????????????? | Name???? | Rows? | Bytes | Cost (%CPU)| Time???? |?
---------------------------------------------------------------------------?
|?? 0 | select STATEMENT???? |??????????????? |???? 1????? |????????? 3 |???? 3?? (0)????????? | 00:00:01 |?
|*? 1 |? INDEX RANGE SCAN| I_TEST |???? 1????? |????????? 3 |???? 3?? (0)????????? | 00:00:01 |?
---------------------------------------------------------------------------?
Predicate Information (identified by operation id):?
---------------------------------------------------?
?? 1 - access("COL1"='00')?
Outline維護?
停止db使用outline功能:?
alter system set use_stored_outlines=false;?
disable/enable詳細outline:?
alter outline ol_name disable;?
alter outline ol_name enable;?
刪除outline category:?
9i, 10g: exec dbms_outln.drop_by_cat(‘category_name’);?
8i: exec outln_pkg.drop_by_cat(‘category_name’);?
outline相關視圖?
dba_outlines?
檢查outline是否存在?
select?
name, category, owner from dba_outlines;?
dba_outline_hints?
這個視圖列出outline的hints內容

版權聲明:本文博客原創文章。博客,未經同意,不得轉載。

轉載于:https://www.cnblogs.com/blfshiye/p/4665122.html

總結

以上是生活随笔為你收集整理的【转】Oracle Outline使用方法及注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。