<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kxbin
    成功留給有準備的人
    posts - 10,  comments - 35,  trackbacks - 0

    oracle SQL語句執行步驟

    Oracle中SQL語句執行過程中,Oracle內部解析原理如下:

      1、當一用戶第一次提交一個SQL表達式時,Oracle會將這SQL進行Hard parse,這過程有點像程序編譯,檢查語法、表名、字段名等相關信息(如下圖),這過程會花比較長的時間,因為它要分析語句的語法與語義。然后獲得最優化后的執行計劃(sql plan),并在內存中分配一定的空間保存該語句與對應的執行計劃等信息。

      2、當用戶第二次請求或多次請求時,Oracle會自動找到先前的語句與執行計劃,而不會進行Hard parse,而是直接進行Soft parse(把語句對應的執行計劃調出,然后執行),從而減少數據庫的分析時間。

      注意的是:Oracle中只能完全相同的語句,包大小寫、空格、換行都要求一樣時,才會重復使用以前的分析結果與執行計劃。

      分析過程如下圖:


      對于大量的、頻繁訪問的SQL語句,如果不采用Bind 變量的方式,哪Oracle會花費大量的Shared latch與CPU在做Hard parse處理,所以,要盡量提高語句的重用率,減少語句的分析時間,通過了解Oracle SQL語句的分析過程可以明白Oracle的內部處理邏輯,并在設計與實現上避免。

      在用JDBC或其它持久化數據(如Hibernate,JDO等)操作時,盡量用占位符(?)

      

    ORACLE sql 的處理過程大致如下:
     1.
    運用HASH算法,得到一個HASH值,這個值可以通過V$SQLAREA.HASH_VALUE 查看
     2.
    shared pool 中的 library cache 中查找是否有相同的HASH值,如果存在,則無需硬解析,進行軟解析
     3.
    如果shared pool不存在此HASH值,則進行語法檢查,查看是否有語法錯誤
     4.
    如果沒有語法錯誤,就進行語義檢查,檢查該SQL引用的對象是否存在,該用戶是否具有訪問該對象的權限
     5.
    如果沒有語義錯誤,對該SQL進行解析,生成解析樹,執行計劃
     6.
    生成ORACLE能運行的二進制代碼,運行該代碼并且返回結果給用戶
    硬解析和軟解析都在第5步進行
    硬解析通常是昂貴的操作,大約占整個SQL執行的70%左右的時間,硬解析會生成執行樹,執行計劃,等等。
    當再次執行同一條SQL語句的時候,由于發現library cache中有相同的HASH值,這個時候不會硬解析,而會軟解析,
    那么軟解析究竟是干了什么呢?其實軟解析就是跳過了生成解析樹,生成執行計劃這個耗時又耗CPU的操作,直接利用生成的執行計劃運行
    SQL語句。
    下面摘抄eygle深入解析ORACLE 中關于SQL執行過程的描述
      1.
    首先獲得library cache latch,根據SQLHASH_VALUElibrary cache中查找是否存在此HASH_VALUE,如果找到這個HASH_VALUE,稱之為軟解析,Server獲得改SQL執行計劃轉向第4步,如果找不到共享代碼就進行硬解析。
      2.
    釋放library pool cache,獲得shared pool latch,查找并鎖定自由空間(bucket 中查找chunk)。如果找不到,報ORA-04031錯誤
      3.
    釋放shared pool latch,重新獲得library cache latch,SQL執行計劃放入library cache中。
      4.
    釋放library cache latch,保持null模式的library cache pin/lock.
      5.
    開始執行。
    Library cache latch
    可以理解為硬/軟解析的時候發生的,因為解析的時候會搜索library cache,所以會產生library cache latch
    Library cache pin
    是在執行的階段發生的。

    posted on 2012-09-28 11:28 kxbin 閱讀(1792) 評論(0)  編輯  收藏 所屬分類: ORACLE
    你恨一個人是因為你愛他;你喜歡一個人,是因為他身上有你沒有的;你討厭一個人是因為他身上有你有的東西;你經常在別人面前批評某人,其實潛意識中是想接近他。

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(5)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    J2EE

    java技術網站

    Linux

    平時常去的網站

    數據庫

    電影網站

    網站設計

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲人成网站999久久久综合| 在线观看免费亚洲| 大学生高清一级毛片免费| 国产精品日本亚洲777| 国产亚洲成av人片在线观看| 国产大片91精品免费观看不卡| 国产成人亚洲精品91专区高清| 久久亚洲精品视频| 免费被黄网站在观看| 久久精品国产这里是免费| 亚洲精品女同中文字幕| 亚洲电影一区二区| 免费大片在线观看网站| 黄色免费网站网址| xxxx日本在线播放免费不卡| 亚洲三级视频在线观看| 亚洲精品制服丝袜四区| 日本免费一二区在线电影| 99久在线国内在线播放免费观看| 国产精品日本亚洲777| 亚洲男女性高爱潮网站| 国产亚洲精品成人AA片新蒲金| 24小时免费直播在线观看| 黄色网址在线免费| 人成电影网在线观看免费| 久久夜色精品国产噜噜亚洲a| 亚洲精品无码久久久久去q| 国产成人涩涩涩视频在线观看免费 | 亚洲AV人人澡人人爽人人夜夜| 国产免费午夜a无码v视频| 国产精品永久免费10000| 国产拍拍拍无码视频免费| 粉色视频免费入口| 亚洲入口无毒网址你懂的| 亚洲精品高清国产一久久| 日韩一卡2卡3卡4卡新区亚洲| 国产免费一区二区三区VR| 成人网站免费观看| 无码乱肉视频免费大全合集 | 美女露隐私全部免费直播| 亚洲a视频在线观看|