999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Oracle中的SQL語句共享研究

2015-01-29 00:36:16楊國勛
新媒體研究 2014年22期

楊國勛

摘 要 在軟件應用系統設計和開發的過程中,容易被設計者所忽視的就是如何通過增加數據庫SQL語句共享來提高系統的整體性能,本文通過深入研究Oracle數據庫中SQL語句的解析過程,分析了SQL語句不能共享的主要原因,并給出如何增加SQL語句共享率的解決方案。

關鍵詞 SQL語句共享;軟解析;硬解析

中圖分類號:TP311 文獻標識碼:A 文章編號:1671-7597(2014)22-0069-01

Oracle數據庫是目前在中大型軟件項目中應用最為廣泛的數據庫之一,在這樣一些項目中需要處理的數據量是非常巨大的,而且用戶對應用系統的性能要求比較高。提高系統的性能一方面是需要有一個良好的架構設計,另一方面則是要提高底層數據庫系統的性能。數據庫性能的提升需要由經驗豐富的DBA來配置和維護,但更重要而且是容易被忽視的是程序員在編寫代碼時需要提高數據庫系統的SQL語句共享率,避免不必要的SQL語句硬解析,從而降低系統在進行SQL語句解析花費的時間和資源。

1 SQL語句解析過程

Oracle處理客戶端應用程序提交過來的SQL語句主要分為4個階段,SQL語句解析、參數綁定、執行和獲取結果,其中SQL語句解析是其中非常重要的一個階段,理解這個階段的處理過程對于提高應用系統整體性能有很好的幫助。

在SQL語句的解析階段,Oracle會進行如下操作:

檢查SQL語法錯誤:檢查SQL語句中的關鍵字是否有拼寫錯誤,順序和位置是否正確等。

檢查SQL語義錯誤:檢查該SQL語句引用的對象是否存在,提交SQL語句的用戶是否具有訪問該對象的權限等。

SQL共享語句查詢:Oracle數據庫服務器管理程序會先在服務器會話緩存用戶全局區(UGA)中查詢是否有此SQL語句對應的已打開的游標(Open Cursor),如果有則通過已打開游標中的指針找到在服務器共享池(Shared Pool)中的此SQL語句對應游標句柄并執行,此時不需要對語句進行解析,因為打開的游標已經被解析,而且游標句柄已經存在于服務器共享池的庫緩存(Library Cache)中。

如果游標被關閉,則游標的信息會被保存在會話關閉游標的緩存中,此緩存的大小是由參數SESSION_CACHED_CURSORS決定的。當系統在UGA中沒找到SQL語句對應的已打開的游標,則會在已關閉游標緩存中查詢,如找到匹配的已關閉游標,則會重新打開此游標,通過此游標可以直接執行SQL語句而不需要重新解析。

如果系統在UGA中沒找到此SQL語句的游標,則會根據SQL語句生成的Hash值在Shared Pool中的Hash鏈中查詢是否有此SQL語句對應的游標句柄,如果此游標句柄能夠找到且游標的其他信息沒有丟失,則可以執行此SQL語句,此次查詢過程被系統記錄為一次解析,但不是真的解析,因此這個過程也被稱為軟解析。

硬解析:如果此SQL語句在UGA和Shared Pool中都沒有找到匹配的游標,則Oracle服務器系統需要在Library Cache中為此SQL語句創建一個父游標(parent cursor)和一個子游標(child cursor)。父游標中包含了SQL文本和對應的Hash值,父游標的信息可以通過視圖v$sqlarea查詢。子游標中包含了使得這個SQL可以執行的所有相關信息,如執行權限、優化器設置和執行計劃等。子游標的信息可以通過視圖v$sql進行

查詢。

2 SQL語句無法共享原因分析

通過對SQL語句在Oracle中的解析過程研究可以知道,SQL語句無法共享主要是由兩個原因造成,父游標無法共享以及子游標無法共享。

1)父游標無法共享。

父游標能夠共享的前提條件是SQL語句對應的Hash值要一致,Oracle系統在生成SQL語句Hash值的時候是會區分大小寫和空格,如下面幾條SQL語句雖然查詢含義一樣,但寫法沒有統一使得Hash值不一致而造成SQL語句無法共享。

select * from tb_student where id=1

select * from TB_STUDENT where id=1

select * from tb_student where id=1

2)子游標無法共享。

當SQL語句及其Hash值一致時就可以共享父游標,但有時會因為種種原因使得子游標無法共享,此時同一個父游標會有多個子游標,子游標的個數可以通過視圖v$sqlarea的version_count字段查詢處理。在實際的項目中,要盡量避免version_count過高的情況。子游標無法共享的一個常見原因是綁定變量不一致,這里的變量不一致,有可能是變量名不一致,也有可能是變量對應的數據類型的長度不一致,例如,對于字符類型的字段,進行綁定變量的時候,如果該變量值小于32字節的話,第一次會使用32字節的緩沖區,第二次執行這個SQL的時候,如果該值小于32字節,那么可以共享這個子游標,如果大于32字節就無法共享,此時會在同一父游標下創建一個新的子游標,同時分配128字節的緩沖區。子游標另外一個無法共享的常見原因是SQL語句查詢選擇的優化器模式不一致。子游標無法共享的原因可以通過查詢視圖v$sql_shared_cursor進行分析。

3 增加SQL語句共享率

通過上述分析,要增加SQL語句共享率,提高系統的整體性能可以從以下幾方面入手:

1)SQL語句在文本上必須完成相同,包括空格、換行、大小寫都必須完全相同,因此在項目組中要制定SQL語句的書寫規范,使得不同的程序員在編寫程序時按照統一的SQL語句規范來書寫,增加SQL語句共享,減少SQL語句硬解析的次數,提高應用程序的執行效率。

2)在書寫SQL語句的時候盡量使用綁定變量的方式,并且保證變量名和變量數據類型字段長度一致。在進行SQL語句查詢時,盡量選擇一致的優化器模式。

3)設置SESSION_CACHED_CURSORS參數為一個恰當的值,從而保證被關閉的游標能在服務器緩存中保存一段時間,增加SQL語句共享的幾率。

參考文獻

[1]張江.Oracle數據庫的性能優化策略淺析[J].現代計算機(專業版), 2012(36).

[2]趙琛.Oracle服務器性能影響因素分析與優化[J].電腦編程技巧與維護,2011(20).endprint

主站蜘蛛池模板: 在线观看国产网址你懂的| 伊人网址在线| 2020国产精品视频| 91精品视频网站| 亚洲区第一页| m男亚洲一区中文字幕| 国产精品污视频| 亚洲天堂777| 无码中文字幕乱码免费2| 欧美日韩国产在线观看一区二区三区| 精品久久久久久中文字幕女| 亚洲天堂网站在线| 狠狠综合久久| 婷婷色一区二区三区| 欧美精品亚洲精品日韩专区| 波多野结衣第一页| 在线a视频免费观看| 色丁丁毛片在线观看| 国产精品久久久久久久久kt| 人妻少妇久久久久久97人妻| 欧美精品一区二区三区中文字幕| 亚洲人成网线在线播放va| 特级毛片免费视频| 大学生久久香蕉国产线观看| av一区二区无码在线| 亚洲成肉网| 亚洲一道AV无码午夜福利| 一本大道香蕉中文日本不卡高清二区| 国产9191精品免费观看| 亚洲欧美日韩中文字幕在线一区| 欧美97色| 99国产在线视频| 欧美精品另类| 亚洲视频二| 91小视频在线| 国产又黄又硬又粗| 国产人人射| 伊人久久大香线蕉影院| 国产青榴视频| 午夜激情婷婷| 中文字幕在线播放不卡| 正在播放久久| 中文字幕在线视频免费| 成人福利在线看| 成人在线天堂| 国产一区二区三区免费观看| 91网址在线播放| 亚洲天天更新| 久久国产亚洲欧美日韩精品| 国产在线一二三区| www.99精品视频在线播放| 免费在线观看av| 福利视频久久| 欧美69视频在线| 国模视频一区二区| 尤物特级无码毛片免费| 婷婷色中文| 国产经典在线观看一区| 搞黄网站免费观看| 国产SUV精品一区二区| 国产黑丝视频在线观看| 国产成人a毛片在线| 18禁黄无遮挡网站| 欧美人与动牲交a欧美精品| 久久人体视频| 男人天堂伊人网| 免费可以看的无遮挡av无码| 日韩精品亚洲一区中文字幕| 欧美不卡二区| 四虎影视国产精品| 国产福利2021最新在线观看| 凹凸国产分类在线观看| 亚洲色图欧美在线| 萌白酱国产一区二区| 欧美黄色a| 国产高清在线精品一区二区三区 | 小说区 亚洲 自拍 另类| 亚洲中文在线看视频一区| 午夜国产小视频| 老司机午夜精品网站在线观看| 亚洲精品另类| 日韩中文无码av超清|