DBASK問答集萃第六期

引言css

近期咱們在DBASK小程序新關聯了DB備戰室,新增長60多位技術專家,期待更多數據庫領域的專家和公衆號做者加入到墨天輪,共創開放、互助、專業的數據庫技術社區。mysql

問答集萃sql

接下來,咱們分享本期整理出的問題和診斷總結,供你們參考學習,詳細的診斷分析過程能夠經過標題連接跳轉到小程序中查看。數據庫

問題1、爲何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主導之下,這些都會慢慢被改變。服務器

問題2、truncate 分區表的時候很是慢3個小時沒跑完會是什麼緣由網絡

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

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

二、kill 了 truncate session,業務恢復,表數據也沒有刪除,不是 truncate 不走 undo嘛,爲何 kill session 以後 能回滾了呢?

診斷結論:一、從描述看,很大多是阻塞在update global indexes上面了;能夠結合ash看看。二、Truncate是DDL,記錄不計redo,可是medata仍是有undo的,你這個操做失敗,天然就回滾了。

問題3、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仍是有差距。

問題4、對大表字段設置爲unuse有哪些影響?

oracle 11.2版本中對大表字段設置爲unuse對後續的管理會產生哪些影響?

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

問題5、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,纔會從新啓動節點。關於網絡心跳和磁盤心跳的機制請查看詳情。

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

目前一套oracle RAC作爲源端,須要同步到同一機房的異機一份數據,還須要同步到異地機房一份數據,用一套ogg作一對多複製對源端性能影響大嘛?仍是先同步到同一機房異機一份在從異機的目標端同步數據到異地?

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

診斷結論:一對多能夠共用同一個抽取進程,只需多配一個投遞進程就能夠。

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

問題7、pdb級別的負載監控性能診斷

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

診斷結論:12.2能夠生成pdb級別的awr報告,另外能夠經過OEM CC監控查看各個PDB的負載狀況。

問題8、重啓多路徑跟udev時,須要關閉數據跟數據庫集羣嗎?

12c3節點rac在asm添加新的磁盤時,用的多路徑,跟udev,修改multipath.conf de 重啓多路徑跟udev時,須要關閉數據跟數據庫集羣嗎?

診斷結論:通常狀況下重啓udev和multipath是不會影響到集羣的,原來的鏈路都在,且重啓過程很快。可是重啓過程當中也可能存在鏈路超時或者原鏈路夯住致使集羣重啓的狀況。還有網卡若是使用udev綁定也會存在節點重啓的狀況。另外multipath有reload命令。

問題9、oracle目錄.cache文件是否能夠清理

數據庫所在的文件系統/u01使用率基本快滿,根據find / -szie +500M -type f查看大於500M的文件進行清理,釋放空間,詢問您後綴爲.cache文件能夠清理嗎,文件大小爲500M,或者那些文件能夠清理,我一一查找進行清理。

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

問題10、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

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

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

診斷結論:能夠經過ASH 找到存儲過程的主SQL而後依次找到遞歸的全部SQL,而後對這些SQL資源消耗作排序;存儲過程記錄日誌;用10046跟蹤運行存儲過程的會話;用PLSQL DEVELOPER的Profiler調試,會展現每一個SQL的運行時長。

相關文章
相關標籤/搜索