
文章插圖
Oracle在性能調(diào)優(yōu)中提供了豐富的工具和報(bào)表支持,如何從眾多指標(biāo)獲取有價(jià)值的調(diào)優(yōu)信息則需要開發(fā)測(cè)試人員具有一定的基礎(chǔ)和經(jīng)驗(yàn) 。本文主要對(duì)近幾年碰到頻率較高的幾類性能問題進(jìn)行經(jīng)驗(yàn)總結(jié),幫助開發(fā)、測(cè)試人員在調(diào)優(yōu)過程中少走彎路,盡快定位、解決性能問題 。
除去硬件故障和產(chǎn)品本身bug外,本文分為配置類,sql效率類、應(yīng)用程序邏輯三大類進(jìn)行歸納介紹 。
1.配置類
1.1綁定變量
在聯(lián)機(jī)交易系統(tǒng)中,對(duì)于頻繁執(zhí)行的SQL語句,如果所查數(shù)據(jù)分布較均勻、分區(qū)較均衡,建議使用綁定變量代替常量,以避免多次重復(fù)硬解析(Hard Parse),節(jié)省時(shí)間、資源成本 。
反例:
select * from user where userid=1;
select * from user where userid=2;
正例:
b1=1;
select * from user where userid= :b1;
b1=2;
select * from user where userid= :b1;
硬解析指標(biāo)參考AWR報(bào)告中Load Profile–>Hard Parse/Sec(參考值:< 2 or 10),筆者一般會(huì)在大于1時(shí)用以下腳本查找可能需使用綁定變量優(yōu)化的SQL 。
1、利用force_matching_signature查詢可能可以使用綁定變量的語句數(shù)量
select v.force_matching_signature ,count(*) from v$sql v where FORCE_MATCHING_SIGNATURE <> EXACT_MATCHING_SIGNATURE and PARSING_SCHEMA_NAME <> ‘SYS’ group by v.force_matching_signature having count(*)>&a order by 2;
2、查出疑似可使用綁定變量的SQL語句
select PARSING_SCHEMA_NAME,sql_text,sql_id from v$sql where force_matching_signature=’force_matching_signature_IDinStep1′;
3、 根據(jù)查詢結(jié)果與開發(fā)人員溝通,確認(rèn)是否可用綁定變量的方式對(duì)SQL語句進(jìn)行優(yōu)化 。
1)利用force_matching_signature查詢可能可以使用綁定變量的語句數(shù)量
select v.force_matching_signature ,count(*) from v$sql v where FORCE_MATCHING_SIGNATURE <> EXACT_MATCHING_SIGNATURE and PARSING_SCHEMA_NAME <> ‘SYS’ group by v.force_matching_signature having count(*)>&a order by 2;
2)查出疑似可使用綁定變量的SQL語句
select PARSING_SCHEMA_NAME,sql_text,sql_id from v$sql where force_matching_signature=’force_matching_signature_IDinStep1′;
3)根據(jù)查詢結(jié)果與開發(fā)人員溝通,確認(rèn)是否可用綁定變量的方式對(duì)SQL語句進(jìn)行優(yōu)化 。
綁定變量一定能優(yōu)化性能嗎?
–小心”綁定偷窺”!??!
T1表包含100萬條記錄,status字段含’A’,’C’兩種不同取值,其中:
status=’A’ 99萬9990條
status=’C’ 10條
SQL1:Select * from T1 where status=:b1
:b1 =’A’,則單表訪問路徑走全表掃描
SQL2:Select * from T1 where status=:b1
:b1 =’C’,則單表訪問路徑走索引范圍掃描
理想情況下,傳入不同變量的值,應(yīng)該走不一樣的單表訪問路徑,但Oracle優(yōu)化器還不夠智能 。Oracle在第一次做硬解析(內(nèi)存中沒有緩存執(zhí)行計(jì)劃)的時(shí)候,會(huì)先”偷窺”一眼,變量的值傳入的是什么,如果傳入的是”A”,則走全表掃描;并且把執(zhí)行計(jì)劃緩存 。
下一次執(zhí)行的時(shí)候,由于執(zhí)行計(jì)劃已經(jīng)緩存,就不再”偷窺”變量的值了,而是直接沿用全表掃描的執(zhí)行計(jì)劃 。這個(gè)時(shí)候即使傳入的status變量為C,也走不上索引了 。
這個(gè)現(xiàn)象稱為”綁定變量偷窺現(xiàn)象” 。一條SQL語句適合采用何種解析方式需要衡量硬解析帶來的資源開銷和查詢計(jì)劃不準(zhǔn)帶來的資源開銷,從而確定是否采用綁定變量 。兩種解析適用場(chǎng)景總結(jié)如下:
1.2連接池
經(jīng)常收到一些”怎么查看應(yīng)用到Oracle連接池是否夠用”,”系統(tǒng)tps很低,SQL也簡(jiǎn)單,為啥數(shù)據(jù)庫服務(wù)器cpu>10%?”
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 網(wǎng)站優(yōu)化的步驟和技巧 網(wǎng)站seo怎么做成效最大
- oracle數(shù)據(jù)庫常用命令 mysql數(shù)據(jù)遷移到oracle
- 淘寶店鋪老鏈接如何優(yōu)化提升,詳細(xì)操作思路奉上,助你更上一層樓
- 拼多多新店提升3倍爆款主圖流程主圖優(yōu)化技巧
- 性能挽救婚姻嗎 挽救婚姻的方法
- 店鋪詳情優(yōu)化技巧是什么 店鋪詳情怎么優(yōu)化
- rds數(shù)據(jù)庫是什么意思 rds是什么意思
- realme GT Neo2T評(píng)測(cè):國內(nèi)首發(fā)天璣1200AI 性能再升級(jí)
- 想要提高轉(zhuǎn)化率,下面的淘寶店鋪基礎(chǔ)優(yōu)化一定要做好
- 電腦怎么設(shè)置平衡cpu的性能和功耗?
