查詢效率低下的sql的語句
想要準確地測試sql語句的執行時間和統計資料的值(db block gets、consistents gets、physicas gets),也就是語句的每次執行都和第一次執行時處於基本相同的測試環境,需執行如下語句:
sql>alter system flush shared_pool;
sql>alter session set events 'immediate trace name flush_cache level 1';
從V$SQLAREA中查詢最佔用資源的查詢
select b.username username,a.disk_reads reads,
a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
a.sql_text Statement
from v$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
and a.disk_reads > 100000
order by a.disk_reads desc;
這裡是用disk_reads的值來判斷的,這裡的disk_reads相當於在命令列裡設定autotrace on執行結果的統計資訊的physicas gets的值。
找出需要大量緩衝讀取(邏輯讀)操作的查詢:
select buffer_gets,sql_text
from (select sql_text,buffer_gets,
dense_rank() over
(order by buffer_gets desc) buffer_gets_rank
from v$sql)
where buffer_gets_rank<=5;
2、查詢儲存過程中效率地下的sql。
經常會遇到這種情況,一個存過執行非常慢,但裡面的邏輯很複雜,sql語句非常多,很難得知道是哪些sql語句導致的效能低下,這時候可以用下面的方法跟蹤:
sql>alter session set sql_trace=true;--開啟sql_trace跟蹤的功能。
sql> alter session set tracefile_identifier='yourName';--設定生成跟蹤檔案的檔案識別符號。
sql>exec procName;--執行存過。
sql>alter session set sql_trace=false;--關閉sql_trace跟蹤功能。
獲取生成的trc檔案
sql>SELECT d.VALUE
2 || '/'
3 || LOWER (RTRIM (i.INSTANCE, CHR (0)))
4 || '_ora_'
5 || p.spid
6 || '.trc' as "trace_file_name"
7 FROM (SELECT p.spid
8 FROM v$mystat m, v$session s, v$process p
9 WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
10 (SELECT t.INSTANCE
11 FROM v$thread t, v$parameter v
12 WHERE v.NAME = 'thread'
13 AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
14 (SELECT VALUE
15 FROM v$parameter
16 WHERE NAME = 'user_dump_dest') d;
生產的trc檔名就是上面設定alter session set tracefile_identifier='yourName' 的標誌名。
分析trc檔案:
到user_dump_dest定義的路徑下查詢剛剛最近生成的trace檔案,可以根據時間來排序,找最近的trace檔案,也可以根據SID_ORA_SPID.TRC的規則,即ORCL_ORA_14483.TRC找到TRACE檔案。
接著使用tkprof工具對此trace檔案進行格式化分析,生成分析後的trace檔案。
$tkprof orcl_ora_14483.trc allan.txt explain=system/manager aggregate=yes sys=no waits=yes sort=fchela
TKPROF: Release 11.2.0.1.0 - Development on 星期五 5月 28 16:48:49 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
這裡生成的allan.txt檔案就是我們最終得到的格式化後的trace檔案了,然後開啟這個檔案進行分析,在這個檔案裡就可以看到本次會話產生的所有的sql的統計資訊,很方便的就可以找出效能低下的sql了。
最後總的統計:
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- --------
Parse 20 0.01 0.02 0 58 0 0
Execute 13197 0.81 0.90 17 7436 6316 1484
Fetch 12944 22.86 22.10 20 2205941 0 8972
------- ------ -------- ---------- ---------- ---------- ---------- --------
total 26161 23.68 23.02 37 2213435 6316 10456
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20577218/viewspace-704015/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql查詢效率慢的SQL語句MySql
- 在mysql查詢效率慢的SQL語句MySql
- SQL mother查詢語句SQL
- sql查詢語句流程SQL
- SQL查詢語句 (Oracle)SQLOracle
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- SQL基礎的查詢語句烈鉍SQL
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- SQL Server 查詢歷史執行的SQL語句SQLServer
- postgresql dba常用sql查詢語句SQL
- SQL 查詢語句的執行順序解析SQL
- [20210112]ashtop查詢特定表的SQL語句.txtSQL
- Sql語句本身的優化-定位慢查詢SQL優化
- 記一個實用的sql查詢語句SQL
- 輸入的查詢 SQL 語句,是如何執行的?SQL
- 資料庫查詢優化:使用explain分析sql語句執行效率資料庫優化AISQL
- 一條 SQL 查詢語句是如何執行的?SQL
- 20201214]查詢隱式轉換的sql語句.txtSQL
- [20201214]查詢隱式轉換的sql語句.txtSQL
- SQL Server 語句日期格式查詢方法SQLServer
- SQL單表查詢語句總結SQL
- SQL Server-簡單查詢語句SQLServer
- [20210113]ashtop查詢特定表的SQL語句2.txtSQL
- V$sql查詢未使用繫結變數的語句SQL變數
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- zset如何解決內部連結串列查詢效率低下
- SQL語句替換查詢結果的的寫法舉例SQL
- MySQL關於根據日期查詢資料的sql語句MySql
- Mybatis 裡對映檔案的動態 SQL 語句,實現if,where,foreache的SQL語句動態拼接查詢MyBatisSQL
- MySQL資料庫:7、SQL常用查詢語句MySql資料庫
- GaussDB SQL查詢語句執行過程解析SQL
- MySQL的簡單查詢語句MySql
- mysql dba常用的查詢語句MySql
- mysql查詢每個班的各學科平均分的sql語句MySql
- mysql查詢語句MySql
- Oracle中如何查詢未使用繫結變數的SQL語句?Oracle變數SQL
- 根據emp,dept,salgrade表進行的sql查詢語句(1)SQL
- MySQL系列之一條SQL查詢語句的執行過程MySql
- SQL server資料庫表碎片比例查詢語句SQLServer資料庫