午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    oracle中怎么確定性能差的SQL語句
    來源:易賢網(wǎng) 閱讀:1388 次 日期:2014-09-17 10:58:12
    溫馨提示:易賢網(wǎng)小編為您整理了“oracle中怎么確定性能差的SQL語句”,方便廣大網(wǎng)友查閱!

    前者很容易定位。所有的操作系統(tǒng)都可以讓我們查看 CPU 密集型任務(wù)。這些任務(wù)可以追溯到一個特定用戶,一個特定應(yīng)用程序模塊。 CPU 密集型模塊一般都是由較差的代碼和/或結(jié)構(gòu)造成,而不是性能差的 SQL。一旦確定模塊,你必須試圖使之更有效率。一個可能的解決方案是將把某些處理移除程序,讓數(shù)據(jù)庫處理(高明點的 SQL,存儲對象,內(nèi)聯(lián)函數(shù),數(shù)組處理等)。

    第二個是 I/O 密集型的 SQL 語句。這些語句會導(dǎo)致大量的數(shù)據(jù)庫 I/O(全表掃描,排序,更新等),并以很高代價運行幾個小時。從 Oracle 7 開始,解決了 SQL 識別問題。通過查詢數(shù)據(jù)庫共享池區(qū)域,我們可以很容易確定大多數(shù) I/O 密集型 SQL 語句。

    下面 SQL 語句演示了如何確定 I/O 命中率低于 80%的 SQL 語句。這個命中率是,自從 SQL 語句第一次被解析到共享池,通過所有執(zhí)行的語句反應(yīng)整體 I/O。下面可能是最近幾分鐘或幾天的結(jié)果:

    代碼如下:

    sql> SELECT executions,

    2 disk_reads,

    3 buffer_gets,

    4 ROUND((buffer_gets - disk_reads) / buffer_gets, 2) hit_ratio,

    5 sql_text

    6 FROM v$sqlarea

    7 WHERE executions > 0

    8 AND buffer_gets > 0

    9 AND (buffer_gets - disk_reads) / buffer_gets < 0.80

    10 order by 4 desc ;

    EXECUTIONS DISK_READS BUFFER_GETS HIT_RATIO SQL_TEXT

    ---------- ---------- ----------- ---------- -----------------------------------------------------------------------

    16 180 369 .51 SELECT SKU,PREPACK_IND,CASE_ID,TRANSFER_QTY,UNIT_COST,UNIT_RETAIL,ROWID

    FROM TSF_DETAIL WHERE transfer = :1 order by sku

    16 30 63 .52 SELECT TRANSFER,TO_STORE,TO_WH FROM TSFHEAD WHERE TRANSFER = :b1 AND

    TRANSFER_STATUS = 'A'

    2 3 7 .57 SELECT SKU FROM UPC_EAN WHERE UPC = :b1

    12 14 35 .60 SELECT SUBSTR(DESC_UP,1,30),DEPT,SYSTEM_IND FROM DESC_LOOK WHERE

    SKU = :b1

    14 13 35 .63 SELECT UNIT_COST,UNIT_RETAIL,SUBCLASS FROM WIN_SKUS WHERE SKU = :b1

    事實上,我們發(fā)現(xiàn)對特定的 SQL,上面的數(shù)據(jù)有些誤導(dǎo),其實語句沒有問題??紤]下面 v$sqlarea 輸出:

    Executions Disk_Reads Buffer_Gets Hit_Ratio Sql_Text

    ---------- ---------- ----------- --------- --------------------

    2 6 19 0.68 SELECT A.EMP_NO, ...

    該語句的命中率很低,但事實上它很有效。因為,SQL 是通過 UNIQUE 索引操作的,物理磁盤讀取的數(shù)量幾乎與邏輯讀取一樣。UNIQUE 索引顯著減少了整體的物理和邏輯磁盤 I/O 數(shù)量,導(dǎo)致了一個令人誤解的低命中率。

    下面例子,命中率很好。但是真的很好嗎?

    代碼如下:

    Executions Disk_Reads Buffer_Gets Hit_Ratio Sql_Text

    ---------- ---------- ----------- --------- --------------------

    2 3625 178777 0.98 SELECT A.EMP_NO, ...

    這個 SQL 語句看上去很有效。但是, 當(dāng)我們仔細看時,事情就不是那么回事了。命中率并沒有透露出,該語句存在五個表連接,并且每次執(zhí)行進行了超過 3600 個物理磁盤讀取。這是否太多了?是否有效?若不進一步研究,無法回答這兩個問題。事實上,這個實例中,五個表的中其一個錯誤地執(zhí)行了全表掃描。通過重新構(gòu)造 SQL,我們可以減少物理磁盤 I/O 到小于 50,同時,也顯著減少邏輯磁盤 I/O。巧合的是,命中率也下降到不到 70%。

    我們首選 V$SQLAREA 查詢是每個語句執(zhí)行的物理磁盤 I/O 的真實報告。命中率是信息性的,但有時會產(chǎn)生誤導(dǎo)。邏輯 I/O 相關(guān)的很少。如果語句執(zhí)行 1,000,000 個邏輯 I/O,但只用了不到十分之一秒,這就沒人在乎了。這是總的物理 I/O,幾乎消耗了所有的時間,和確定潛在不正確的 SQL。例如:

    代碼如下:

    sql> SELECT sql_text, executions,

    ROUND(disk_reads / executions, 2) reads_per_run,

    disk_reads, buffer_gets,

    ROUND((buffer_gets - disk_reads)

    / buffer_gets, 2) hit_ratio,

    sql_text

    FROM v$sqlarea

    WHERE executions > 0

    AND buffer_gets > 0

    AND (buffer_gets - disk_reads) / buffer_gets < 0.80

    ORDER by 3 desc ;

    前兩個語句會報告更具啟發(fā)性的結(jié)果:

    代碼如下:

    Executions Reads_Per_Run Disk_Reads Buffer_Gets Hit_Ratio Sql_Text

    ---------- ------------- ---------- ----------- --------- ------------

    2 3 6 19 0.68 SELECT ...

    2 1812.5 3625 178777 0.98 SELECT ...

    從視圖 V$SQLAREA 中,我們可以立即隔離所有具有高物理讀取的語句。這些語句可能并不一定低效或?qū)懙貌缓茫∏∈撬鼈冃枰M一步調(diào)查或調(diào)整。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看數(shù)據(jù)庫
    易賢網(wǎng)手機網(wǎng)站地址:oracle中怎么確定性能差的SQL語句
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇剩?/div>

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)