OracleSQL語句高版本分析-創(chuàng)新互聯(lián)

OracleSQL語句高版本分析

1.     何為高版本

創(chuàng)新互聯(lián)建站IDC提供業(yè)務(wù):西信服務(wù)器托管,成都服務(wù)器租用,西信服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。

每次執(zhí)行一條SQL語句時(shí),如果其對(duì)應(yīng)的當(dāng)前已經(jīng)存在于library cache里的一個(gè)父游標(biāo)下的各個(gè)子游標(biāo)都不能被該SQL語句重新使用(即共享),則會(huì)產(chǎn)生一個(gè)新的子游標(biāo),此時(shí)就會(huì)在V$SQL_SHARED_CURSOR里新增一行,分別描述該SQL語句不能使用當(dāng)前已經(jīng)存在的各個(gè)子游標(biāo)的原因。當(dāng)然一個(gè)父游標(biāo)下的第一個(gè)子游標(biāo)產(chǎn)生時(shí)也會(huì)在該視圖上新增一行,只是各個(gè)該視圖上的描述原因的列的值都為N,在V$SQL_SHARED_CURSOR行數(shù)就是此SQL語句執(zhí)行的版本數(shù),也就種類數(shù)。

2.     怎樣才會(huì)產(chǎn)生高版本

  A.ORACLE使用子游標(biāo)去區(qū)分一個(gè)不能被共享的SQL,因?yàn)殡m然SQL相同,但是SQL所指向的對(duì)象使不同的。也就是說,這些SQL的父游標(biāo)都是一樣的,HASH_VALUE值都相同。例如,數(shù)據(jù)庫有三個(gè)表T,有這樣一個(gè)語句,select *from T,由于每個(gè)T都被不同的對(duì)象使用或是用戶使用,而在數(shù)據(jù)庫級(jí)別,這些語句都是一樣的,HASH_VALUE都相同,但是他們的子游標(biāo)就不同了,這就會(huì)產(chǎn)生High Version Counts,由于HASH_VALUE相同,持有LATCH會(huì)不放,所以當(dāng)PARSE的時(shí)候就會(huì)產(chǎn)生LATCH FREE。這是產(chǎn)生High Version的一個(gè)方面;

 B.對(duì)于字符類型的字段,進(jìn)行綁定變量的時(shí)候,第一次會(huì)使用32字節(jié)的BUFFER,如果該值小于32字節(jié)的話,第二次執(zhí)行這個(gè)SQL的時(shí)候,如果小于32字節(jié),那么可以共享這個(gè)CURSOR,如果大于,就無法共享,原因就是BIND_MISMATCH,此時(shí)會(huì)產(chǎn)生一個(gè)子CURSOR,同時(shí)分配大于32字節(jié)的BIND BUFFER;

 C.對(duì)于NULL值,因?yàn)?/strong>oracle對(duì)NULL這個(gè)值表示什么都不是,如果變量為NULL則也會(huì)新一個(gè)子游標(biāo)。

3.     有何后果

發(fā)現(xiàn)Oracle因?yàn)槟承┰虿豢芍赜眠@些SQL。當(dāng)這類SQL執(zhí)行次數(shù)很多,就會(huì)占用大量的shared pool,引起library cache pinlibrary cache的等待事件,嚴(yán)重引起主機(jī)掛起。

4.     解決方法

A. 數(shù)據(jù)庫升級(jí)

l 版本升級(jí)( 11.2.0.4)升級(jí)包,但分險(xiǎn)較大,周期長,需要測試驗(yàn)證,搭建測試環(huán)境,需要更新文件有以下文件

p13390677_112040_Linux-x86-64_1of7.zip

p13390677_112040_Linux-x86-64_2of7.zip

p13390677_112040_Linux-x86-64_3of7.zip

  • 定時(shí)清 ALTERSYSTEM FLUSH SHARED_POOL;

B. 程序修改方法

l 程序?qū)ψ址兞吭O(shè)定固定大小

l 對(duì)NULL值特別處理,使用不同的InSert 語句

l Insert操作時(shí)防止同一主鍵同時(shí)插入。

  1. 5.     實(shí)例分析

select sql_id,count(0)from gv$sqlgroupby sql_idorderby2desc;

Oracle SQL 語句高版本分析

version_count對(duì)應(yīng)子游標(biāo)數(shù):

select sql_id,sql_text,executions,version_countfromgv$sqlareawhere sql_id='6hk042t0trr1t';

Oracle SQL 語句高版本分析

selectsql_id,child_number,sql_text,optimizer_mode,plan_hash_valuefrom gv$sqlwhere sql_id='6hk042t0trr1t';

Oracle SQL 語句高版本分析

查子游標(biāo)不能共享(失效的原因,如optimizer_mode_mismatch,BIND_MISMATCH等原因)的原因:

selectchild_number,optimizer_mode_mismatch,BIND_MISMATCH from gv$sql_shared_cursorwhere sql_id='6hk042t0trr1t'orderby child_number;

Oracle SQL 語句高版本分析

綁定失效的時(shí)候,查看一下每次綁定變量的值:

selectposition,LAST_CAPTURED,datatype_string,value_stringfromgv$sql_bind_capturewhere sql_id='6hk042t0trr1t';

Oracle SQL 語句高版本分析

綁定變量字段長度變化的情況:

select *from dba_hist_sqlbind where sql_id='6hk042t0trr1t';

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享文章:OracleSQL語句高版本分析-創(chuàng)新互聯(lián)
本文地址:http://bm7419.com/article8/gioip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站排名、定制開發(fā)、App開發(fā)、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)