session_cached_cursor另類用途
版本11.1.0.7
最近生產庫的一個sql的version_count達到了七千多,佔用的shared pool記憶體也達到了400多M。非常嚇人。除BUG的因素外,還有就是update後面set了非常多的欄位,由於varchar2欄位的繫結變數分級,造成child cursor過多。當時根據經驗,這個SQL的解析,不管是軟解析還是硬解析消耗的時間肯定都會比較長,如果執行頻繁,肯定會造成library cache latch爭用。因此就推動公司架構那邊去最佳化,只UPDATE必須的欄位。最佳化後,檢視了一下,v$sqlarea版本數沒變。可是v$sql裡明顯已經只剩6個子child cursor.佔用的shared pool也已經降到了不到300k.
ops$admin@CRMG>select sql_id,version_count from v$sqlarea where sql_id='56uscp6kdg24a';
SQL_ID VERSION_COUNT
-------------------------- -------------
56uscp6kdg24a 7196
ops$admin@CRMG>select count(*) from v$sql where sql_id='56uscp6kdg24a';
COUNT(*)
----------
6
ops$admin@CRMG>select SHARABLE_MEM from V$SQLarea where sql_id='56uscp6kdg24a';
SHARABLE_MEM
------------
295075
可是另我非常疑惑不解的是,這個SQL的版本一直就比較多,而且執行頻率也非常高,可是資料庫的等待事件library cache latch也還算正常,不至於看出存在效能問題。為什麼呢?
週末在家終於想明白了。session_cached_cursor導致的,這個SQL由於執行次數多,被cached了起來,每次軟解析的時候,根本不需要掃描很長的cursor列表,因為cached 的cursor保留指向library cache的lco的指標,這樣即使列表再長,只要是軟解析,就不會造成持有library cache latch時間過長。但是是硬解析的話,就無能為力了。
透過如下語句,可以基本確定這個SQL被cursor了起來。(我執行了N多次,這個CURSOR一直存在在各個SESSION裡)。當然v$open_cursor並不是用來看那些cursor被cached的,奇怪ORACLE沒有一個檢視去查,那些cursor被cache起來。由於update語句執行時間非常短,因此如果沒cache起來,執行完就會被關閉,就不會出現在v$open_cursor裡了。
select sid,count(*) from v$open_cursor where sql_id='56uscp6kdg24a' group by sid;
至此問題基本搞明白了。
ops$admin@CRMG> show parameter session
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
session_cached_cursors integer 100
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-681186/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 另類 RobotFramework 使用法Framework
- SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測資料庫
- 按用途分類的SRAM
- 資料庫用途分類資料庫
- 解決 "Script Error" 的另類思路Error
- AppBoxFuture(八): 另類的ORM實現APPORM
- 樹莓派的另類用途,三名男子因使用樹莓派盜取ATM機錢款而被逮捕樹莓派
- [20180627]truncate table的另類恢復.txt
- 另類用法 hyperf/session 實現 API tokenSessionAPI
- 《有殺氣童話2》:另類童話世界開啟的另類MMO | 遊戲產品觀察遊戲
- [20181212]truncate的另類恢復5.txt
- win電腦快速關機的另類方法
- 宮鬥遊戲,另類財富密碼遊戲密碼
- 代理IP是否可以按用途分類
- 另類投資:AI藝術品定價指北AI
- [20180630]truncate table的另類恢復2.txt
- CRM系統如何進行另類資料管理?
- 同為部落格,不同風格 ——Hexo另類搭建Hexo
- 技術之外的工程師另類成長指南工程師
- 雲端計算的多種類用途
- 驚喜!一個檔案多個【請求類】的另類寫法
- 《全球博弈類手遊洞察報告》:另類爆款該如何買量?
- 在模擬器遊戲裡體驗另類“人生”遊戲
- vue3.0 載入json的“另類”方法(非ajax)VueJSON
- 《騎馬與砍殺》:CRPG精神的另類復活
- 另類終端「GitHub 熱點速覽 v.22.15」Github
- eBay推出Facebook聊天機器人,體驗另類購物機器人
- 想睡得更好,這三種“另類”方法試過了沒?
- Docker 的主要用途,目前有三大類Docker
- 一個菜雞技術人員,很另類的總結
- C#介面、抽象類、普通類和繼承(子類與父類)都有其特定的用途和場景C#抽象繼承
- Azure KeyVault(四)另類在 .NET Core 上操作 Secrets 的類庫方法-----Azure.Security.KeyVault.Secrets
- 賓士大G遇到自家的越野車:土豪的“另類”大玩具
- 敏捷與彈性:迎接新現實的另類投資報告敏捷
- AI 在用 | 我們用Suno V3.5,打造出「另類」汪峰AI
- 另類KDJ指標公式原始碼 2019通達信指標公式指標公式原始碼
- “丟掉腦子”做敘事——探索另類的敘事體驗
- Flutter混合開發——一種另類卻高效的的原生View嵌入方法FlutterView
- 防守生存為主的另類RTS,Funcom推出新作《不屈者柯南》