一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Oracle - 關于SQL執行計劃錯誤導致臨時表空間不足的問題

關于SQL執行計劃錯誤導致臨時表空間不足的問題

2019-11-21 15:19數據庫教程網 Oracle

故障現象:臨時表空間不足的問題已經報錯過3次,客戶也煩了,前兩次都是同事添加5G的數據文件,目前已經達到40G,占用臨時表空間主要是distinct 和group by 以及Union all 表數據量在200W左右,也不至于把40G的臨時表空間撐爆。

故障現象:臨時表空間不足的問題已經報錯過3次,客戶也煩了,前兩次都是同事添加5G的數據文件,目前已經達到40G,占用臨時表空間主要是distinct 和group by 以及Union all 表數據量在200W左右,也不至于把40G的臨時表空間撐爆。

原因分析:既然排序用不了這么多臨時表空間應該是別的原因造成。

從包含故障時間段的AWR報告中可以看出這一階段DBtime蠻高的,并且sql execute elapsed time 竟然占到了99.43%,可以斷定是SQL語句引起的。

關于SQL執行計劃錯誤導致臨時表空間不足的問題

通過TOP SQL定位到出問題的SQL

關于SQL執行計劃錯誤導致臨時表空間不足的問題

確認是以下SQL引起:

select 'A', 
d.explanation, --金融機構標識碼 
c.account_no, --交易賬號 
to_date(a.batchentrydate, 'yyyy-mm-dd'), --發生日期 
c.currencycode, --幣種 
SUM(decode(A.Creditdebit, 'C', a.transactionamount, 0)), --當日貸方發生額 
SUM(decode(A.Creditdebit, 'D', a.transactionamount, 0)), --當日借方發生額 
case 
when C.Currencycode = 'JPY' Then 
Round(c.Ccyledgerbalance, 0) 
else 
c.ccyledgerbalance 
End Balance, --賬戶余額 
--b.instcode instcode, --系統虛擬機構代號 
1 datastatus, --前臺對應的數據狀態 
c.account_no || c.currencycode || '2013-01-04', 
to_date('2013-01-04', 'yyyy-mm-dd') 
from df_cust C 
left join (select distinct ACCOUNTBRANCH, 
DESCRIPTION, 
MASTERNO, 
CURRENCYCODE, 
ACCOUNT_NUMBER, 
SEQNO, 
ACCT_CLASS_CODE, 
PRODUCTCODE, 
VALUEDT_YYYY, 
VALUEDT_MM, 
VALUEDT_DD, 
BATCHENTRYDATE, 
VALUEDT_YYYYMMDD, 
NARRATIONPOST, 
TRANSACTIONAMOUNT, 
CREDITDEBIT, 
ACCOUNTBRANCH1, 
SEGMENTCODE, 
REFERENCENUMBER, 
NARRATIONTRAN, 
BATCHNUMBER, 
GLDEPTID, 
ARMCODE, 
EXTREFNO, 
MAKERID, 
CHECKERID, 
CHANNELID, 
TRANSACTION_AMT_IN_USD, 
ACCSHORTNAME, 
ARMNAME, 
SEGNAME, 
TXNCODE, 
REVERSALFLAG, 
EBBSREFERENCE, 
TRANSTYPECODE, 
CUSTOMERRATE, 
ADVTREASURYFLAG, 
VA_FLAG 
from df_acmov_today 
where Creditdebit in ('C', 'D')) a on a.account_number = 
c.account_no 
Left Join Da_Mid_Acc_Gl_Dic D On D.Source = A.Accountbranch 
Where exists (select 1 
from acc.t_base_account b 
where b.account = c.account_no 
and b.currence_code = c.currencycode) 
and a.account_number is not null 
and c.account_no like '0%' 
group by d.explanation, --金融機構標識碼 
c.account_no, --交易賬號 
a.batchentrydate, --發生日期 
c.currencycode, --幣種 
C.Ccyledgerbalance--系統機構代號

觀察并分析其執行計劃,貌似也沒有什么問題,因為df_acmov_today(200W左右數據)是每天都清空的,沒有索引,全表掃描,nestloops也正常。

但是在執行SQL語句時通過腳本監控臨時表空間的使用情況,發現臨時表空間使用率很快就達到了40G左右。又要臨時表空間不足了…

使用dbms_stats.gather_table_stats 分析了下表,然后再去執行語句,發現很快。這下問題清楚了,SQL執行計劃錯誤導致的問題。

在對比下先前的SQL執行計劃,發現在執行計劃中基數不對,竟然為1 ,估算的差距太大了。

為什么每天做分析的表(crontab job)最后執行計劃卻不對?

最后竟然是這樣:使用crontab 在凌晨2:30對表做分析,但是早上6點。其他任務對表做了,truncate 和Insert into 從而導致該原因。

最終調整計劃任務時間問題完全解決。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 车上小婕子系列辣文小说 | 亚欧洲乱码视频一二三区 | 欧美特黄特色aaa大片免费看 | 好姑娘在线视频观看免费 | 红色一片在线影视 | 日韩欧美一区二区不卡 | 亚洲 欧美 中文 日韩 另类 | 青草色视频 | 香蕉eeww99国产在线观看 | 国产精品久久久久jk制服 | 太深了 太粗h1v1 | 免费欧美一级片 | 色欲麻豆国产福利精品 | 久久理论片 | 国产成人在线免费视频 | 欧美日韩国产另类一区二区三区 | 国精视频一区二区视频 | 国产馆在线观看免费的 | 日本连裤袜xxxxx在线视频 | 美女又爽又黄免费 | 日本免费一区二区三区 | 国产高清自拍视频 | 国产情侣露脸自拍 | 操国产美女 | 欧美在线播放成人免费 | 欧美一区精品二区三区 | 无限好资源第一片免费韩国 | 免费91麻豆精品国产自产在线观看 | 国产精品九九免费视频 | 美女扒开腿让男生捅 | 日本成人黄色网址 | 国产目拍亚洲精品一区二区三区 | 欧美日本道免费一区二区三区 | 极品美女写真菠萝蜜视频 | 香蕉视频在线观看网站 | 99久久国产亚洲综合精品 | 欧美日韩视频在线成人 | 精品国产综合区久久久久久 | 国内交换一区二区三区 | 免费国产好深啊好涨好硬视频 | 国内自拍2020 |