ORACLE從共用池刪除指定SQL的執行計劃

来源:http://www.cnblogs.com/kerrycode/archive/2016/12/29/6232190.html
-Advertisement-
Play Games

Oracle 11g在DBMS_SHARED_POOL包中引入了一個名為PURGE的新存儲過程,用於從對象庫緩存中刷新特定對象,例如游標,包,序列,觸發器等。也就是說可以刪除、清理特定SQL的執行計劃,這樣在特殊情況下,就避免你要將整個SHARED POOL清空的危險情況。例如某個SQL語句由於優化... ...


Oracle 11g在DBMS_SHARED_POOL包中引入了一個名為PURGE的新存儲過程,用於從對象庫緩存中刷新特定對象,例如游標,包,序列,觸發器等。也就是說可以刪除、清理特定SQL的執行計劃,這樣在特殊情況下,就避免你要將整個SHARED POOL清空的危險情況。例如某個SQL語句由於優化器產生了錯誤的執行計劃,我們希望優化器重新解析,生成新的執行計劃,必須先將SQL的執行計劃從共用池中刷出或將其置為無效,那麼優化器才能將後續SQL進行硬解析、生成新的執行計劃。這在以前只能使用清空共用池的方法。現在就可以指定刷新特定SQL的執行計劃。當然在10.2.0.4 和10.2.0.5的補丁集中該包也被包含進來,該包的存儲過程有三個參數,如下所示:

 

DBMS_SHARED_POOL.PURGE (
   name    VARCHAR2, 
   flag    CHAR DEFAULT 'P', 
   heaps   NUMBER DEFAULT 1);
 
 
Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 NAME                           VARCHAR2                IN
 FLAG                           CHAR                    IN     DEFAULT
 HEAPS                          NUMBER                  IN     DEFAULT

 

第一個參數:為逗號分隔的ADDRESS列和HASH_VALUE列的值。

 

第二個參數:可以有多個選項,例如C、P、T、R、Q等。具體意義如下所示

C表示PURGE的對象是CURSOR

Set to 'P' or 'p' to fully specify that the input is the name of a package/procedure/function.

Set to 'T' or 't' to specify that the input is the name of a type.

Set to 'R' or 'r' to specify that the input is the name of a trigger.

Set to 'Q' or 'q' to specify that the input is the name of a sequence.

...................................

clip_image001

 

第三個參數:heaps,一般使用預設值1

Heaps to be purged. For example, if heap 0 and heap 6 are to be purged:

1<<0 | 1<<6 => hex 0x41 => decimal 65, so specify heaps =>65.Default is 1, that is, heap 0 which means the whole object would be purged

 

在ORACLE 11g當中,你可以在$ORACLE_HOME/rdbms/admin/dbmspool.sql中查看該包的具體定義. 但是這個DBMS_SHARED_POOL.PURGE在10.2.0.4.0(實際測試發現10.2.0.5.0也存在同樣問題)都有一些問題,它可能無法生效,當然在Oracle 11g中沒有這個問題,具體演示如下所示:

SQL> select * from v$version;
 
BANNER
----------------------------------------------------------------
Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production
 
SQL> alter system flush shared_pool;
 
System altered.
 
SQL> set linesize 1200;
SQL> select * from scott.dept where deptno=40; 
 
    DEPTNO DNAME          LOC
---------- -------------- -------------
        40 OPERATIONS     BOSTON
 
SQL> select sql_id, first_load_time
  2  from v$sql
  3  where sql_text like 'select * from scott.dept%';
 
SQL_ID        FIRST_LOAD_TIME
------------- ---------------------------------------------------------
3nvuzqdn6ry6x 2016-12-29/08:51:21
 
SQL> col sql_text for a64;
SQL> select address, hash_value, sql_text
  2  from v$sqlarea
  3  where sql_id='3nvuzqdn6ry6x';
 
ADDRESS          HASH_VALUE SQL_TEXT
---------------- ---------- ----------------------------------------------------------------
00000000968ED510 1751906525 select * from scott.dept where deptno=40
 
SQL> exec dbms_shared_pool.purge('00000000968ED510,1751906525','C');
 
PL/SQL procedure successfully completed.
 
SQL> select address, hash_value, sql_text
  2  from v$sqlarea
  3  where sql_id='3nvuzqdn6ry6x';
 
ADDRESS          HASH_VALUE SQL_TEXT
---------------- ---------- ------------------------------------------
00000000968ED510 1751906525 select * from scott.dept where deptno=40
 
SQL> 

clip_image002

 

如上截圖所示,DBMS_SHARED_POOL.PURGE並沒有清除這個特定的SQL的執行計劃,其實這個是因為在10.2.0.4.0 要生效就必須開啟5614566 EVNET,否則不會生效。 具體可以參考官方文檔:

DBMS_SHARED_POOL.PURGE Is Not Working On 10.2.0.4 (文檔 ID 751876.1)

Bug 7538951 : DBMS_SHARED_POOL IS NOT WORKING AS EXPECTED

Bug 5614566 : WE NEED A FLUSH CURSOR INTERFACE

 

DBMS_SHARED_POOL.PURGE is available from 11.1. In 10.2.0.4, it is available

through the fix for Bug 5614566. However, the fix is event protected.  You need to set the event 5614566 to make use of purge. Unless the event is set, dbms_shared_pool.purge will have no effect.

Set the event 5614566 in the init.ora to turn purge on.

event="5614566 trace name context forever"

 

如下所示,設置5614566 event後,必須重啟資料庫才能生效,這個也是一個比較麻煩的事情。當然這也是一個沒有辦法的事情.

alter system set event = '5614566 trace name context forever' scope = spfile;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 說明:(1)Linux版本 Linux version 2.6.32.12-0.7-default (geeko@buildhost) (gcc version 4.3.4 [gcc-4_3-branch revision 152973] (SUSE Linux) ) #1 SMP 2010-05- ...
  • postgresql資料庫創建/修改/刪除等寫入類代碼語法總結: 1,創建庫 2,創建/刪除表 2.1 創建表 2.2 如果表不存在則創建表 2.3 刪除表 2.4 實例代碼: 說明:serial,bigserial 是自增長欄位數據類型,分別對應 int,long 3,創建/修改欄位 3.1 添加 ...
  • MySQL Fabric安裝 MySQL Fabric是Oracle提供的用於輔助進行ha\sharding的工具,它的基本架構: 從上面看出,藉助於Fabric, 可以搭建 HA 集群、Sharing 、HA+Sharding。 應用從fabric中得知各個資料庫、表、分區等的映射關係,然後訪問相 ...
  • 網上流傳眾多列數據聚合方法,現將各方法整理彙總,以做備忘。 wm_concat 該方法來自wmsys下的wm_concat函數,屬於Oracle內部函數,返回值類型varchar2,最大字元數4000。隨著版本的變更返回值類型可能會有改動,項目中使用時候最好在新的用戶下創建一個函數。 使用方法: s ...
  • 1.Character 字元串: 2.Unicode字元串: 3.Binary類型: 4.Number類型: 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 之間的數字。 p 參數指示可以存儲的最大位數(小數點左側和右側)。p 必須是 1 到 38 之間的值。預設是 18。 ...
  • PAL是什麼? PAL(Performance Analysis of Logs)是一個實用、免費的日誌分析自動化工具,協助快速診斷伺服器級別的性能問題。 PAL有什麼特性? PAL主要用來自動分析PerfMon(性能監視器)產生的日誌信息,一步一步嚮導式的簡單操作方式。 PAL基於微軟支持團隊的主 ...
  • 可以執行 SSIS Package ,證明用 SSIS Package 的賬戶是可以執行成功的。SQL Server Agent 預設指定賬號是 Network Service。 那麼可以嘗試一下將 SQL Server Agent 和 SQL Server Integration Service ...
  • 1 ORA-00001: 違反唯一約束條件 (.) 2 ORA-00017: 請求會話以設置跟蹤事件 3 ORA-00018: 超出最大會話數 4 ORA-00019: 超出最大會話許可數 5 ORA-00020: 超出最大進程數 () 6 ORA-00021: 會話附屬於其它某些進程;無法轉換會話 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...