記一次遷移和效能最佳化
資料庫管理-第119期 記一次遷移和效能最佳化(202301130)
1 遷移
之前因為DV元件沒有遷移成功的那個PDB,後來想著在目標端安裝DV元件遷移,結果目標端裝不上,而且開了SR也沒看出個所以然來。只能換一個方向,嘗試在源端PDB中刪除DV元件,而DV元件的刪除從12cR2開始就是一個老大難問題。最終根據 How To Enable/Install/Uninstall Database Vault in oracle database ? (Doc ID 2112167.1),發現:
從12.2-19c,DV元件無法在CDB中被解除安裝
20c中也僅僅只能在PDB中解除安裝DV元件
注意:現在提供Patch 29890347補丁包允許在PDB中解除安裝DV元件
有了這個訊息,即可開始檢視 Patch 29890347: ADW18.1CDB: DV UNINSTALL SHOULD BE ALLOWED FROM WITHIN PDBS,這個補丁包比較和一般One-off patch有一點不一樣,一般補丁需要關閉資料庫應用,因為大多數會去影響資料庫的一些執行庫檔案,而這個補丁包僅僅只包含了替換SQL指令碼檔案:
對應README檔案裡面也沒有需要關閉資料庫的操作,因此直接應用補丁即可(其實就是個備份、刪除、複製的作業系統層面的操作):
然後再在需要操作的PDB中解除安裝DV元件即可:
@?/rdbms/admin/dvremove.sql
指令碼執行完成後檢查,DV元件已被解除安裝:
到這裡後續在目標端的PDB克隆遷移操作就可以一股腦的整出來了(其實以前文章有):
create pluggable database pdb_xxx from pdb_xxx@xxx_LINK;alter pluggable database pdb_xxx open upgrade;
$ORACLE_HOME/OPatch/datapatch -verbose
@?/rdbms/admin/utl32k.sql @?/rdbms/admin/utlrp.sqlalter pluggable database close immediate
srvctl add service -db xxdbaas -pdb PDB_XXX -service XXXDB -preferred xxdbaas1,xxdbaas2 srvctl start service -db xxdbaas -s xxxdb
2 效能最佳化
3點過弄完盯了一會兒就睡覺,然後9點過早上另一個業務系統打電話說他們有個需要至少每10分鐘跑一次儲存過程突然變慢了,之前監控是從1分鐘慢慢延長到了5分鐘左右,今天突然來到25-30分鐘才能完成,雖然對業務本身執行影響不大,但是也帶來了一些時效性的問題。沒辦法,強制開機,頂著沉重的眼皮開始最佳化。
首先檢查了儲存過程中涉及的3個基表的情況,統計資訊沒啥問題,count(*)了一下來把資料刷入Exadata儲存快取,效能沒有明顯提升;其次EMCC上盯一下這個儲存過程,發現主要時間耗費在一個CTAS語句中,單獨拎出來跑其中的select語句也很慢,因此在EMCC上把SQL Monitor弄出來並檢查執行計劃,從最耗時的地方開始檢視:
而且從下面的執行計劃中還多次看到在這張FM_xxx_ALL_TEMP表的耗時,與業務方溝通理清了邏輯脈絡:
- 先用delete命令刪除多張臨時表,其中包含FM_xxx_ALL_TEMP
- 用insert select的方式向這張表插入資料
- 在用CTAS新建一張表(就是慢在這個地方,後續做了啥就沒必要操心)
這中間就會有2個問題:
- delete對錶操作可能會引起該表產生大量碎片,且這是個累積的過程,操作實踐前面是1->5分鐘的緩慢增加當達到一定量後就造成了較大的效能下降,因此建議用truncate來替代delete來清理全表資料
- 中間表清理重新插入資料後,統計資訊大機率是異常的,因此建議在此操作步驟後新增對這張表的統計資訊收集操作
在業務方根據建議完成操作後,涉及儲存過程的執行時間立即從25-30分鐘下降至了40秒不到,比以前“正常”時候速度還要快一些。至此最佳化完成。(這裡還要感謝Oracle RWP團隊的董志平老師的支援)
總結
老規矩,知道寫了些啥。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31466763/viewspace-2998341/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記一次 GitLab 的遷移過程Gitlab
- 記錄一次XTTS遷移碰到的問題TTS
- 【Golang+mysql】記一次mysql資料庫遷移(一)GolangMySql資料庫
- 記錄一次餘額遷移的坑(測試角度)
- 記一次快取伺服器遷移史,心塞!快取伺服器
- 記錄一次遷移環境 .env 出現的問題
- [Database Migration] 記一次未達預期的資料庫遷移Database資料庫
- 記一次 Laravel 專案遷移之後 Model 報錯問題Laravel
- 千億級資料遷移mongodb成本節省及效能最佳化實踐(附效能對比質疑解答)MongoDB
- 資料庫遷移手記資料庫
- 部落格圖床遷移記圖床
- gitlab的遷移和升級Gitlab
- Unity效能最佳化記憶體最佳化Unity記憶體
- 記一次效能調優
- 記一次介面最佳化操作
- 記一次PHP最佳化案例PHP
- 移動遊戲的效能最佳化 | 材質最佳化篇遊戲
- 記十億級Es資料遷移mongodb成本節省及效能優化實踐MongoDB優化
- Blazor WebAssembly 候選版遷移手記BlazorWeb
- WindowsServer 2012資料庫遷移記錄WindowsServer資料庫
- CentOS 8遷移Rocky Linux 8手記CentOSLinux
- ? 記一次前端效能優化前端優化
- 記一次JAVA 程式最佳化之旅Java
- 記錄一次鎖的最佳化
- win10如何遷移qq聊天記錄 win10電腦qq聊天記錄怎麼遷移Win10
- 高效能圖表LightningChart JS 遷移指南介紹GCJS
- 遷移 Nacos 和 ZooKeeper,有了新工具
- redis 單機和cluster資料遷移Redis
- 容器和映象轉化、遷移方式【轉】
- CNoder 應用遷移記 | 掘金技術徵文
- linux記憶體管理(十一)- 頁面遷移Linux記憶體
- 【效能】Oracle表並行對邏輯遷移後查詢效能的影響Oracle並行
- 棧遷移
- 遷移公告
- 記一次Blog遷移到Ghost(內含乾貨)
- 【遷移】SqlServer 遷移到 MySQL 方法ServerMySql
- 部落格效能最佳化筆記 | 99分筆記
- 【文章筆記】效能最佳化技巧參考筆記