Execute to Parse為負值,求助

2022-06-24 19:32:35 字數 2525 閱讀 1054

1樓:桃花清瑩

裡面的execute to parse 居然出現負數。找到某大師給出的該引數計算公式如下:

execute to parse = round(100*(1-:prse/:exe),2)

prse = select value from v$sysstat where name = 'parse count (total)';

exe = select value from v$sysstat where name = 'execute count';

也就是說,這個引數的值,主要是體現 sql的 解析次數與執行次數的比率。而且這裡的解析包括硬解析和軟解析、軟軟解析。

sql的執行包括幾個步驟:開啟、解析、繫結、執行、抓取、關閉。

解析的時候確定執行計劃,硬解析就是重新生成執行,軟解析是在共享池中找到了執行計劃,軟軟解析是讓查詢執行計劃的過程更短、更快。但無論軟解析、還是軟軟解析,都有解析這個操作。

要改善解析與執行的比率關係,就需要增加無解析的次數,無解析就是不再解析,為sql繫結不同的變數,然後執行。這樣做的前提就是:1、session不能斷開;2、session執行過解析過的sql不要關閉;滿足這兩點就可以實現無解析。

下面,就介紹一個和這個有密切關係的引數:session_cached_cursors

session_cached_cursors,就是說的是一個session可以快取多少個cursor,讓後續相同的sql語句不再開啟遊標,從而避免軟解析的過程來提高效能。(繫結變數是解決硬解析的問題),軟解析同硬解析一樣,比較消耗資源.所以這個引數非常重要。

oracle有一個概念,那就是session cursor cache,中文描述就是有一塊記憶體區域,用來儲存關閉了的cursor。當一個cursor關閉之後,oracle會檢查這個cursor的request次數是否超過3次,如果超過了三次,就會放入session cursor cache,這樣在下次parse的時候,就可以從session cursor cache中找到這個statement, session cursor cache的管理也是使用lru。

session_cached_cursors這個引數是控制session cursor cache的大小的。session_cached_cursors定義了session cursor cache中儲存的cursor的個數。這個值越大,則會消耗的記憶體越多。

另外檢查這個引數是否設定的合理,可以從兩個statistic來檢查。

select name,value from v$sysstat where name like '%cursor%';

select name,value from v$sysstat where name like '%parse%';

session cursor cache hits 和parse count(total) 就是總的parse次數中,在session cursor cache中找到的次數,所佔比例越高,效能越好。如果比例比較低,並且有剩餘記憶體的話,可以考慮加大該引數。

到這裡,我們就明白了,基於上面的情況,我們應該調整哪個引數,才能真正解決問題。

alter system set session_cached_cursors=100 scope=spfile;

修改後要重啟資料庫方能生效。

2樓:文件類共創空間

1)記憶體shared pool設定的過小,導致很多sql解析了以後還沒等到執行就被aged out換出

【目前 db sga_target設定為16g,已足夠大,不存在此方面的問題】

2)統計報告的snapshot快照相隔時間過短,恰好這段時間內有很多解析的任務但還沒開始執行語句

【我試了多種時間段,跨8天,跨1天中一小時,跨一天中兩小時等等,execute to parse%仍然為負數,因此這種情況也不適用】

3)會跟應用程式的開發工具有關,比如pb,每次執行前pb會先向db解析一下來驗證,然後具體執行時db端又會產生一次soft軟解析,這樣軟解析次數就可能搞過執行次數【這家企業應用程式使用delphi開發的,是不是也和pb一樣,sql執行前會先驗證一下?】

4)平常用的工具比如toad在檢視sql執行計劃時,都是屬於只解析但不執行的情況,這樣也會增加軟解析的次數

5)多核cpu的情況下oracle在統計時可能存在重複統計解析次數的情況

小白求助:如何使mysql中的欄位不能為負值

3樓:匿名使用者

第一個分隔符若為and之類的關鍵字,注意倆邊要有空格。

注意這個函式不能跳過空的字串,只能跳過null,所以如果裡面的字串項中若有判斷語句,一定不要把字串賦值為空。

4樓:火籬笆

你在你定義的數字變數前 加上unsigned 就不可以放負值了

5樓:匿名使用者

直接修改欄位型別, 新增一個屬性 unsigned

6樓:旅初彤

這個只能在程式裡面控制,直接在後臺無法設定的

如何生成遠端資料庫的awr報告

首字為為的成語

首字開頭的成語 首屈一指 首當其衝 首尾相援 首下尻高 首尾相救 首尾夾攻 首唱義舉 首尾貫通 首尾相接 首尾共濟 首身分離 首肯心折 首丘之思 首倡義舉 首尾相赴 首唱義兵 首倡義兵 首鼠兩端 首善之區 首尾受敵 首丘之情 首戰告捷 首丘之念 首尾不應 首尾狼狽 首鼠模稜 為虎作倀 為非作歹 為德...

為之奈何的為讀幾聲為之奈何中為的讀音,到底是讀四聲還是二聲

讀第二聲。為之奈何 的釋義 對此怎麼辦呢?為 的基本釋義如下 w i 做,行,做事 當做,認做 是 被。w i 替,給。表目的。對,向。幫助,衛護。一言為定 y y n w i d ng 一句話說定了,不再更改。比喻說話算數,決不翻悔。出處 清 曹雪芹 紅樓夢 賈璉笑道 你我一言為定。只是我信不過二...

食為枕頭草為床打,食為枕頭草為床打一字

謎面應該是抄 石作枕頭草做床襲 謎底 蘑 石作 取石 枕頭 枕字開頭是 木 草做 取草字頭 床 取床 合起來為謎底 蘑 這個謎面還有下半句 石作枕頭草做床,再苦她也不在乎再苦 取苦 她也不在 是她字去掉也 為女 合起來為謎底 菇 兩個謎底合起來就是 蘑菇 謎面打錯一個字了,應該是 石為枕頭草為床 我...