由於回收站存在大量物件導致查詢表空間使用率較慢
日常監控免不了監控表空間使用情況,經常查詢的檢視是dba_free_space 和dba_data_files, 類似以下語句:
set pagesize 9999
set pagesize 9999
set linesize 132
select
f.tablespace_name,
a.Total_mb,
f.Free_mb,
round(a.total_MB-f.free_mb,2) Used_mb,
round((f.free_MB/a.total_MB)*100) "% Free"
from
(select tablespace_name, sum(bytes/(1024*1024)) total_MB from dba_data_files group by tablespace_name) a,
(select tablespace_name, round(sum(bytes/(1024*1024))) free_MB from dba_free_space group by tablespace_name) f
WHERE a.tablespace_name = f.tablespace_name(+)
order by "% Free"
/
但是有時發現查詢他非常緩慢,這是因為dba_free_space 裡面條目過多,所以查詢起來非常緩慢,為啥這個view裡面條目如此
之多呢,有時候會發現裡面的extent居然還是連續的, 其實這是因為drop 物件造成的,下面的例子可以展示一下這個場景:
create table t1 as select * from dba_tables where rownum<1000;
create table t2 as select * from dba_tables where rownum<1000;
分別新建兩個表,然後查詢他們的extent情況
select * from dba_extents where segment_NAME IN ('T1','T2')
MAOB T1 TABLE USERS 0 4 520 65536 8 4
MAOB T1 TABLE USERS 1 4 528 65536 8 4
MAOB T1 TABLE USERS 2 4 536 65536 8 4
MAOB T1 TABLE USERS 3 4 7184 65536 8 4
MAOB T1 TABLE USERS 4 4 7192 65536 8 4
MAOB T1 TABLE USERS 5 4 7200 65536 8 4
MAOB T2 TABLE USERS 0 4 7208 65536 8 4 <<T2 是接著T1的最後一個extent分配的
MAOB T2 TABLE USERS 1 4 7216 65536 8 4
MAOB T2 TABLE USERS 2 4 7224 65536 8 4
MAOB T2 TABLE USERS 3 4 7232 65536 8 4
MAOB T2 TABLE USERS 4 4 7240 65536 8 4
MAOB T2 TABLE USERS 5 4 7248 65536 8 4
對兩個表進行drop 之後,我們查詢 dba_free_space情況
select * from dba_free_space where file_id=4 order by block_id
USERS 4 520 65536 8 4
USERS 4 528 65536 8 4
USERS 4 536 65536 8 4 <<<以上3個是T1的前三個extent 都是連續的,並沒有進行合併
USERS 4 640 41943040 5120 4
USERS 4 7184 65536 8 4
USERS 4 7192 65536 8 4
USERS 4 7200 65536 8 4 <<<以上3個是T1的後三個extent 都是連續的,並沒有進行合併
USERS 4 7208 65536 8 4
USERS 4 7216 65536 8 4
USERS 4 7224 65536 8 4
USERS 4 7232 65536 8 4
USERS 4 7240 65536 8 4
USERS 4 7248 65536 8 4 <<以上6個是T2的extent,都是連續的,並沒有進行合併
USERS 4 7256 524288 64 4 <<這個和T2的extents是連續的,但是也沒有合併
這些extents都是保持原樣的出現在了dba_free_space,所以造成條目增多,我們接下來進行purge
purge recyclebin;
我們再次查詢 dba_free_space情況 select * from dba_free_space where file_id=4 order by block_id
USERS 4 520 196608 24 4 <<3個extent 已經合併成一個24blocks的新extent
USERS 4 640 41943040 5120 4
USERS 4 7184 1114112 136 4 <<6個extent 共計72個block連同原有的相鄰extent 裡面的64 個block合併成為了一個新的136block的extent
dba_free_space條目也大幅減少,所以對於recyclebin裡面有著大量drop的表,尤其是這些表曾經分配了大量的extent,就會出現此類問題。
set pagesize 9999
set pagesize 9999
set linesize 132
select
f.tablespace_name,
a.Total_mb,
f.Free_mb,
round(a.total_MB-f.free_mb,2) Used_mb,
round((f.free_MB/a.total_MB)*100) "% Free"
from
(select tablespace_name, sum(bytes/(1024*1024)) total_MB from dba_data_files group by tablespace_name) a,
(select tablespace_name, round(sum(bytes/(1024*1024))) free_MB from dba_free_space group by tablespace_name) f
WHERE a.tablespace_name = f.tablespace_name(+)
order by "% Free"
/
但是有時發現查詢他非常緩慢,這是因為dba_free_space 裡面條目過多,所以查詢起來非常緩慢,為啥這個view裡面條目如此
之多呢,有時候會發現裡面的extent居然還是連續的, 其實這是因為drop 物件造成的,下面的例子可以展示一下這個場景:
create table t1 as select * from dba_tables where rownum<1000;
create table t2 as select * from dba_tables where rownum<1000;
分別新建兩個表,然後查詢他們的extent情況
select * from dba_extents where segment_NAME IN ('T1','T2')
MAOB T1 TABLE USERS 0 4 520 65536 8 4
MAOB T1 TABLE USERS 1 4 528 65536 8 4
MAOB T1 TABLE USERS 2 4 536 65536 8 4
MAOB T1 TABLE USERS 3 4 7184 65536 8 4
MAOB T1 TABLE USERS 4 4 7192 65536 8 4
MAOB T1 TABLE USERS 5 4 7200 65536 8 4
MAOB T2 TABLE USERS 0 4 7208 65536 8 4 <<T2 是接著T1的最後一個extent分配的
MAOB T2 TABLE USERS 1 4 7216 65536 8 4
MAOB T2 TABLE USERS 2 4 7224 65536 8 4
MAOB T2 TABLE USERS 3 4 7232 65536 8 4
MAOB T2 TABLE USERS 4 4 7240 65536 8 4
MAOB T2 TABLE USERS 5 4 7248 65536 8 4
對兩個表進行drop 之後,我們查詢 dba_free_space情況
select * from dba_free_space where file_id=4 order by block_id
USERS 4 520 65536 8 4
USERS 4 528 65536 8 4
USERS 4 536 65536 8 4 <<<以上3個是T1的前三個extent 都是連續的,並沒有進行合併
USERS 4 640 41943040 5120 4
USERS 4 7184 65536 8 4
USERS 4 7192 65536 8 4
USERS 4 7200 65536 8 4 <<<以上3個是T1的後三個extent 都是連續的,並沒有進行合併
USERS 4 7208 65536 8 4
USERS 4 7216 65536 8 4
USERS 4 7224 65536 8 4
USERS 4 7232 65536 8 4
USERS 4 7240 65536 8 4
USERS 4 7248 65536 8 4 <<以上6個是T2的extent,都是連續的,並沒有進行合併
USERS 4 7256 524288 64 4 <<這個和T2的extents是連續的,但是也沒有合併
這些extents都是保持原樣的出現在了dba_free_space,所以造成條目增多,我們接下來進行purge
purge recyclebin;
我們再次查詢 dba_free_space情況 select * from dba_free_space where file_id=4 order by block_id
USERS 4 520 196608 24 4 <<3個extent 已經合併成一個24blocks的新extent
USERS 4 640 41943040 5120 4
USERS 4 7184 1114112 136 4 <<6個extent 共計72個block連同原有的相鄰extent 裡面的64 個block合併成為了一個新的136block的extent
dba_free_space條目也大幅減少,所以對於recyclebin裡面有著大量drop的表,尤其是這些表曾經分配了大量的extent,就會出現此類問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24585765/viewspace-2136793/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle表空間使用率查詢Oracle
- 臨時表空間和回滾表空間使用率查詢
- Oracle SYSAUX 表空間使用率100% 導致的DB 故障OracleUX
- oracle 剩餘表空間查詢慢,解決辦法Oracle
- mysql 表資料量大量查詢慢如何優化MySql優化
- 【UNDO】Oracle undo表空間使用率過高,因為一個查詢Oracle
- [20181130]hash衝突導致查詢緩慢.txt
- 查詢表空間使用情況
- 表空間使用量查詢
- oracle11g 查詢臨時表空間的使用率和正在使用臨時表空間的使用者Oracle
- MySQL:RR模式下insert也可能導致查詢慢MySql模式
- 關於oracle的空間查詢Oracle
- mybatis lambdaQuery 查詢條件導致空指標MyBatis指標
- 使用查詢語句導致 RDS 伺服器報硬碟磁碟空間不足伺服器硬碟
- Oracle11g新增檢視查詢表空間使用率DBA_TABLESPACE_USAGE_METRICSOracle
- 查詢表空間使用情況的指令碼指令碼
- Oracle查詢表空間的每日增長量Oracle
- 達夢資料庫表空間等空間大小查詢方法總結資料庫
- 故障分析 | 血的教訓-由慢查詢引發的備份等待導致資料庫連線打滿資料庫
- Oracle目錄由於TFA觸發bug導致jdb檔案未自動清理引起空間不足Oracle
- undo表空間使用率過高解決
- 臨時表空間被佔滿的原因查詢
- ORACLE expdp在表空間較多的情況下執行非常緩慢Oracle
- java由於越界導致的報錯Java
- pageHelper分頁外掛導致的查詢慢的問題最佳化
- undo表空間使用率100%的原因檢視
- MySQL 磁碟空間滿導致表空間相關資料檔案損壞故障處理MySql
- Microsoft承認Windows由於永久性記憶體而導致啟動緩慢ROSWindows記憶體
- 慢查詢
- Oracle ORA-06512&ORA-08103物件已不存在之查詢期間表上索引被刪除Oracle物件索引
- dbms_lob儲存過程導致臨時表空間100%儲存過程
- PHP 物件導向 (三)名稱空間PHP物件
- MySQL慢查詢MySql
- MySQL 慢查詢MySql
- 由於無法分配ip而導致的FailedCreatePodSandBoxAI
- 關於MySQL 通用查詢日誌和慢查詢日誌分析MySql
- 表空間集自包含檢查
- OGG相關的CPATURE導致SYSAUX表空間異常暴增處理UX
- SQL Server Profiler(P)導致C盤空間不足SQLServer