DBASK問答集萃第六期

enmotech發表於2019-08-12

引言

近期我們在DBASK小程式新關聯了DB備戰室,新增加60多位技術專家,期待更多資料庫領域的專家和公眾號作者加入到墨天輪,共創開放、互助、專業的資料庫技術社群。

問答集萃

接下來,我們分享本期整理出的問題和診斷總結,供大家參考學習,詳細的診斷分析過程可以透過標題連結跳轉到小程式中檢視。

問題一、為什麼oracle不需要像mysql那樣double write

為了解決 partial page write 問題 ,當mysql將髒資料flush到data file的時候, 先使用memcopy 將髒資料複製到記憶體中的double write buffer ,之後透過double write buffer再分2次,每次寫入1MB到共享表空間,然後馬上呼叫fsync函式,同步到磁碟上,避免緩衝帶來的問題,在完成doublewrite寫入後,在將double write buffer寫入各表空間檔案,這時是離散寫入。這個過程是mysql double write。 問題:oracle也是會出現類似的情況,為什麼那麼自信,不需要double write

診斷結論:這隻能說是InnoDB的設計實現,不同的產品設計思路不同。又由於InnoDB只是一個儲存引擎,考慮的情況還要複雜。MySQL的引擎制還導致redo和binlog共存。在未來Oracle主導之下,這些都會慢慢被改變。


問題二、truncate 分割槽表的時候非常慢3個小時沒跑完會是什麼原因

分割槽表有200多G,透過truncate 刪除其中的一個分割槽 使用了 update global indexes選項,執行了3個小時沒執行完成,分割槽表存在 global 索引,最終導致業務無法操作,kill掉truncate 分割槽表的session 恢復操作,請問

1、這3個小時是在等待 update global indexes 嘛?

2、kill 了 truncate session,業務恢復,表資料也沒有刪除,不是 truncate 不走 undo嘛,為什麼 kill session 之後 能回滾了呢?

診斷結論:1、從描述看,很大可能是阻塞在update global indexes上面了;可以結合ash看看。2、Truncate是DDL,記錄不計redo,但是medata還是有undo的,你這個操作失敗,自然就回滾了。


問題三、oracel 預定義處理語句轉為MySQL寫法

oracle寫法如下:

EXCEPTION
  WHEN OTHERS THEN
    V_RESULT := I_SERVICE_ID;
    RETURN(V_RESULT);

如何轉換為MySQL語句寫法?看網上說MySQL用 DECLARE,或者是否可以實現這種寫法的轉換?

診斷結論:類似這種寫法:DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION,但是感覺MySQL的exit和Oracle的return還是有差距。


問題四、對大表欄位設定為unuse有哪些影響?

oracle 11.2版本中對大表欄位設定為unuse對後續的管理會產生哪些影響?

診斷結論:SET UNUSED再DROP UNUSED COLUMNS,是對於資料量很大的表的一種標準處理方法,所以,實際上大部分都是在SET UNUSED之後的幾天內就會選擇合適的時機,將這些列物理drop掉,因此不存在太多後續還要持續管理的機會吧。


問題五、rac心跳機制導致重啟的問題

rac心跳機制包括網路和磁碟心跳,如遇節點間心跳超時(可能是由於伺服器hang住或者網路出現問題),是否會重啟非主節點的伺服器?

節點重啟是指叢集服務重啟還是伺服器重啟?如果伺服器hang住,可以理解為不能對磁碟進行讀寫,磁碟心跳超時問題就一定會重啟伺服器?另外根據mos文件指出,11.2.0.2之後的版本,節點驅逐並不一定會導致伺服器重啟。

診斷結論:從11.2.0.2開始,當叢集中的某個節點被驅逐(例如丟失網路心跳)或者該節點的ocssd.bin出現問題時,叢集將不會直接重新啟動該節點,而是首先嚐試重新啟動GI stack來解決問題,如果GI stack不能夠在指定的時間內(short disk I/O timeout)完成graceful shutdown,才會重新啟動節點。關於網路心跳和磁碟心跳的機制請檢視詳情。


問題六、oracle goldengate實現一對多複製

目前一套oracle RAC做為源端,需要同步到同一機房的異機一份資料,還需要同步到異地機房一份資料,用一套ogg做一對多複製對源端效能影響大嘛?還是先同步到同一機房異機一份在從異機的目標端同步資料到異地?

像這種既有同機房異機資料同步,又異地同步,有更好的方案嘛?

診斷結論:一對多可以共用同一個抽取程式,只需多配一個投遞程式就可以。

只要是同平臺、同版本的Oracle容災,基本上現在都用的ADG。但是由於源端為ibm小機,目標端為x86的伺服器,沒考慮用ADG,基本上能用的只有OGG了,不過OGG也不太穩定,特別是全庫同步,DDL頻繁的場景。


問題七、pdb級別的負載監控效能診斷

在12c以前可以透過例如dbtime的指標,判斷資料庫負載,在升級到12c,18c後,對於資料庫的負載監控有沒有一個指標,判斷當前容器內那個pdb佔用cdb資源最多?在使用oratop時只能看到cdb層面的負載資訊,還有別的指標可以快速定位資源佔比較高的pdb

診斷結論:12.2可以生成pdb級別的awr報告,另外可以透過OEM CC監控檢視各個PDB的負載情況。


問題八、重啟多路徑跟udev時,需要關閉資料跟資料庫叢集嗎?

12c3節點rac在asm新增新的磁碟時,用的多路徑,跟udev,修改multipath.conf de 重啟多路徑跟udev時,需要關閉資料跟資料庫叢集嗎?

診斷結論:一般情況下重啟udev和multipath是不會影響到叢集的,原來的鏈路都在,且重啟過程很快。但是重啟過程中也可能存在鏈路超時或者原鏈路夯住導致叢集重啟的情況。還有網路卡如果使用udev繫結也會存在節點重啟的情況。另外multipath有reload命令。


問題九、oracle目錄.cache檔案是否可以清理

資料庫所在的檔案系統/u01使用率基本快滿,根據find / -szie +500M -type f檢視大於500M的檔案進行清理,釋放空間,詢問您字尾為.cache檔案可以清理嗎,檔案大小為500M,或者那些檔案可以清理,我一一查詢進行清理。

專家解答:不知道能不能刪的檔案,最好mv到其他地方,過一段時間後再刪除。另外,檔案系統慢不一定是大檔案佔用,可能是很多小檔案,比如oracle的trace檔案。透過du命令去找到佔用空間較大的檔案或目錄,再考慮刪除。


問題十、oracle 11g 怎麼清理tnslsnr alert日誌

請問一下,oracle 11g 怎樣安全清理生產環境的alert日誌。我想清理。diag/tnslsnr/ERP-DB/listener/alert

診斷結論:這些都是監聽日誌檔案,如果不需要使用,可以直接刪除所有帶數字的xml檔案。

另外禁用xml形式生成監聽日誌,可以透過在lisneter.ora中設定如下引數:

DIAG_ADR_ENABLED_LISTENER = OFF

另外如果是資料庫alert日誌可以先壓縮備份alert日誌,再執行:> alert_SID.log


問題十一、請問如何怎麼快速定位儲存過程中執行慢的語句

請問如何快速定位儲存過程中執行慢的語句

診斷結論:可以透過ASH 找到儲存過程的主SQL然後依次找到遞迴的所有SQL,然後對這些SQL資源消耗做排序;儲存過程記錄日誌;用10046跟蹤執行儲存過程的會話;用PLSQL DEVELOPER的Profiler除錯,會展示每個SQL的執行時長。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69933133/viewspace-2653387/,如需轉載,請註明出處,否則將追究法律責任。

相關文章