欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle數(shù)據(jù)庫(kù)找到 Top Hard Parsing SQL 語(yǔ)句的方法

 更新時(shí)間:2025年01月07日 09:33:51   作者:minebmw7  
Oracle數(shù)據(jù)庫(kù)中的硬解析是指重新解析SQL語(yǔ)句并創(chuàng)建新的執(zhí)行計(jì)劃的過(guò)程,本文給大家介紹Oracle數(shù)據(jù)庫(kù)找到 Top Hard Parsing SQL 語(yǔ)句的方法,感興趣的朋友一起看看吧

有一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序存在過(guò)多的解析問(wèn)題,因此需要找到產(chǎn)生大量硬解析的主要語(yǔ)句。

什么是硬解析

Oracle數(shù)據(jù)庫(kù)中的硬解析(Hard Parse)是指在執(zhí)行SQL語(yǔ)句時(shí),數(shù)據(jù)庫(kù)需要重新解析該SQL語(yǔ)句,并創(chuàng)建新的執(zhí)行計(jì)劃的過(guò)程。這個(gè)過(guò)程涉及到對(duì)SQL語(yǔ)句的完整解析、編譯和生成執(zhí)行計(jì)劃,是數(shù)據(jù)庫(kù)性能優(yōu)化中的一個(gè)重要環(huán)節(jié)。以下是硬解析的詳細(xì)過(guò)程:

  • 語(yǔ)法、語(yǔ)義及權(quán)限檢查:Oracle首先會(huì)對(duì)SQL語(yǔ)句進(jìn)行語(yǔ)法檢查,確保語(yǔ)句的拼寫(xiě)和結(jié)構(gòu)正確無(wú)誤。接著進(jìn)行語(yǔ)義檢查,驗(yàn)證語(yǔ)句中引用的對(duì)象是否存在以及執(zhí)行語(yǔ)句的用戶(hù)是否具有相應(yīng)的權(quán)限。
  • 查詢(xún)轉(zhuǎn)換:Oracle會(huì)應(yīng)用不同的轉(zhuǎn)換技巧,將SQL語(yǔ)句轉(zhuǎn)換為語(yǔ)義上等價(jià)的其他形式。例如,COUNT(1)可能會(huì)被轉(zhuǎn)換為COUNT(*),以?xún)?yōu)化查詢(xún)性能。
  • 根據(jù)統(tǒng)計(jì)信息生成執(zhí)行計(jì)劃:這是硬解析中最耗時(shí)的步驟。Oracle會(huì)根據(jù)數(shù)據(jù)庫(kù)的統(tǒng)計(jì)信息,如表的大小、索引的統(tǒng)計(jì)數(shù)據(jù)等,來(lái)確定執(zhí)行SQL語(yǔ)句的最佳路徑,即成本最低的執(zhí)行計(jì)劃。
  • 將游標(biāo)信息(執(zhí)行計(jì)劃)保存到庫(kù)緩存:一旦執(zhí)行計(jì)劃生成,Oracle會(huì)將這個(gè)執(zhí)行計(jì)劃保存在共享池(Shared Pool)的庫(kù)緩存(Library Cache)中,以便后續(xù)相同的SQL語(yǔ)句可以重用這個(gè)執(zhí)行計(jì)劃,減少硬解析的發(fā)生。

硬解析的觸發(fā)條件包括:

  • 首次執(zhí)行某個(gè)SQL語(yǔ)句時(shí),因?yàn)閿?shù)據(jù)庫(kù)尚未為其生成解析結(jié)果,必須進(jìn)行硬解析。
  • 如果一個(gè)已經(jīng)硬解析過(guò)的SQL語(yǔ)句對(duì)應(yīng)的解析結(jié)果在共享池中被替換或因其他原因失效(例如,相關(guān)的數(shù)據(jù)庫(kù)對(duì)象元數(shù)據(jù)發(fā)生變化),那么下次執(zhí)行該語(yǔ)句時(shí)需要重新進(jìn)行硬解析。
  • 即使對(duì)于相同的SQL文本,如果其綁定變量值或會(huì)話(huà)環(huán)境(如當(dāng)前用戶(hù)的權(quán)限、NLS設(shè)置等)發(fā)生變化,導(dǎo)致生成的解析樹(shù)或執(zhí)行計(jì)劃與緩存中的不一致,也會(huì)觸發(fā)硬解析。
  • 某些類(lèi)型的SQL語(yǔ)句,如DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句,由于它們的操作通常是不可緩存的,因此總是進(jìn)行硬解析。

硬解析對(duì)數(shù)據(jù)庫(kù)性能有顯著影響,因?yàn)樗鼤?huì)消耗大量的CPU資源和內(nèi)存,增加磁盤(pán)I/O,延長(zhǎng)查詢(xún)響應(yīng)時(shí)間,降低用戶(hù)體驗(yàn)。因此,在數(shù)據(jù)庫(kù)性能優(yōu)化中,通常建議盡量減少硬解析的發(fā)生,通過(guò)使用綁定變量、優(yōu)化SQL語(yǔ)句結(jié)構(gòu)等方式來(lái)提高軟解析的比例,從而提升數(shù)據(jù)庫(kù)的整體性能。

當(dāng)必須將 SQL 語(yǔ)句加載到共享池中時(shí),會(huì)發(fā)生硬解析。在這種情況下,Oracle Server 必須在共享池中分配內(nèi)存并解析語(yǔ)句。

當(dāng)共享池太小時(shí),或者當(dāng)您有沒(méi)有綁定變量的不可重用 SQL 語(yǔ)句時(shí),可能會(huì)發(fā)生過(guò)多的硬解析。

我們可能會(huì)想到 AWR 報(bào)告,其中有一節(jié)標(biāo)題為“SQL ordered by Parse Calls”,但是這里的數(shù)值不僅是硬解析調(diào)用,而且還包含了軟解析。

alt

因此我們可以使用查詢(xún)表中dba_hist_active_sess_history IN_HARD_PARSE='Y' 的語(yǔ)句,查出真正的硬解析語(yǔ)句。

查詢(xún)一段時(shí)間以來(lái)硬解析次數(shù)最高語(yǔ)句

select INSTANCE_NUMBER,TOP_LEVEL_SQL_ID,SQL_ID,count(*)
from dba_hist_active_sess_history
where IN HARD_PARSE='Y'
and snap_id>=39072 and snap_id<=39073
and sample_time>to_date('20240814 09:09','yyyymmdd hh24:mi')
and sample_time<to_date('20240814 10:10','yyyymmdd hh24:mi')
group by INSTANCE_NUMBER,TOP_LEVEL_SQL_ID,SQL_ID
having count(*)>10
order by count(*) desc;

alt

查詢(xún)一段時(shí)間以來(lái)所有實(shí)例硬解析top語(yǔ)句???????

select TOP_LEVEL_SQL_ID,SQL_ID,count(*
from dba_hist_active_sess_history
where IN_HARD_PARSE='Y'
and snap_id>=39072 and snap_id<=39093
and sample_time>to_date('20240814 09:08','yyyymmdd hh24:mi')
and sample_time<to_date('20240814 16:15','yyyymmdd hh24:mi')
group by TOP_LEVEL_SQL_ID,SQL_ID
having count(*)>10
order by count(*) desc;

alt

TOP_LEVEL_SQL_ID和SQL_ID

很多時(shí)候面對(duì)包或者存儲(chǔ)過(guò)程,我們看到的"sql_id"僅僅是包或者存儲(chǔ)過(guò)程本身的"sql_id",但對(duì)于包以及存儲(chǔ)過(guò)程里面到底包含了哪些sql是不知道的,這時(shí)候就可以利用這一列,查出包或者存儲(chǔ)過(guò)程里的一系列sql_id。

查詢(xún)存儲(chǔ)過(guò)程中那些sql語(yǔ)句慢

查詢(xún)出硬解析語(yǔ)句為存儲(chǔ)過(guò)程時(shí),如何查看存儲(chǔ)過(guò)程中的sql語(yǔ)句

###查詢(xún)存儲(chǔ)過(guò)程中那些語(yǔ)句慢
set verify on
set echo on
set lines 250
set head on
set tab off
WITH snaps AS
 (SELECT /*+ materialize*/
   snap_id, dbid
    FROM dba_hist_snapshot
   WHERE begin_interval_time > SYSDATE - &days),
obj AS
 (SELECT /*+ materialize*/
   object_id, subprogram_id
    FROM DBA_PROCEDURES
   WHERE object_name = UPPER ('&package_name')
                AND procedure_name = UPPER('&procedure_name'))
SELECT /*+  push_subq(snp) opt_param('_optimizer_use_feedback' 'false') */
 t.*
  FROM (SELECT sql_id,
               event,
               a.SQL_PLAN_HASH_VALUE,
               COUNT(DISTINCT sql_exec_id || sql_exec_start) calls,
               count(1) cnt
          FROM dba_hist_active_sess_history a
         WHERE (PLSQL_ENTRY_OBJECT_ID, PLSQL_ENTRY_SUBPROGRAM_ID) IN
               (SELECT object_id, subprogram_id FROM obj)
           AND (dbid, SNAP_ID) IN (SELECT /*+qb_name(snp)*/
                                    dbid, SNAP_ID
                                     FROM snaps)
         GROUP BY sql_id, SQL_PLAN_HASH_VALUE, event) t
 ORDER BY sql_id, SQL_PLAN_HASH_VALUE, event, cnt DESC
 /
 CLEAR COLUMNS

到此這篇關(guān)于Oracle數(shù)據(jù)庫(kù)如何找到 Top Hard Parsing SQL 語(yǔ)句?的文章就介紹到這了,更多相關(guān)Oracle Top Hard Parsing SQL 語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle使用EMCC監(jiān)控當(dāng)前所有數(shù)據(jù)庫(kù)的流程步驟

    Oracle使用EMCC監(jiān)控當(dāng)前所有數(shù)據(jù)庫(kù)的流程步驟

    EMCC,全稱(chēng)Oracle Enterprise Manager Cloud Control,是Oracle提供的一套集中化監(jiān)控工具,可以對(duì)數(shù)據(jù)庫(kù)、操作系統(tǒng)、中間件等進(jìn)行監(jiān)控,本文小編給大家介紹了Oracle使用EMCC監(jiān)控當(dāng)前所有數(shù)據(jù)庫(kù)的流程步驟,需要的朋友可以參考下
    2024-09-09
  • oracle怎樣才能徹底卸載干凈

    oracle怎樣才能徹底卸載干凈

    Oracle安裝上之后,通過(guò)自帶的卸載工具一般都無(wú)法將程序卸載干凈,導(dǎo)致下次的程序安裝出錯(cuò),這篇文章主要給大家介紹了關(guān)于oracle怎樣才能徹底卸載干凈的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Oracle Connect to Idle Instance解決方法

    Oracle Connect to Idle Instance解決方法

    本文將介紹Oracle如何解決Connect to Idle Instance問(wèn)題,需要了解的朋友可以參考下
    2012-11-11
  • Oracle數(shù)據(jù)庫(kù)中基本的查詢(xún)優(yōu)化與子查詢(xún)優(yōu)化講解

    Oracle數(shù)據(jù)庫(kù)中基本的查詢(xún)優(yōu)化與子查詢(xún)優(yōu)化講解

    這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)中基本的查詢(xún)優(yōu)化與子查詢(xún)優(yōu)化講解,舉了實(shí)例來(lái)分析子查詢(xún)對(duì)性能的影響,需要的朋友可以參考下
    2016-01-01
  • Win7徹底卸載Oracle 11g圖文步驟(靠譜)

    Win7徹底卸載Oracle 11g圖文步驟(靠譜)

    網(wǎng)上資料結(jié)合自己的操作整理出的一套靠譜的徹底卸載Oracle 11g的圖文步驟,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-03-03
  • 解決Oracle?DISTINCT?報(bào)錯(cuò)?inconsistent?datatypes:?expected?-?got?CLOB(數(shù)據(jù)類(lèi)型不一致:?應(yīng)為?-,?但卻獲得?CLOB)的問(wèn)題

    解決Oracle?DISTINCT?報(bào)錯(cuò)?inconsistent?datatypes:?expected?

    這篇文章主要介紹了Oracle DISTINCT報(bào)錯(cuò)inconsistent datatypes:expected-got CLOB(數(shù)據(jù)類(lèi)型不一致:?應(yīng)為-,但卻獲得?CLOB),本文給大家分享三種解決方案,需要的朋友可以參考下
    2023-07-07
  • 在Oracle中使用正則表達(dá)式

    在Oracle中使用正則表達(dá)式

    這篇文章介紹了在Oracle中使用正則表達(dá)式的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 詳解Oracle游標(biāo)的簡(jiǎn)易用法

    詳解Oracle游標(biāo)的簡(jiǎn)易用法

    這篇文章主要介紹了詳解Oracle游標(biāo)的簡(jiǎn)易用法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • oracle?rac新增、替換硬盤(pán)的操作方法

    oracle?rac新增、替換硬盤(pán)的操作方法

    文章詳細(xì)描述了在RAC(Real?Application?Clusters)環(huán)境中更新磁盤(pán)組的步驟,包括刪除舊磁盤(pán)的分區(qū)、添加新磁盤(pán)、重新平衡磁盤(pán)組、刪除臨時(shí)中轉(zhuǎn)磁盤(pán)以及更新多路徑配置,最終確保所有磁盤(pán)組和多路徑配置正確無(wú)誤,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Oracle 查看表空間的大小及使用情況sql語(yǔ)句

    Oracle 查看表空間的大小及使用情況sql語(yǔ)句

    表空間使用情況包括:查看表空間的名稱(chēng)及大小/查看表空間物理文件的名稱(chēng)及大小/查看回滾段名稱(chēng)及大小等等感興趣的你可以參考下本文
    2013-03-03

最新評(píng)論