表空間檢測異常的問題診斷
不知道大家在工作中的表空間管理情況如何,大體會分為兩派。以前的公司我們更喜歡直接把空間都分配好,比如500G的容量規劃,那就提前準備500G,另外一類是我先給定200G,後續的空間就自動增長,反正容量還是500G。這個其實很大程度上就是個人習慣和公司流程規範的差別了。
為什麼這麼說呢,因為我在一套環境上收到了一個奇怪的報警。
DBA: IP: xxxx Tablespace: PERFSTAT: 122.5% [Critical!!]
關鍵就在這個122.5%。看起來很不正常,如果這樣一個報警找不到問題的癥結,那麼這個檢測表空間的指令碼感覺還是有潛在的問題,或者說檢測的結果是會讓人質疑的。
從我的瞭解,這個指令碼用了很多年,之前還真沒碰到過問題。現在的這套環境就偏偏丟擲了錯誤,我們來挖掘一下。
首先這個表空間檢測的指令碼是使用我上面所說的第二種情況,即不斷的增大資料檔案,給定一個最大值。其實這樣算出來不是實際的檔案大小情況,和實際結果還是有出入的。
如果要讓你檢測一下表孔家使用率該怎麼做,很顯然我們可以根據資料檔案的資料字典來得到一個當前值和檔案最大值。
select tablespace_name,
round(sum(bytes) / (1024 * 1024)) b,
round(sum(decode(maxbytes, 0, bytes, maxbytes))/(1024 * 1024)) mb
from dba_data_files
group by tablespace_name;
另外還有一個檢視需要用,是dba_free_space,這個檢視的結果得到的是表空間的可用情況,這個檢視非常重要。內部會迭代呼叫一些資料字典來綜合得到一個表空間可用率的資料。
select tablespace_name, round(sum(bytes) / (1024 * 1024)) b
from dba_free_space
group by tablespace_name;
兩者結合起來,最大值減去可用值就是使用率了。我們看看dba_data_files的數值。
SQL> select file_name,bytes/1024/1024 size_MB ,maxbytes/1024/1024
max_MB from dba_data_files where tablespace_name='PERFSTAT';
FILE_NAME SIZE_MB MAX_MB
-------------------------------------------------- ---------- ----
/U02/app/oracle/oradata/xxxx/perfstat01.dbf 3100 2000
/U02/app/oracle/oradata/xxxx/perfstat02.dbf 10240 2000
看到這裡感覺很奇怪。最大值maxsize竟然比當前值bytes還要低很多。
看到這裡感覺離bug不遠了。但是不管如何這個問題現在來看還不夠嚴重,我們先想辦法解決。
一種思路就是修復一下,我們制定表空間最大值
SQL> alter tablespace perfstat autoextend on maxsize 14G;
alter tablespace perfstat autoextend on maxsize 14G
*
ERROR at line 1:
ORA-32773: operation not supported for smallfile tablespace PERFSTAT
沒想到這種模式不支援,oerr的幫助資訊提示,我們可以使用alter database datafile的方式來改進。
所以修復方式就是找到那個資料字典不一致的資料檔案,重新做一下設定一下maxsize值。
SQL> alter database datafile '/U02/app/oracle/oradata/xxxx/perfstat02.dbf' autoextend on maxsize 12G;
Database altered.
這樣操作之後,再次檢視錶空間檢測指令碼,就沒有問題了。
我在MOS上看了下,這個問題原來很常見。
Value in BYTES Column Greater than MAXBYTES Column in DBA_DATA_FILES (文件 ID 197244.1)
文件還寫出了樣例來模擬這個問題。
create tablespace tst
datafile 'd:\oracle\tst01.dbf' size 5m autoextend on;
alter database datafile 'd:\oracle\tst01.dbf' autoextend on maxsize 10m;
alter database datafile 'd:\oracle\tst01.dbf' resize 20m;
select file_name, bytes, maxbytes, autoextensible from dba_data_files;
FILE_NAME BYTES MAXBYTES AUT
---------------------------------------- ---------- ---------- ---
D:\ORACLE\TST01.DBF 20971520 10485760 YES
看來問題的癥結就在於之前做了resize的操作導致。我的處理方式介於兩者之間,我喜歡建立一個初始大小的檔案,然後resize到一個最大值。看來還是使用方式和習慣的不同在一些場景中會出現較大的偏差。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2142999/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢測磁碟空間問題
- 在 Linux 核心中診斷網路流量異常問題Linux
- V$SQL檢視顯示結果異常的診斷SQL
- 表空間碎片檢測
- ORACLE SYSTEM表空間異常與審計的功能Oracle
- 異常檢測
- SQL問題診斷SQL
- 資料庫異常智慧分析與診斷資料庫
- 用 Arthas 神器來診斷 HBase 異常程式
- 【PHP Whoops】錯誤&異常 診斷元件PHPOOP元件
- RAC系統的問題診斷最佳實踐,及常見問題分析
- [譯] 時間順序的價格異常檢測
- system表空間不足的問題分析
- 這 8 類問題,SysOM 2.0 OOM 診斷助你快速定位異常 | 龍蜥技術OOM
- 序列異常檢測
- 使用pt-stalk診斷MySQL的間歇性問題MySql
- 無線網路異常的一次診斷
- [譯] 時間序列異常檢測演算法演算法
- 表空間常見的操作
- 關於如何使用機器學習來做異常檢測的7個問題機器學習
- Tablespace Fragmentation - 表空間碎片問題Fragment
- GC BUFFER BUSY問題的診斷GC
- 表空間擴充套件過程 停電導致異常中斷, 無法啟動套件
- WebSphere Application Server 常見問題及解答:故障診斷WebAPPServer
- system表空間不足的問題分析(二)
- 處理TEMP表空間滿的問題
- java.lang.NullPointerException 空指標異常問題JavaNullException指標
- 長時間latch free等待——記一次系統異常的診斷過程
- 5種常見的 DNS 故障診斷及問題處理方法DNS
- 檢測空間的路徑
- GreysJava線上問題診斷工具Java
- 問題診斷和PLSQL方面SQL
- oracle表空間檢視Oracle
- sysaux 表空間不足問題處理UX
- imp/EXP 表空間轉換問題
- 測試表的空間壓縮與表空間的關係
- 如何使用Apple診斷程式檢查Mac硬體問題APPMac
- 基於 PTS 壓測輕鬆玩轉問題診斷