亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Oralce數(shù)據(jù)庫(kù)SQL查詢優(yōu)化研究

        2011-02-19 07:49:04張學(xué)義王觀玉
        制造業(yè)自動(dòng)化 2011年2期
        關(guān)鍵詞:子句緩沖區(qū)語(yǔ)句

        張學(xué)義,王觀玉,黃 雋

        ZHANG Xue-yi,WANG Guan-yu,HUANG Jun

        (黔南民族師范學(xué)院 計(jì)算機(jī)科學(xué)系,都勻 558000)

        0 引言

        Oracle數(shù)據(jù)庫(kù)是當(dāng)前應(yīng)用最廣泛的大型數(shù)據(jù)庫(kù),其查詢性能直接關(guān)系到系統(tǒng)的運(yùn)行效率,對(duì)其查詢優(yōu)化方法的研究更具有現(xiàn)實(shí)意義。隨著數(shù)據(jù)庫(kù)中數(shù)據(jù)的增加,系統(tǒng)的響應(yīng)速度就成為目前系統(tǒng)需要解決的最主要的問(wèn)題之一,劣質(zhì)SQL語(yǔ)句和優(yōu)質(zhì)SQL語(yǔ)句之間的速度差別可以達(dá)到上百倍,可見(jiàn)對(duì)于一個(gè)系統(tǒng)不是簡(jiǎn)單地能實(shí)現(xiàn)其功能就可,而是要寫出高質(zhì)量的SQL語(yǔ)句,提高系統(tǒng)的可用性和降低系統(tǒng)的響應(yīng)時(shí)間。傳統(tǒng)的Oracle SQL查詢優(yōu)化方法[1]是使用索引來(lái)更快地遍歷表,優(yōu)化器主要根據(jù)定義的索引來(lái)提高性能。但是,如果在SQL語(yǔ)句的where子句中寫的SQL代碼不合理,就會(huì)造成優(yōu)化器略去索引而使用全表掃描,導(dǎo)致查詢效率低下。

        針對(duì)上述情況,提出了幾種SQL查詢語(yǔ)句優(yōu)化新策略:檢測(cè)分析影響系統(tǒng)響應(yīng)速度的SQL語(yǔ)句、共享SQL語(yǔ)句、使用表的別名、數(shù)據(jù)緩沖區(qū)優(yōu)化、共享池的優(yōu)化、數(shù)據(jù)緩沖池的優(yōu)化,使得執(zhí)行SQL語(yǔ)句時(shí)優(yōu)化器根據(jù)優(yōu)化原則來(lái)合理使用索引,并盡可能減少磁盤I/O訪問(wèn)獲取所需要的數(shù)據(jù),提高查詢性能。在數(shù)據(jù)庫(kù)優(yōu)化前后比較其評(píng)價(jià)指標(biāo):響應(yīng)時(shí)間和吞吐量之間的權(quán)衡、數(shù)據(jù)庫(kù)的命中率以及內(nèi)存的使用效率,并以此來(lái)衡量?jī)?yōu)化的效果和指導(dǎo)優(yōu)化的方向。

        1 Oracle優(yōu)化原理

        Oracle數(shù)據(jù)庫(kù)優(yōu)化的主要目標(biāo)就是減少磁盤I/O、減少CPU利用率和資源競(jìng)爭(zhēng),降低查詢響應(yīng)時(shí)間或提高系統(tǒng)吞吐量。影響SQL性能的因素很多,如初始化參數(shù)設(shè)置不合理、導(dǎo)入了不準(zhǔn)確的系統(tǒng)及模式統(tǒng)計(jì)數(shù)據(jù)從而影響優(yōu)化程序(CBO)的正確判斷、未建立恰當(dāng)?shù)乃饕鹑頀呙?、多表連接時(shí)過(guò)濾條件位置不當(dāng)導(dǎo)致中間結(jié)果集包含了太多的無(wú)用記錄、未充分利用數(shù)據(jù)庫(kù)提供的查詢并行化處理。

        磁盤I/O[2]是影響Oracle數(shù)據(jù)庫(kù)性能的瓶頸,主要原因有磁盤競(jìng)爭(zhēng)、I/O讀取次數(shù)和數(shù)據(jù)塊空間的分配管理不當(dāng)?shù)?。提高I/O設(shè)備的并發(fā)訪問(wèn)率,可以有效提高SQL語(yǔ)句的執(zhí)行效率。當(dāng)競(jìng)爭(zhēng)增強(qiáng)的時(shí)候,系統(tǒng)響應(yīng)時(shí)間將增長(zhǎng)。

        用戶在編寫新的SQL語(yǔ)句,或者對(duì)應(yīng)用程序中存在疑問(wèn)的語(yǔ)句進(jìn)行優(yōu)化時(shí),其基本步驟為查找最消耗資源的語(yǔ)句,對(duì)這些語(yǔ)句進(jìn)行優(yōu)化,使其占用更少的資源。利用SQL TRACE、SQL Analyze等工具,可以查出存在問(wèn)題的SQL語(yǔ)句。

        SQL處理體系結(jié)構(gòu)由以下幾個(gè)主要組件組成:解析程序、字典、優(yōu)化程序、SQL執(zhí)行,如下圖1所示:

        解析程序、優(yōu)化程序共同組成了SQL編譯器。編譯器將SQL語(yǔ)句編譯成共享游標(biāo),并與查詢計(jì)劃相關(guān)聯(lián)。解析程序執(zhí)行語(yǔ)法分析和語(yǔ)義分析。優(yōu)化程序是SQL處理引擎的核心。Oracle數(shù)據(jù)庫(kù)支持兩種優(yōu)化方法:基于規(guī)則的優(yōu)化(RBO)和基于開(kāi)銷的優(yōu)化(CBO),本論文正是基于CBO方法設(shè)置優(yōu)化程序的方法和目標(biāo),以及收集CBO的統(tǒng)計(jì)信息,對(duì)SQL語(yǔ)句進(jìn)行查詢優(yōu)化,獲得最佳吞吐量。

        圖1 SQL處理系統(tǒng)結(jié)構(gòu)

        2 Oracle數(shù)據(jù)庫(kù)內(nèi)存優(yōu)化方法

        要充分發(fā)揮Oracle數(shù)據(jù)庫(kù)的優(yōu)勢(shì),必須對(duì)數(shù)據(jù)庫(kù)的各項(xiàng)初始化參數(shù)進(jìn)行合理配置[3]。從Oracle數(shù)據(jù)庫(kù)內(nèi)存優(yōu)化管理的角度出發(fā),針對(duì)影響其性能的因素及其對(duì)應(yīng)的參數(shù),分別從數(shù)據(jù)緩沖區(qū)優(yōu)化、共享池優(yōu)化、重做日志緩沖區(qū)優(yōu)化幾個(gè)方面完成內(nèi)存優(yōu)化配置。

        SGA(系統(tǒng)全局區(qū))是數(shù)據(jù)庫(kù)的工作區(qū),它和Oracle進(jìn)程結(jié)合組成一個(gè)Oracle數(shù)據(jù)庫(kù)實(shí)例,管理數(shù)據(jù)庫(kù)數(shù)據(jù),應(yīng)答用戶請(qǐng)求。SGA[4]有三個(gè)組成部分,即數(shù)據(jù)庫(kù)緩存區(qū),共享池區(qū)以及日志緩存區(qū),這些內(nèi)存區(qū)域由初始化文件initSID.ora中相應(yīng)的參數(shù)來(lái)配置,它們的性能效率也將受initSID.ora中各參數(shù)設(shè)置的影響。以DBA的身份連接到數(shù)據(jù)庫(kù),通過(guò)執(zhí)行下列語(yǔ)句來(lái)獲取SGA設(shè)置信息:SQL>select * from v$sga,并做相應(yīng)的調(diào)整。

        1)共享池的優(yōu)化

        共享池(shared pool)包括庫(kù)高速緩存、數(shù)據(jù)字典高速緩存,衡量這兩個(gè)緩存區(qū)性能的指標(biāo)主要是它們的命中率。共享池用LRU算法進(jìn)行管理,保證頻繁使用的代碼和數(shù)據(jù)字典能夠存于共享池中。數(shù)據(jù)字典命中率查詢:SQL>select(1 -(sum(getmisses)/sum(gets)))* 100“Hit Ratio” from v$rowcache;查詢結(jié)果Hit Ratio為98.25588424。

        若共享池的庫(kù)高速緩存和數(shù)據(jù)字典命中率低于95%,則可增大initSID.ora中shared_ pool_size的值。

        2)日志緩沖區(qū)的優(yōu)化

        日志緩沖區(qū)存儲(chǔ)數(shù)據(jù)庫(kù)的修改信息,大小由log_buffer確定,它必須是db_block_ size的整數(shù)倍。日志緩沖區(qū)的存在可以加快數(shù)據(jù)庫(kù)的操作速度,因?yàn)閮?nèi)存到內(nèi)存的操作比內(nèi)存到硬盤的速度快很多。SQL>select n.name,gets,misses,immediate_gets,immediate_ misses from v$latch l,v$latchname n where n.name in('redo allocation','redo copy')and n.latch#=l.latch#;此查詢中redo allocation和redo copy的失敗率為0,如果計(jì)算結(jié)果大于1%,則需增大日志緩沖區(qū)的大小。

        3 SQL查詢語(yǔ)句優(yōu)化新策略

        SQL語(yǔ)句尤其是復(fù)雜SQL語(yǔ)句的性能優(yōu)化對(duì)于數(shù)據(jù)庫(kù)的性能是至關(guān)重要的。在集中式數(shù)據(jù)庫(kù)中,SQL查詢的執(zhí)行總代價(jià)=I/O代價(jià)+CPU代價(jià)+內(nèi)存代價(jià)。調(diào)整影響其執(zhí)行效率的三大因素來(lái)減少系統(tǒng)總代價(jià):一是減少查詢所產(chǎn)生的I/O總次數(shù);二是減少CPU的計(jì)算頻度,減少SQL語(yǔ)句中需要計(jì)算的量和參數(shù);三是減少對(duì)系統(tǒng)內(nèi)存的使用和占用時(shí)間。SQL語(yǔ)句優(yōu)化的一般步驟如下圖2所示:

        首先我們要檢測(cè)出不合理的SQL語(yǔ)句,首先要生成執(zhí)行計(jì)劃,最簡(jiǎn)單的辦法有兩種:一是SQL>set autotrace on自動(dòng)記錄執(zhí)行計(jì)劃;二是explain plan for ‘SQL語(yǔ)句’,然后通過(guò)select * from table(dbms_xplan.display())來(lái)查看執(zhí)行計(jì)劃。第一種方法查看執(zhí)行時(shí)間較長(zhǎng)的SQL語(yǔ)句時(shí),需要等待該語(yǔ)句執(zhí)行成功后才返回執(zhí)行計(jì)劃。

        在第一次解析之后,Oracle將SQL語(yǔ)句存放位在SGA共享池中,為所有的數(shù)據(jù)庫(kù)用戶共享,大大地提高了SQL的執(zhí)行性能并節(jié)省了內(nèi)存。當(dāng)用戶提交SQL語(yǔ)句時(shí),服務(wù)器進(jìn)程在共享池中查找有無(wú)該條語(yǔ)句,如果有就跳過(guò)語(yǔ)法分析等過(guò)程,節(jié)省了SQL語(yǔ)句的分析和編譯的開(kāi)銷。只有在共享池中不存在等價(jià)SQL語(yǔ)句的情況下,才對(duì)該語(yǔ)句作語(yǔ)法分析,并為該語(yǔ)句分配新的共享SQL區(qū)。

        圖2 SQL優(yōu)化的一般步驟

        SQL優(yōu)化[6]的實(shí)質(zhì)就是在結(jié)果正確的前提下,充分利用索引,減少表掃描的I/O次數(shù),選擇最有效的執(zhí)行計(jì)劃來(lái)執(zhí)行SQL語(yǔ)句的過(guò)程。下面的查詢優(yōu)化實(shí)例以EMP和DEPT表為查詢表,其中emp表有1204行記錄,dept有604行記錄。

        1)select子句中避免使用*

        Oracle在解析的過(guò)程中,通過(guò)查詢數(shù)據(jù)字典將*依次轉(zhuǎn)換成所有的列名,這將消耗更多的時(shí)間,降低了查詢速度。優(yōu)化例1如下表1所示:

        表1 select子句中* 優(yōu)化

        2)where子句中約束條件的順序

        Oracle采用自下而上的順序解析where子句,因此表之間的連接必須寫在其他約束條件之前,將過(guò)濾掉最多記錄的條件寫在where子句的末尾,提高查詢效率。優(yōu)化例2如下表2所示:

        表2 where子句約束條件優(yōu)化

        3)用where子句替換having子句

        where檢查每條記錄是否符合條件,通過(guò)其過(guò)濾條件減少系統(tǒng)開(kāi)銷。having子句檢查group by后的各組是否滿足條件,而Where子句在匯總之前就減少參加匯總的數(shù)據(jù)量,從而提高查詢速度。如果having子句應(yīng)用了匯總函數(shù),則不能用Where代替。優(yōu)化例3如下表3所示:

        表3 group by和having優(yōu)化

        4)子查詢“展平”技術(shù)

        子查詢“展平”指將子查詢轉(zhuǎn)變?yōu)檫B接、半連接,從而達(dá)到優(yōu)化查詢的目的。SQL首先計(jì)算位于外層查詢的from子句中關(guān)系的笛卡爾積,然后對(duì)該笛卡爾積的每個(gè)元組用where子句中的謂詞進(jìn)行過(guò)濾。因?yàn)樽硬樵円獙?duì)應(yīng)位于外層查詢的每一個(gè)元組進(jìn)行單獨(dú)的計(jì)算,從而導(dǎo)致大量的磁盤I/O操作,所以在實(shí)際應(yīng)用中,用連接查詢代替子查詢,提高查詢效率。

        找出所有工資超過(guò)2000的雇員的那些部門編號(hào)和名稱。優(yōu)化例5如下表4所示:

        表4 子查詢展平優(yōu)化

        5)用union替換or(適用于索引列)

        在where子句中or連接多個(gè)索引列,用union替換where子句中的or,可以顯著提高查詢效率。對(duì)索引列使用or將造成全表掃描,如果用or連接的列沒(méi)有被索引,查詢效率不會(huì)提高。union在進(jìn)行表連接后,對(duì)所產(chǎn)生的結(jié)果集進(jìn)行排序運(yùn)算,篩選掉重復(fù)的記錄再返回結(jié)果。

        4 結(jié)束語(yǔ)

        本文從影響SQL性能的最主要的幾個(gè)方面入手,提出了從磁盤I/O、系統(tǒng)內(nèi)存參數(shù)的調(diào)整和SQL查詢語(yǔ)句的優(yōu)化新策略,算法可行,效率較高,可以在實(shí)際中推廣應(yīng)用。實(shí)驗(yàn)結(jié)果表明,SQL語(yǔ)句的優(yōu)化使運(yùn)算速度加快,有效減少執(zhí)行時(shí)間,提高響應(yīng)速度,優(yōu)化效果理想,因此,本文提出的Oracle SQL查詢優(yōu)化方法是一種有效的數(shù)據(jù)庫(kù)性能調(diào)優(yōu)方法。

        數(shù)據(jù)庫(kù)的性能調(diào)整是一個(gè)系統(tǒng)工程,需要在大量的實(shí)踐工作中不斷地積累經(jīng)驗(yàn),結(jié)合上述各種優(yōu)化技術(shù),更好地進(jìn)行數(shù)據(jù)庫(kù)調(diào)優(yōu),實(shí)現(xiàn)數(shù)據(jù)庫(kù)檢索性能的提高。

        [1]Donald K.Burleson.劉硯,黃春,譯.Oracle高性能SQL調(diào)整[M].北京:機(jī)械工業(yè)出版社,2002.

        [2]Y.Ionnidis and S.Christodoulakis.Optimal histograms for limiting worst-case error propagation in the size of join results[J].ACM TODS,1993,18(4).

        [3]趙慧勤,李秀蘭.Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的優(yōu)化策略[J].計(jì)算機(jī)工程與應(yīng)用,2003,27(3).

        [4]劉博.Oracle數(shù)據(jù)庫(kù)性能優(yōu)化與調(diào)整[D].大連:大連理工大學(xué),2007.

        [5]谷小秋,李德昌.索引調(diào)整優(yōu)化Oracle9i工作性能的研究[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(26).

        [6]劉光霆.ORACLE中SQL查詢優(yōu)化研究[J].計(jì)算機(jī)與信息技術(shù),2008,32(5).

        [7]吳超,沈?yàn)槿?,潘舜良,宋子?某直升機(jī)工程飛行模擬器控制中心的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)仿真,2006,23(9):294-297.

        猜你喜歡
        子句緩沖區(qū)語(yǔ)句
        嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設(shè)計(jì)與實(shí)現(xiàn)
        命題邏輯中一類擴(kuò)展子句消去方法
        命題邏輯可滿足性問(wèn)題求解器的新型預(yù)處理子句消去方法
        重點(diǎn):語(yǔ)句銜接
        西夏語(yǔ)的副詞子句
        西夏學(xué)(2018年2期)2018-05-15 11:24:42
        精彩語(yǔ)句
        命題邏輯的子句集中文字的分類
        關(guān)鍵鏈技術(shù)緩沖區(qū)的確定方法研究
        如何搞定語(yǔ)句銜接題
        地理信息系統(tǒng)繪圖緩沖區(qū)技術(shù)設(shè)計(jì)與實(shí)現(xiàn)
        国产一区亚洲二区三区| 91尤物在线看| 国产av大片久久中文字幕| 精品人妻av区乱码色片| 人人妻人人澡人人爽欧美精品| 99视频一区| 国产毛片一区二区日韩| 粉嫩国产av一区二区三区| 精品少妇一区二区三区免费观 | 在线人成视频播放午夜| 夜先锋av资源网站| 国产九色AV刺激露脸对白| 中文字幕日本五十路熟女| 激情综合五月| 日韩亚洲av无码一区二区不卡| 中文字幕一区二区三区人妻精品| 日韩精品人妻一区二区三区蜜桃臀| 国产情侣一区二区| 久久精品国产亚洲av蜜臀| 人妻精品久久中文字幕| 91精品国产高清久久福利| 无码熟妇人妻av影音先锋| 这里有精品可以观看| 中文字幕日本人妻一区| 精品人妻一区二区三区在线观看| 亚洲精品无amm毛片| 无码av在线a∨天堂毛片| 亚洲天堂av路线一免费观看| 性做久久久久久免费观看| 乱人伦中文字幕成人网站在线| 日韩人妻无码中文字幕一区| 中文字幕在线乱码亚洲| 久久精品国产亚洲av电影网| 中文字幕经典一区| 日韩亚洲一区二区三区在线 | 性大毛片视频| 一区二区精品| 国产乱人伦偷精品视频还看的| 日韩精品久久无码中文字幕| 国产nv精品你懂得| 亚洲最大视频一区二区三区|