天天看點

一條空間不足報警的分析

今天下午收到一條報警郵件

ZABBIX-監控系統:

------------------------------------

報警内容: Free disk space is less than 20% on volume /U01

報警級别: PROBLEM

監控項目: Free disk space on /U01 (percentage):9.7 %

報警時間:2015.10.27-18:08:49

對于目前的監控情況還算是比較穩定的,突然出現這個問題感覺還是有些奇怪。

這個環境是一個資料量也不大,負載也不高的環境,于是引起了我的重視。

首先就是檢視DB time的情況,沒有發現異常。

BEGIN_SNAP   END_SNAP SNAPDATE     DURATION_MINS     DBTIME

---------- ---------- ------------------------------- ----------

     17867      17868 27 Oct 2015 11:00    60      15

     17868      17869 27 Oct 2015 12:00    60      15

     17869      17870 27 Oct 2015 13:00    60      15

     17870      17871 27 Oct 2015 14:00    60      15

     17871      17872 27 Oct 2015 15:00    60      15

     17872      17873 27 Oct 2015 16:00    60      15

     17873      17874 27 Oct 2015 17:00    59      36

看來這個問題似乎被平均了,來檢視實時的DB time情況。

可以看到在短時間内确實有了很大的提升,但是還沒有達到閥值,是以沒有報警,這種變化似乎也是可以接受的。

這個時候檢視歸檔的情況,因為資料變更很小,50M的redo平時切換都不多,結果這個時候一看。

sh showarchrate.sh

DBNAME    TIME_STAMP

--------- ------------------------------------------------------------

DOOP    2015-Oct-27 18:16:39

    GROUP#    THREAD#  SEQUENCE#    MEMBERS    SIZE_MB ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ----------------

         1          1     104404          1         50 YES ACTIVE

         2          1     104405          1         50 NO  ACTIVE

         3          1     104406          1         50 NO  CURRENT

在短短的10分鐘,redo切換竟然達到了400多次。

問題到這個程度,想不重視都難,來看看是否是因為sql語句導緻。結果發現有幾條sql語句還是存在明顯的問題。

$ sh showsnapsql.sh 17874

   SNAP_ID SQL_ID        EXECUTIONS_DELTA ELAPSED_TI PER_TOTAL

---------- ------------- ---------------- ---------- ----------

     17874 0j7ntjx8km98j                72  576s       26%

     17874 6bz586uwmw2ry               0 582s       26%

     17874 3y93ywsfgbsnx                 0 558s       25%

     17874 cwq7h73hmda0p               12 108s       5%

     17874 ckv5fwgrvsx4j                   12 79s        3%

第一條語句是一個關聯delete,目前來看性能尚可接受

第二,第三條的語句竟然是

create table test_login_bak as select * from t_login t

create table _test_heart_bak as select * from t_heart t

這種操作明顯不是程式端發過來的,但是得确認一下,從ash裡面看看。發現是一個PL/SQL Dev操作的,哪個用戶端一目了然。

sh showsqlsess.sh 6bz586uwmw2ry

SESSION_ID SESSION_TY USERNAME   PROGRAM              MODULE               ACTION      MACHINE

---------- ---------- -------------------- ------- -------------------- -------------------- ---------- ------------------------------

      1993 FOREGROUND TEST_BI     plsqldev.exe         PL/SQL Developer     SQL Window- Query data of table TEST-INC\TEST5431

問題到了這個程度也就很明顯了,這種操作就是不太合理的,因為資料量都在億級,這種操作真是讓人膽戰心驚啊。

而且關鍵使用的使用者竟然是屬主使用者,因為為了隔離權限,所有開發人員的賬戶都是一個連接配接使用者,通過同義詞來通路,這個時候看似這位同學不知怎麼拿到了密碼,直接來操作了。

當我們準備聯系開發的同學時,發現産生的日志量更大了。

使用腳本來跟蹤,發現top SQL變了,是以趕緊聯系他們,想他們了解他們需要做什麼工作。

有一條新增的語句

SQL_FULLTEXT

-----------------------------

delete from t_heart t

最後得到的回報是需要資料清理。好吧,這種事情還是需要DBA來幫着把把關。

迅速溝通後,就先終止了這個過程。這個時候redo切換了近900多次。

通過上面的案例,可以看到其實還是需要對一些操作進行規範和限制,保證在DBA的工作中不會有太多節外生枝的事情,而且這個部分也需要開發和DBA進行充分的溝通。