国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle筆記-優化器計劃穩定性

2024-08-29 13:39:24
字體:
來源:轉載
供稿:網友
  第 11 章 優化器計劃穩定性  11.1 概覽  CREATE OR REPLACE ONLINE MyOutLine  FOR CATEGORY mycategory  ON  SELECT ……;  需要CREATE OUTLINE權限   使用時指定會話的CATEGORY即可:  ALTER session SET USE_STORED_OUTLINES = mycategory;  11.2 OPS的使用  對已封裝的應用中SQL進行的優化方法  ALTER SESSION SET CREATE_STORED_OUTLINES = test;  執行應用,如一個存儲過程等  ALTER SESSION SET CREATE_STORED_OUTLINES = FALSE;  SET LONG 5000  SELECT name, sql_text FROM user_outlines WHERE category = ‘test’;  此時可以看到所運行的SQL語句。也可以通過一個ON LOGON觸發器來實現,即一登陸就ALTER SESSION…  優化時修改OPTIMIZER_GOAL后:  ALTER SESSION SET OPTIMIZER_GOAL = FIRST_ROWS;  ALTER OUTLINE name REBUILD;  ALTER SESSION SET OPTIMIZER_GOAL = CHOOSE;  此時就固定為OPTIMIZER_GOAL = FIRST_ROWS時的執行計劃了?! ∫粋€開發工具  由于開發環境與實際部署環境可能不一致,為了保證執行計劃與開發環境一致,可以建立一個ON LOGON觸發器來將執行計劃歸入一個category中,然后eXP/imp到新環境中?! ∮脕碛^察是否使用了索引  SELECT name, hint FROM user_outline_hints  WHERE hink LIKE ‘INDEX%’;  用來觀察應用使用了什么SQL語句  11.3 OPS如何工作  OUTLINES與OUTLINE_HITS  均分別有DBA_、USER_、ALL_三張視圖,其中DBA_多一個owner字段,說明創建者,另兩張與用戶有關系。  DBA_OUTLINES:  NAME  OUTLINE名,若創建時未指定,則使用系統命名  OWNER  創建時的方案名  CATEGORY  創建的列別,若未指定則為DEFAULT  USED  是否使用過  TIMESTAMP  創建的時間  VERSION  創建時的數據庫版本  SQL_TEXT  SQL查詢語句  DBA_OUTLINE_HINTS:  NAME  OUTLINE名,若創建時未指定,則使用系統命名  OWNER  創建時的方案名  NODE  提示應用的層次,從最外層查詢(1)開始累加計數  STAGE  提示應用的階段,即提示在編譯的哪個階段寫入  JOIN_POS  提示應用的表名,對非訪問方式提示為0  HINT  提示  11.4 創建存儲概要  相關的權限  CREATE ANY OUTLINE – 創建概要,否則報ORA-18005錯誤  ALTER ANY OUTLINE – 修改或重新計算概要  DROP ANY OUTLINE – 刪除概要  EXECUTE ON OUTLN_PKG – 執行OUTLINE包  注重這里權限都是全局的,概要不存在真正的所有者。  使用DDL  CREATE <OR REPLACE> OUTLINE OUTLINE_NAME  <FOR CATEGORY CATEGORY_NAME>  ON STATEMENT  使用ALTER SESSION  ALTER SESSION SET CREATE_STORED_OUTLINES = TRUE;  ALTER SESSION SET CREATE_STORED_OUTLINES = FALSE;  ALTER SESSION SET CREATE_STORED_OUTLINES = mycategory;  當設為TRUE時,所創建的概要歸類入DEFAULT.  11.5 OUTLN用戶  所有8i數據庫中均缺省創建,缺省密碼為OUTLN,并可在安裝后立即更改。方案含有兩個表和一些索引,存放于SYSTEM表空間中,若需要大量使用概要,可用如下方法轉移表空間(其中一張表含有LONG類型字段,無法ALTER TABLE MOVE)。
  EXP USERID=OUTLN/OUTLN OWNER=OUTLN  ALTER USER OUTLN DEFAULT TABLESPACE tools;  REVOKE UNLIMITED TABLESPACE FROM OUTLN;  ALTER USER OUTLN QUOTA 0K ON SYSTEM;  ALTER USER OUTLN QUOTA UNLIMITED ON tools;  DROP TABLE ol$;  DROP TABLE ol$hints;  IMP USERID=OUTLN/OUTLN FULL=YES  若系統已經使用了概要,則操作應盡量在單用戶模式下執行,數據庫無其它活動終端用戶。  11.6 在數據庫間轉移概要  EXP USERID=OUTLN/OUTLN QUERY=“where category=‘test’” tables=(ol$, ol$hints)  IMP USERID=OUTLN/OUTLN FULL=Y IGNORE=YES  這里也可以使用參數文件來定義導出的查詢條件。  11.7 獲得正確的概要  有時僅修改某些參數是無法獲得所需要的執行計劃的,還要添加提示。但概要的使用是基于相同的SQL文本,為了不修改應用但使用添加了提示的執行計劃,可以采用如下方法:  例如需要SELECT FROM (SELECT /*+ use_hash(emp) */ FROM emp) emp, ?。⊿ELECT /*+ use_hash(dept) */ FROM dept) dept  WHERE emp.deptno=dept.deptno;  則可以在另一個方案中刪除emp、dept表,將內層查詢語句建立成名為emp和dept的視圖,然后對SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno; 建立概要。則此后可以指定應用使用此概要(SQL文本一致)?! ∵@也是利用了OPS是全局的,并不關心所引用對象,而是純粹根據SQL文本進行轉換。  11.8 治理概要  通過DDL  ALTER OUTLINE outline_name RENAME TO new_name;  ALTER OUTLINE outline_name CHANGE CATEGORY TO new_category_name;  ALTER OUTLINE outline_name REBUILD;  DROP OUTLINE outline_name;  OUTLN_PKG包  作用:提供批量治理的功能;提供EXP/IMP的API  由DBMSOL.SQL和PRVTOL.PLB腳本(%Oracle_HOME%/RDBMS/ADMIN)創建,而這兩個腳本由CATPROC.SQL調用并缺省安裝到數據庫。  DROP_UNUSED – 刪除所有類別中所有未使用的概要?! XEC OUTLN_PKG.DROP_UNUSED;  DROP_BY_CAT – 刪除指定類別中的所有概要。  EXEC OUTLN_PKG.DROP_BY_CAT(category_name);  UPDATE_BY_CAT – 重命名一個類別或將其合并入另一個類別?! XEC OUTLN_PKG.UPDATE_BY_CAT(old_category_name, new_category_name); 若新名已被用,則合并,且若新舊類別存在相同SQL文本的概要,保留新類別中的,而此重復的概要仍保留于原類別中。  11.9 最后說明  創建概要需要CREATE ANY OUTLINE權限,若無權限,利用ALTER SESSION方式來創建概要時不會提示錯誤,但不會創建概要。  刪除用戶時即便指定CASCADE選項,也不會刪除其創建的概要?! 〖偃鏑URSOR_SHARING設為force,則用DDL和ALTER SESSION兩種方法獲得的SQL文本可能是不同的,前者就是輸入的SQL,而后者是系統內部已經轉換過綁定變量的SQL.  概要的使用依靠文本完全匹配,即便是大小寫不同也會造成SQL文本不匹配?! R擴展問題:由于WHERE條件中有OR的SQL會被改寫為UNION ALL模式,概要記錄的提示可能無法正常使用,而只是作用到第一個條件上。因此要注重USER_OUTLINE_HINTS表中HINT LIKE ‘USE_CONCAT%’的概要和提示,應當刪除或移走?! ∈褂酶乓獙π阅苡绊懞苄?。創建概要時接近首次分析該條語句的時間,此后第一次分析慢于正常分析時間,而隨后概要已經進入緩存,將不會觀察到性能影響。  11.10 可能碰到的錯誤  ORA-18001 – 使用ALTER OUTLINE語法錯誤  ORA-18002 – 所引用的概要不存在(從未創建過或者被刪除)  ORA-18003 – 概要的數字簽名已存在,數字簽名用于快速查找到合適的概要,此錯誤極少發生  ORA-18004 – 概要已存在,一般是命名沖突  ORA-18005 – 需要CREATE ANY OUTLINE權限  ORA-18006 – 需要DROP ANY OUTLINE權限  ORA-18007 – 需要ALTER ANY OUTLINE權限

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高要市| 长沙县| 庆云县| 小金县| 疏附县| 缙云县| 永州市| 蕲春县| 大理市| 新闻| 南宁市| 阿鲁科尔沁旗| 绥棱县| 讷河市| 南陵县| 海南省| 萨迦县| 当阳市| 凌源市| 临夏市| 团风县| 澜沧| 泸州市| 黄骅市| 贞丰县| 青铜峡市| 尼木县| 静海县| 普陀区| 绩溪县| 崇仁县| 遂溪县| 石首市| 舟山市| 塔河县| 上虞市| 雅江县| 昆山市| 甘泉县| 奉新县| 遵义县|