1. 程式人生 > >效能調優分析之:Oracle SQL執行計劃報告生成器

效能調優分析之:Oracle SQL執行計劃報告生成器

Oracle SQL執行計劃分析器功能的建立3步曲:
1 首先,編譯XYG_ALD_SESS_PKG的Package頭。
(XYG_ALD_SESS_PKG.sql)
2 接著要建立好下面的4個檢視物件。因為XYG_ALD_SESS_PKG包體會用到。(View Create Script v1.0.sql)
如果出現沒許可權訪問GV$SQL_PLAN_MONITOR這些物件,請先用sys使用者賦值。
3 最後,編譯XYG_ALD_SESS_PKG的包體。完工!
(XYG_ALD_SESS_PKG_BODY.sql)

功能特點說明;
優點:
1 主要是使用方便,效率高。
個人覺得是一個非常高效而且非常簡潔(也可以說是簡單)的一個SQL執行計劃分析工具。
主要是借用了標準功能的一些執行計劃分析表(例如GV$SQL_PLAN_MONITOR等),通過二次封裝開發得出的一個完整的SQL執行計劃分析報告。
而且自己新增一些檢視執行計劃的時候需要關注的資訊。自己寫的東西,只要是內容不會出錯,還是很好用的。
另外,使用方便是體現在,如果要具體分析某個SQL的執行計劃,分析其效能瓶頸,甚至不需要花費時間找所執行的指令碼對應是哪個SQL_ID,
只需要在Hint輸入足夠唯一的關鍵字,然後根據關鍵字,就可以直接得出該SQL的完整執行計劃報告。
而且執行計劃報告裡面也會非常直觀體現一些關鍵的效能指標的報告資訊,使得檢視SQL的執行計劃,分析SQL的效能瓶頸變得如此的簡單。
2 SQL報告的執行速度快。
Oracle資料庫自帶功能的dbms_sqltune.report_sql_monitor,在分析一個比較複雜的SQL,一般都需要2分鐘以上。而這個開發的功能,只需要6秒左右就可以出結果。
當然,速度快主要是因為開發的功能只需要考慮一種txt執行計劃報告,而自帶的dbms_sqltune需要同時考慮多種不同樣式的報告(例如html)的可能,所以肯定複雜很多。
3 因為是自己開發的,所以,有一些有分析意義的欄位也可以自己新增。
例如SQL讀取快取區的總位元組數,還有用到的索引範圍掃描和索引跳躍掃描的資訊,以及Predicate Information和實際執行的時候的繫結變數窺探的值等。
可以非常直觀地協助分析對應的執行計劃是否正確!

缺點:
分割槽表的詳細執行計劃資訊方面支援程度不高。主要是考慮到執行計劃的欄位太多的話,看起來亂。
另外,為了精簡執行計劃的長度,精簡了E-bytes欄位。有需要的兄臺可以自己修改原始碼,新增。
另外,只可以是txt的結果報告。

特別說明:
1 該功能是由本人([email protected])編寫,如果要分享,請必須註明轉載。
2 該功能的原型是dbms_sqltune.report_sql_monitor(開發的時候也有參考了它的原始碼)。同時也參考了 DBMS_XPLAN.DISPLAY_CURSOR 的原始碼(例如繫結變數窺探的值的獲取等)。
所以,該指令碼請在資料庫版本11g(包括11g版本)以上的Oracle資料庫中使用。
低於11g的版本的Oracle不支援實時監控sql 的功能,所以本指令碼也就無法使用了。這點必須要注意!
3 還有,指令碼的和size相關的結果和一個系統引數的配置有關係,就是db_block_size(SELECT VALUE FROM V$PARAMETER WHERE NAME = ‘db_block_size’)
預設=8192的。如果修改了這個配置,不是8192(8K)的話,請對應修改一些程式碼(*8的部分,不明白的可以找我)。否則算出來的size可能有誤。
4 該指令碼已經全部通過測試,在EBS環境(11gr2,apps使用者) 以及 一個新的Oracle資料庫環境(12C,sys使用者)測試通過。
5 如果有報錯,最好自己先解決一下。實在無法解決的請聯絡我:

[email protected]
6 如果發現有bug請反饋給我,我好進一步修正!謝謝!

—使用例項:

--執行要分析的SQL指令碼:
SELECT /*+ SAMT004 monitor gather_plan_statistics */*
FROM XYG_JBI_SHIP_PLAN_HEADERS_V2
WHERE SALES_ORG_ID=83
AND CREATION_DATE BETWEEN DATE'2017-03-01' AND DATE'2017-03-05'+0.99999
ORDER BY SEND_NUM;

--接著,用hint的關鍵字SAMT004直接定位要分析的SQL的執行計劃報告
SELECT XYG_ALD_SESS_PKG.GET_SQLM_REPORT('SAMT004') FROM DUAL;

結果:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

相關推薦

效能調分析Oracle SQL執行計劃報告生成器

Oracle SQL執行計劃分析器功能的建立3步曲: 1 首先,編譯XYG_ALD_SESS_PKG的Package頭。 (XYG_ALD_SESS_PKG.sql) 2 接著要建立好下面的4個檢視物件。因為XYG_ALD_SESS_PKG包體會用到。(V

ifeve.com 南方《JVM 效能調實戰使用阿里開源工具 TProfiler 在海量業務程式碼中精確定位效能程式碼》

https://blog.csdn.net/defonds/article/details/52598018 多次拉取 JStack,發現很多執行緒處於這個狀態:    at jrockit/vm/Allocator.getNewTla(JJ)V(Native Method) 

JVM 效能調實戰一次系統性能瓶頸的尋找過程

玩過效能優化的朋友都清楚,效能優化的關鍵並不在於怎麼進行優化,而在於怎麼找到當前系統的效能瓶頸。效能優化分為好幾個層次,比如系統層次、演算法層次、程式碼層次...JVM 的效能優化被認為是底層優化,門檻較高,精通這種技能的人比較少。筆者呆過幾家技術力量不算弱的公司,每個公司內

SQL Server 效能調2 索引(Index)的建立

前言 索引是關係資料庫中最重要的物件之一,他能顯著減少磁碟I/O及邏輯讀取的消耗,並以此來提升 SELECT 語句的查詢效能。但它是一把雙刃劍,使用不當反而會影響效能:他需要額外的空間來存放這些索引資訊,並且當資料更新時需要一些額外開銷來保持索引的同步。 形象的來說索引就像

JVM 性能調實戰一次系統性能瓶頸的尋找過程

大量 調用棧 怎麽 鎖定 穩定 verbose 註意 代碼層次 一行 前言: 玩過性能優化的朋友都清楚,性能優化的關鍵並不在於怎麽進行優化,而在於怎麽找到當前系統的性能瓶頸。性能優化分為好幾個層次,比如系統層次、算法層次、代碼層次…JVM 的性能優化被認為是底層優化,門檻較

ifeve.com 南方《JVM 性能調實戰使用阿裏開源工具 TProfiler 在海量業務代碼中精確定位性能代碼》

oca ive java tla inline .net lin 原因 調優 https://blog.csdn.net/defonds/article/details/52598018 多次拉取 JStack,發現很多線程處於這個狀態: at jrockit/vm/

Linux工具效能調系列一效能調泛談

一,為什麼需要效能調優 我們平時中,總會遇到各種各種的效能問題,有應用層面的,網路層面的,作業系統層面的等等。在我看來,我們需要效能調優的原因有以下幾個: (1) 這些問題如果不解決,會直接影響到我們的系統性能,甚至造成我們服務的不可用 (2) 加大我們的伺服器成本 (3) 迅速定位問題原因,迅速解決,降低

Linux工具效能調系列二buffer和cache

一,案例入門 我們來看一個例子,我們來看free輸出,free採集資料來源是:/proc/meminfo檔案,對於這個檔案,會貫穿這個系列。 [email protected]:~# free total used free sh

Linux工具效能調系列三swap問題定位

一,預備知識 1.1 什麼是swap swap當我們指的名詞的時候,它可以是一個分割槽,也可以是一個檔案,是作業系統中一個存放從記憶體中置換出的資料的地方。 當我們指的是一個動詞時候,代表的是從實體記憶體交換資料到swap分割槽這個動作。 1.2 為什麼會swap (1) 當實體記憶體不夠用時候,會根

JVM 效能調實戰 使用阿里開源工具 TProfiler 在海量業務程式碼中精確定位效能程式碼

                本文是《JVM 效能調優實戰之:一次系統性能瓶頸的尋找過程》 的後續篇,該篇介紹瞭如何使用 JDK 自身提供的工具進行 JVM 調優將 TPS 由 2.5 提升到 20 (提升了 7 倍),並準確定位系統瓶頸:我們應用裡靜態物件不是太多、有大量的業務執行緒在頻繁建立一些生命週期

Spark 效能調 Rdd reduceByKey 本地聚合(也就是map端聚合運算元)

簡單程式碼 val lines = sc.textFile("hdfs://") val words = lines.flatMap(_.split(" ")) val pairs = words.map((_, 1)) val counts = pairs.reduceByKey(_

golang 效能調分析工具 pprof(下)

[golang 效能調優分析工具 pprof(上)篇](https://www.cnblogs.com/jiujuan/p/14588185.html), 這是下篇。 ## 四、net/http/pprof ### 4.1 程式碼例子 1 > go version go1.13.9 把上面的程式例子稍

Oracle SQL執行計劃基線總結(SQL Plan Baseline)

為了驗證基線中一個處於不可接受狀態的執行計劃是否比一個處於可接受狀態的執行計劃具有更高的效率,必須通過演化來驗證,需要讓優化器以不同的執行計劃來執行這條SQL語句,觀察不可接受狀態的執行計劃基線是否會帶來更好的效能,如果效能確實更高,這個不可接受狀態的基線將會轉換為可接受狀態。演化的方式有兩種:

JVM快速調手冊Java程式效能分析工具JavaVisualVM(Visual GC)

VisualVM 是一款免費的\集成了多個JDK 命令列工具的視覺化工具,它能為您提供強大的分析能力,對 Java 應用程式做效能分析和調優。這些功能包括生成和分析海量資料、跟蹤記憶體洩漏、監控垃圾回收器、執行記憶體和 CPU 分析,同時它還支援在 MBeans

Spark商業案例與效能調實戰100課》第3課商業案例通過RDD分析大資料電影點評系各種型別的最喜愛電影TopN及效能優化技巧

Spark商業案例與效能調優實戰100課》第3課:商業案例之通過RDD分析大資料電影點評系各種型別的最喜愛電影TopN及效能優化技 原始碼 package com.dt.spark.core

sql server 效能調 邏輯記憶體消耗最大資源分析1 (自sqlserver服務啟動以後)

原文: sql server 效能調優之 邏輯記憶體消耗最大資源分析1 (自sqlserver服務啟動以後) 一.概述   IO 記憶體是sql server最重要的資源,資料從磁碟載入到記憶體,再從記憶體中快取,輸出到應用端,在sql server 記憶體初探中有介紹。在明白了sqlserver記憶體原

sql server 效能調 CPU消耗最大資源分析1 (自sqlserver服務啟動以後)

原文: sql server 效能調優之 CPU消耗最大資源分析1 (自sqlserver服務啟動以後) 一. 概述   上次在介紹效能調優中講到了I/O的開銷檢視及維護,這次介紹CPU的開銷及維護, 在調優方面是可以從多個維度去發現問題如I/O,CPU,  記憶體,鎖等,不管從哪個維度去解決,

oracle效能調--Oracle sql語句跟蹤

SQL> showparameter sql NAME                                 TYPE        VALUE ----------------------------------------------- -------

oracleswap效能調

目標:解決大量Log寫入佔用大量的File Cache,內容利用不充分導致swap 基本原則:儘量使用記憶體,減少swap,同時,儘早flush到外存,早點釋放記憶體給寫cache使用。---特別在持續的寫入操作中,此優化非常有效。 調優措施: vm.swapiness :60

Spark效能調原理分析

spark效能調優之前先明白原理,具體如下: 使用spark-submit提交一個Spark作業之後,這個作業就會啟動一個對應的Driver程序。根據使用的部署模式(deploy-mode)不同,Driver程序可能在本地啟動,也可能在叢集中某個工作節點上啟動。Driver程序本身會根