請教各位大師 ,ORACLE 11G LINUX 系統 ,資料庫temp檔案32G 了,但是能正常用,應該如何處理?
uj5u.com熱心網友回復:
檢查下temp表空間是被啥用掉了,再分析處理。臨時表空間使用率:
SELECT a.tablespace_name,
trunc(a.BYTES / 1024 / 1024 / 1024) totalG,
trunc((a.bytes - nvl(b.bytes, 0)) / 1024 / 1024 / 1024) FREEG,
trunc(nvl(b.bytes, 0) / 1024 / 1024 / 1024) usedG,
trunc(nvl(b.bytes, 0) / a.BYTES * 100) as usedpercent
FROM (SELECT tablespace_name, SUM(bytes) bytes
FROM dba_temp_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(T.BYTES_USED) bytes
FROM gv$temp_extent_pool T
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name(+);
--臨時表空間會話級詳細占用情況(前10個占用最多的):
select * from (
SELECT se.INST_ID,
se.username, --資料庫用戶名
se.SID, --SID
se.serial#, --serial#
se.status,
se.machine, --會話來源主機
se.program, --連接會話使用的程式
se.TADDR,
p.spid, --行程號
su.SQL_ID, --SQL_ID
su.TABLESPACE, --占用的表空間
su.segtype, --占用表空間的型別
su.CONTENTS,
su.BLOCKS --占用的塊數,可以反映占用空間大小
FROM gv$session se, gv$sort_usage su, gv$process p
WHERE se.saddr = su.session_addr
and se.INST_ID = su.INST_ID
and se.INST_ID = p.INST_ID
and se.PADDR = p.ADDR
order by su.BLOCKS desc
) where rownum<=10;
找出占用臨時表空間的真實sql:
select ktssosqlid from x$ktsso, v$session where ktssoses = v$session.saddr
and ktssosno = v$session.serial#
and v$session.sid=2111; (2111根據查出的實際sid修改)
uj5u.com熱心網友回復:
1. temp 檔案32G 本身沒有問題,temp 不使用會釋放,但是大小不會變)1)查詢sql 看temp的實際使用情況,2)看alert日志是否報大量temp不足,影響業務2. temp 檔案32G,如果真的不夠,可以往temp 表空間里面增加temp 檔案
uj5u.com熱心網友回復:
1、大量使用使用臨時表,2、大資料的排序操作。以上兩個因素,都會造成 TEMP 的爆漲。
uj5u.com熱心網友回復:
打開了自動擴展了吧?32G是8K資料塊下資料檔案最大的大小,猜測臨時表空間應該曾經爆掉過。對于整套系統來講,32G的臨時表空間可能無法應對高峰,需要為臨時表空間添加更多的臨時檔案來防止資料庫在使用它的時候因為空間問題報錯退出。uj5u.com熱心網友回復:
加temp檔案uj5u.com熱心網友回復:
磁盤空間足夠,就無需處理!uj5u.com熱心網友回復:
謝謝各位!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/69692.html
標籤:基礎和管理
上一篇:birt開發 加載資料庫,做另外一個報表時可以連,再建一次資料源時怎么會連接例外
下一篇:sqlldr匯入問題
