當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]根據(jù)statspack報(bào)表優(yōu)化oracle數(shù)據(jù)庫實(shí)例之“DB file scattered read”oracle的等待事件是衡量oracle運(yùn)行狀況的重要依據(jù)及指標(biāo)。等待事件的概念是在oracle7

根據(jù)statspack報(bào)表優(yōu)化oracle數(shù)據(jù)庫實(shí)例之“DB file scattered read”

oracle的等待事件是衡量oracle運(yùn)行狀況的重要依據(jù)及指標(biāo)。

等待事件的概念是在oracle7.0.1.2中引入的,大致有100個(gè)等待事件。在oracle8.0中這個(gè)數(shù)目增加到了大約150個(gè),在oracle8i中大約有200個(gè)事件,到oracle9i時(shí),等待事件增加到360個(gè)。

Oracle的等待事件主要有兩種類型,即空閑(idle)等待事件和非空閑(non-idle)等待事件??臻e事件指oracle正在等待某種工作,在診斷和優(yōu)化數(shù)據(jù)庫的時(shí)候,我們不用過多注意這部分事件。

非空閑等待事件專門針對oracle的活動,指數(shù)據(jù)庫任務(wù)或應(yīng)用運(yùn)行過程中發(fā)生的等待,這些等待事件是我們在調(diào)整數(shù)據(jù)庫的時(shí)候應(yīng)該關(guān)注與研究的。

常見的非空閑等待事件有:db file scattered read; db file sequential read; buffer busy waits; free buffer waits; enqueue; latch free; log file parallel write; log file sync.

Db file scattered read的產(chǎn)生


本文主要解釋了db file scattered read-DB文件分散讀取等待事件產(chǎn)生的原因與優(yōu)化的方法。

Db file scattered read等待事件通常顯示與全表掃描相關(guān)的等待。

當(dāng)數(shù)據(jù)庫進(jìn)行全表掃描時(shí),基于性能的考慮,數(shù)據(jù)會分散(scattered)讀入buffer cache。如果這個(gè)等待事件筆記哦顯著,可能說明對于某些全表掃描的表,沒有創(chuàng)建索引或者索引沒有有效利用。我們可能需要檢查這些數(shù)據(jù)表以便確定是否進(jìn)行了正確的設(shè)置。

然而這個(gè)等待事件并不總意味著性能底下,在某些條件下oracle會主動使用全表掃描來替換索引掃描以提高性能,這和訪問的數(shù)據(jù)量有關(guān),在CBO下oracle會進(jìn)行更為智能的選擇,在RBO下oracle更傾向于使用索引。

因?yàn)槿頀呙璞恢糜贚RU(least recently used)列表的冷端(cold end),對于頻繁訪問的較小的數(shù)據(jù)表,可以選擇把他們cache到內(nèi)存中,以避免反復(fù)讀取。

有兩種方法可以幫助我們找出全表掃描較多的sql語句。

Statspack的報(bào)表


Top 5 Timed Events

~~~~~~~~~~~~~~~~~~???????????????????????????????????????????????????? % Total

Event?????????????????????????????????????????????? Waits??? Time (s) Ela Time

-------------------------------------------- ------------ ----------- --------

CPU time??????? ??????????????????????????????????????????????????246??? 50.79

db file sequential read??????????????????????????? 98,012???????? 208??? 43.01

db file scattered read????????????????????????????? 1,001????????? 11???? 2.20

direct path write????????????????? ?????????????????2,171?????????? 7???? 1.52

control file parallel write???????????????????????? 1,404?????????? 3????? .56

―――――――――


Buffer Gets??? Executions? Gets per Exec? %Total Time (s)? Time (s) Hash Value

--------------- ------------ -------------- ------ -------- --------- ----------

????? 4,392,146??????????? 1??? 4,392,146.0?? 39.6??? 64.73??? 247.08? 719265629

Module: msmdsrv.exe

SELECT "DW"."D_TIME_DAY"."DAY_ID" , "DW"."D_PRODUCT_FUNCTION_SIM

S"."PRODUCT_FUNCTION_ID" , "DW"."D_PRODUCT_SCREEN_SIMS"."PRODUCT

_SCREEN_ID" , "DW"."D_PRODUCT_BRAND_SIMS"."ALL_ID" , "DW"."D_PRO

DUCT_BRAND_SIMS"."PRODUCT_BRAND_ID" , "DW"."D_ORG_STORE_CHANNEL_

TYPE_SIMS"."ALL_ID" , "DW"."D_ORG_STORE_CHANNEL_TYPE_SIMS"."CHAN


?

????? 1,092,126??????????? 6????? 182,021.0??? 9.8???? 8.54????? 8.33 2845961438

Module: JDBC Thin Client

??????????????????? select

???? bs.model_name,??????????????????????? decode(grouping(bs.fu

nction_name)+grouping(bs.spec_name)+ grouping(bs.screen_name)+gr

ouping(bs.model_name),????????????????? ??????1,bs.function_name

?||bs.spec_name ||bs.screen_name ||'小計(jì)',


?

??????? 625,322??????????? 2????? 312,661.0??? 5.6??? 16.21???? 24.55 4097549484

Module: JDBC Thin Client

??????????????????? select

???? bs.spec_name,??????????????????????? decode(grouping(bs.fun

ction_name)+grouping(bs.spec_name)+ grouping(bs.screen_name),

??????????????????????? 1 ,bs.function_name ||bs.spec_name ||'小

計(jì)',??????????????????????? 2, bs.function_name ||'小計(jì)',


?

??????? 604,296?????????? 14?????? 43,164.0??? 5.4??? 15.89???? 15.55 3794571418

Module: JDBC Thin Client

?select???????????? ??decode(grouping(ttt.category_name)+groupin

g(ttt.function_name)+grouping(ttt.spec_name)+grouping(ttt.model_

name)+grouping(ttt.is_master),0,ttt.model_name,2,ttt.category_na

me||'-'||ttt.function_name||'-'||ttt.spec_name||'-小計(jì)',3,ttt.ca

tegory_name||'-'||ttt.function_name||'-小計(jì)',4,ttt.category_name


?

??????? 560,367?????????? 29?????? 19,323.0??? 5.1???? 2.72????? 2.74 1125417254

select r.ID,r.NAME,r.INFORMATION from USER_USERGROUP u,ROLE r,US

ERGROUP_ROLE

d u.USERID= :1


?

??????? 520,226?????????? 90??????? 5,780.3??? 4.7??? 11.52???? 14.24? 645606369

Module: JDBC Thin Client

BEGIN ctl.pkg_public_int.get_data(:1,:2,:3,:4) ; END;


?

??????? 367,777??????????? 2????? 183,888.5??? 3.3???? 3.10????? 3.75 1644183172

Module: JDBC Thin Client

??????????????????? select

???? bs.model_name,??????????????????????? decode(grouping(bs.fu

nction_name)+grouping(bs.spec_name)+ grouping(bs.screen_name)+gr

ouping(bs.model_name),??????????????????????? 1,bs.function_name

?||bs.spec_name ||bs.screen_name ||'小計(jì)',


?

??????? 360,107??????????? 2????? 180,053.5??? 3.2???? 2.80????? 2.74 2652674913

―――――――――――――――

注意到以上很多查詢導(dǎo)致的Buffer Gets都非常龐大,我們非常有理由懷疑索引存在問題,甚至缺少必要的索引。以上記錄的是sql的片段,通過hash value值結(jié)合v$sqltext我們可以獲得完整的sql語句。


?

SELECT * FROM v$sqltext WHERE hash_value = 4097549484


ORDER BY piece


?

V$session_longops動態(tài)性能視圖


??? V$session_longops動態(tài)性能視圖中記錄了長時(shí)間運(yùn)行(超過6秒)的事務(wù),可能很多是全表掃描操作(不管怎樣,這部分信息都值得我們注意)。當(dāng)db file scattered read等待時(shí)間比較顯著時(shí),可以結(jié)合v$session_longops視圖來進(jìn)行診斷。

1,? 檢索出長時(shí)間運(yùn)行事件相關(guān)表

??? SELECT target,COUNT(*) c FROM v$session_longops


GROUP BY target


ORDER BY c DESC


Target?????????? c

ODS.SM_SALES??? 26

DW.FS_DISTRIBUTION_BRANCH_PRODUCT 16

ODS.TL_PICKLISTITEM???? 13

ODS.CR_SHIPMENT_ITEM 12

ODS.CR_SHIPMENT_STATUS??? 12

ODS.CR_ARP_PLAN??? 11

ODS.CR_FACILITY_DAILY_PSI_SUMMARY??? 11

ODS.CR_RECEIPT_BALANCE_DAILY_D 11

ODS.CR_SHIPMENT_ATTRIBUTE???? 11

ODS.CR_ORDER_INFO????? 11

ODS.CR_ORDER_HEADER 11

TODS.CR_RECEIPT_ATTRIBUTE???? 11

TODS.CR_PARTY_ATTRIBUTE?? 11

ODS.CR_SHIPMENT??? 9

ODS.CR_CUSTOMER_DAILY_PSI_SUMMARY?????? 6

ODS.FI_REPORT_DATA_H 6

FBI.LOG_AP 3

CTL.ETL_LOG????? 2

ODS.FI_V_HUIKUAN?? 2

(stale) obj# 303378?????? 1

ODS.CR_INVENTORY_ITEM_VARIANCE 1

DW.F_EXPIATION_CRM???? 1

2,? 檢索得到長時(shí)間執(zhí)行事務(wù)的具體sql語句的hash_value

SELECT DISTINCT sql_hash_value FROM v$session_longops


WHERE target = 'ODS.SM_SALES'

375479500

3850935052

3,? 找出具體執(zhí)行sql語句

SELECT * FROM v$sqltext WHERE hash_value = 375479500


ORDER BY piece

整理得到的sql語句結(jié)果,

SELECT TO_CHAR(S.ENTRY_DATE, 'yyyymmdd'),


???????? IO.STORE_ID,


???????? IPI.PRODUCT_ID,


???????? SUM(S.QUANTITY),


???????? SUM(S.TOTAL_AMOUNT),


???????? SUBSTR(IPI.PRODUCT_ID, 1, 10),


???????? SUM(SUM(S.QUANTITY)) OVER(PARTITION BY TO_CHAR(S.ENTRY_DATE, 'yyyymm'), IO.STORE_ID, IPI.PRODUCT_ID ORDER BY TO_CHAR(S.ENTRY_DATE, 'yyyymmdd')),


???????? SUM(SUM(S.TOTAL_AMOUNT)) OVER(PARTITION BY TO_CHAR(S.ENTRY_DATE, 'yyyymm'), IO.STORE_ID, IPI.PRODUCT_ID ORDER BY TO_CHAR(S.ENTRY_DATE, 'yyyymmdd'))


??? FROM ODS.I_PRODUCT_INFO?????????? IPI,


???????? ODS.I_ORG_STORE_RELATIONSHIP IO,


???????? ODS.SM_SALES???????????????? S


?? WHERE S.PRODUCT_ID = IPI.PRODUCT_ID


???? AND S.MARKET_PLACE_ID = IO.STORE_ID


???? AND TO_CHAR(S.ENTRY_DATE, 'yyyymmdd') BETWEEN '20081108' AND '20081110'


?? GROUP BY S.ENTRY_DATE, IPI.PRODUCT_ID, IO.STORE_ID

4,并在pl/sql develop開發(fā)工具中獲得執(zhí)行語句的查詢執(zhí)行計(jì)劃如下。

SELECT STATEMENT, GOAL = CHOOSE?????????????????????????????

?WINDOW SORT????????????????????????????

? SORT GROUP BY????????????????????????????????

?? NESTED LOOPS OUTER?????????????????????????????????

??? NESTED LOOPS??????????????????????????????

???? TABLE ACCESS FULL?????? ODS?????? SM_SALES?????????????????

???? INDEX UNIQUE SCAN????? ODS?????? I_ORG_STORE_RELATIONSHIP_PK??????????????

??? INDEX UNIQUE SCAN ODS?????? I_PRODUCT_INFO_PK????????????????????

5,? 分析查詢相關(guān)的幾個(gè)源數(shù)據(jù)表

表名稱

Row number

關(guān)聯(lián)字段索引

ODS.I_PRODUCT_INFO??????? IPI

23779

Yes

ODS.I_ORG_STORE_RELATIONSHIP IO

9632


Yes

ODS.SM_SALES???????????????? S

6147142


Yes

??? 從對源表的分析數(shù)據(jù)我們可以看到,目前執(zhí)行方式的問題有兩個(gè),首先是使用大表(擁有600萬條以上記錄的ods.sm_sales)做了嵌套循環(huán)的驅(qū)動表;其次,就是這個(gè)大表上的索引并沒有得到合理的利用。從而導(dǎo)致本語句的執(zhí)行時(shí)間25秒。

6,優(yōu)化方法

??? 首先我們可以使用oracle的hint,強(qiáng)制在大表ods.sm_sales上使用索引。其次由于在這三個(gè)表關(guān)聯(lián)時(shí),另外兩個(gè)小表ipi和io都是需要跟中間大表s進(jìn)行關(guān)聯(lián),所以使用nested loop將無法有效使用更多的索引進(jìn)行關(guān)聯(lián),所以建議使用ordered,use_hash結(jié)合swap_join_input使得查詢按照hash join方式,并在兩次hashjoin時(shí)都將小表放在驅(qū)動表的位置上。執(zhí)行優(yōu)化后的語句入下。優(yōu)化后執(zhí)行時(shí)間為5秒 。

SELECT /*+ index(s SM_SALES_I5) ordered use_hash(ipi,s,io) swap_join_inputs(io)*/


???????? TO_CHAR(S.ENTRY_DATE, 'yyyymmdd'),


???????? IO.STORE_ID,


???????? IPI.PRODUCT_ID,


???????? SUM(S.QUANTITY),


???????? SUM(S.TOTAL_AMOUNT),


???????? SUBSTR(IPI.PRODUCT_ID, 1, 10),


???????? SUM(SUM(S.QUANTITY)) OVER(PARTITION BY TO_CHAR(S.ENTRY_DATE, 'yyyymm'),IO.STORE_ID, IPI.PRODUCT_ID ORDER BY TO_CHAR(S.ENTRY_DATE, 'yyyymmdd')),


???????? SUM(SUM(S.TOTAL_AMOUNT)) OVER(PARTITION BY TO_CHAR(S.ENTRY_DATE, 'yyyymm'),IO.STORE_ID, IPI.PRODUCT_ID ORDER BY TO_CHAR(S.ENTRY_DATE, 'yyyymmdd'))


??? FROM ODS.I_PRODUCT_INFO?????????? IPI? ,


???????? ODS.SM_SALES???????????????? S,


???????? ODS.I_ORG_STORE_RELATIONSHIP IO??????


?? WHERE S.MARKET_PLACE_ID = IO.STORE_ID


???? AND S.PRODUCT_ID = IPI.PRODUCT_ID


???? AND TO_CHAR(S.ENTRY_DATE, 'yyyymmdd') BETWEEN '20081108' AND '20081110'


?? GROUP BY S.ENTRY_DATE, IPI.PRODUCT_ID, IO.STORE_ID

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉