您好,登錄后才能下訂單哦!
今天用戶那邊執行一個很簡單的SQL,輸出結果集也才幾萬條,涉及三表,最大也才100萬數據量,結果卻報了表空間不足的情況,理論來說,這樣的SQL怎么也不應該吃這么多臨時表空間。
查詢臨時表空間的使用情況:
select USERNAME,SESSION_NUM,SQL_ID,TABLESPACE,SEGTYPE,BLOCKS*8192/1024/1024||' MB' as MB from v$sort_usage order by 6 desc
v$sort_usage顯示給定實例的每個排序段的信息,只有發生在臨時表空間的操作才會更新該視圖。這里不僅僅記載排序動作,只要在臨時表空間操作就會記錄,而且排序發生在內存,也不會更新該視圖的。
一般固定思維我都會認為此SQL有問題,然后我執行了一次之后,立馬就拋異常了,我此時即時反應過來不對勁,因為SQL如果要暫用臨時表空間很多,也是逐步一點一點索取空間占用的,這異常拋出太快了,轉而我就去查詢了dba_temp_files,果然是因為設計的問題,臨時表空間創建的不合理,真的是空間太小的緣故:
alter database tempfile xxx autoextend on next 200m maxsize unlimited;
臨時表空間占用的幾大場景:
1、order by or group by ;
2、索引的創建和重創建;
3、distinct、SORT-MERGE JOINS、HASH JOIN等操作;
4、union & intersect & minus sort-merge joins;
5、其他異常操作
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。