當妳知道如何通過給壹段DML語句添加提示就可以讓它運行的快很多,但是妳卻沒有訪問源代碼並將提示放到適當位置的途徑, 妳會怎麽做?
在上壹篇文章中,我展示了妳可以如何用存儲概要(也被稱為執行計劃穩定性)來驅使數據庫引擎為妳做這種工作.
壹個存儲概要由兩個組件組成(寬泛地講)-壹個妳希望控制的SQL語句,壹組每當Oracle發現這條SQL被優化都將在它上面應用的提示.這兩個組件都被保存在壹個被稱為outln的數據庫schema中.
我們可以使用壹組如圖-1中類似的查詢語句來檢查保存在其中的SQL語句,以及附著在這條SQL語句上的提示.
1 select name, used, sql_text
2 from user_outlines
3 where category = ‘DEFAULT’
4 ;
5
6 select stage, node, hint
7 from user_outline_hints
8 where name = ‘{one of the names}’
9 ;
Figure 1 Examining stored outlines.
在前面的文章中,我介紹了這樣壹種想法來欺騙系統, 使用合法的方法創建壹個存儲概要, 接著,使用壹個文本相似的但已經添加過提示的語句來創建壹個存儲概要,最後,使用壹組SQL語句來交換這兩個存儲概要的實際結果來修復存儲概要.
當時,我曾提到這種方法對Oracle 8來講或許是安全的,但是由於在新版本中引入的變化, 在Oracle 9中可能會導致問題.
這篇文章將對這些變化進行考查, 介紹壹種合法的方法來得到妳想要的壹組存儲到outln中的提示,用來解決妳的那些問題語句.
相關變化
如果妳登錄到outln schema(在Oracle 9中它默認是鎖住的)查看可用的表清單,妳將發現Oracle 9比Oracle 8多出來壹張表. 這些表為:
ol$ SQL語句
ol$hints 提示表
ol$nodes 查詢塊
第三張表是壹張新表,被用來將提示列表與這條SQL語句(壹份內部重寫的版本)的多個不同查詢塊.妳還將發現,提示列表(ol$hints)也被加強了,其中還包括文本長度與偏移量的細節信息.
圖2為這三張表的詳細描述,用星號標註了Oracle 9中出現的新字段.
01 ol$
02
03 OL_NAME VARCHAR2(30)
04 SQL_TEXT LONG
05 TEXTLEN NUMBER
06 SIGNATURE RAW(16)
07 HASH_VALUE NUMBER
08 HASH_VALUE2 NUMBER ***
09 CATEGORY VARCHAR2(30)
10 VERSION VARCHAR2(64)
11 CREATOR VARCHAR2(30)
12 TIMESTAMP DATE
13 FLAGS NUMBER
14 HINTCOUNT NUMBER
15 SPARE1 NUMBER ***
16 SPARE2 VARCHAR2(1000) ***
17
18 Ol$hints
19
20 OL_NAME VARCHAR2(30)
21 HINT# NUMBER
22 CATEGORY VARCHAR2(30)
23 HINT_TYPE NUMBER
24 HINT_TEXT VARCHAR2(512)
25 STAGE# NUMBER
26 NODE# NUMBER
27 TABLE_NAME VARCHAR2(30)
28 TABLE_TIN NUMBER
29 TABLE_POS NUMBER
30 REF_ID NUMBER ***
31 USER_TABLE_NAME VARCHAR2(64) ***
32 COST FLOAT(126) ***
33 CARDINALITY FLOAT(126) ***
34 BYTES FLOAT(126) ***
35 HINT_TEXTOFF NUMBER ***
36 HINT_TEXTLEN NUMBER ***
37 JOIN_PRED VARCHAR2(2000) ***
38 SPARE1 NUMBER ***
39 SPARE2 NUMBER ***
40
41 ol$nodes (completely new in 9)
42
43 OL_NAME VARCHAR2(30)
44 CATEGORY VARCHAR2(30)
45 NODE_ID NUMBER
46 PARENT_ID NUMBER
47 NODE_TYPE NUMBER
48 NODE_TEXTLEN NUMBER
49 NODE_TEXTOFF NUMBER
為了達到Administration of Symantec Enterprise Vault 9 for Exchange水準認證,考生必須通過250-309考試,要求考生在105分鐘內完成70至80道考題,達到76%就可以通過考試。考生可以選擇英語,日語作為250-309考試語種。該考試是一個技術類考試,Administration of Symantec Enterprise Vault 9 for Exchange 250-309考試成功驗證了考生對產品的技能知識的熟悉程度,管理Symantec Enterprise Vault9交易等技能。 Continue reading
KillTest 000-170認證考試學習資料幫助考生成功通過IBM BPM Blueprint; WebSphere Lombardi Edition V7.1考試。要獲取BPM Blueprint; WebSphere Lombardi Edition V7.1證書需要考生參加000-170考試。要求考生必須在75分鐘內完成40道考題,達到70%就可以獲取證書。建議考生選擇英語為該考試語種,000-170考試隸屬於IBM Certified Associate BPM Analyst認證體系。 Continue reading
Cisco Certified Design Professional (CCDP) 是Cisco認證系列中另一張較高級的證書,CCDP認證主要提供網路規劃人員在今日快速變動的網路環境中獲得Cisco網路設備所需的專業知識。持有CCDP 認證表示您有能力設計包含100到500個節點以上的路由和切換式網路。考取CCDP考試必須具備CCNA或CCDA證照。該認證考試科目是ARCH 642-874,ROUTE 642-813,SWITCH 642-902考試。獲取CCDP認證人士必須能夠運用所學習得到的網路知識,對網路設備的安裝、配置和操作技巧各方面都能完全掌握,然後再憑經驗,對複雜的LAN、WAN 和交換式區域網路而進行設計和規劃。 Continue reading