sql優化 識別 低效執行 的SQL語句

2021-09-01 22:19:00 字數 1204 閱讀 2101

oracle中有兩個重要的檢視:-v$sql和v$sqlarea。

(一)-v$sql中記錄的資訊和autotrace顯示的資訊完全一致。檢視包含如下字段資訊:

[img]

第一次執行乙個查詢'select count(*) from emp'後查詢-v$sql檢視可得到

select sql_text,executions,disk_reads,optimizer_mode,buffer_gets,hash_value

from v$sql where sql_text='select count(*) from emp'

再次執行詢'select count(*) from emp'這個查詢,統計資訊中的物理讀(disk_reads)不再增加,因為資料已經在buffer中存在,而buffer_gets繼續增加。執行次數也變為2次。

[img]

(二)v$sqlarea列出了共享sql區(shared sql area)中的sql統計資訊,這些sql按照sql文字的不同,每條會記錄一行統計資料。注意這裡所說的是「按照sql文字」來進行區分,也就是說這個檢視的資訊可以看作是根據sql_text進行的一次匯**計。檢視包含如下字段資訊:

[img]

執行如下sql即可定位到低效率的sql語句。

select executions , disk_reads, buffer_gets,

round((buffer_gets-disk_reads)/buffer_gets,2) hit_radio,

round(disk_reads/executions,2) reads_per_run,

sql_text

from v$sqlarea

where executions>0

and buffer_gets > 0

and (buffer_gets-disk_reads)/buffer_gets < 0.8

order by 4 desc;

*文字相同的sql語句,在資料庫中的意義可能完全不同。如資料庫中存在兩個使用者scott和dmuser,兩個使用者各擁有一張資料表emp。在不同使用者情況下同樣執行'select count(*) from emp'語句。查詢-v$sql檢視時,由於各自查詢的物理物件截然不同,對應生成兩條記錄;查詢v$sqlarea檢視,由於sql_text相同,生成一條記錄。

Sql優化 執行計畫

一段sql 寫好以後,可以通過檢視sql的執行計畫,初步 該sql在執行時的效能好壞,尤其是在發現某個sql語句的效率較差時,我們可以通過檢視執行計畫,分析出該sql 的問題所在。1 開啟熟悉的檢視工具 pl sql developer。在pl sql developer中寫好一段sql 後,按f5...

優化sql,避免影響sql的執行效率

1.避免使用 select from 表名 只查詢需要的需要的字段 如果表字段較多,用到的字段佔表字段中的少數,使用select 造成資源浪費,影響sql執行效率 但是如果查詢的表字段較少,或者表中80 資料字段都是需要用到的,可以使用select from 表名 2.限制結果集的資料量。查詢時不要...

MySQL 定位低效的SQL語句

我們經常會遇到mysql的效能問題,解決辦法之一是去定位到低效的sql語句。比較常用便是通過以下兩種方式定位到執行效率較低的sql語句 注 這裡使用的mysql是5.7版本,以下內容都是基於5.7版本 首先我們應該檢視是否已經開啟了慢查詢日誌 如上是一開始並沒有開啟慢查詢,所以我們需要去開啟並且配置...