oracle資料庫效能查詢

2021-07-06 04:37:37 字數 3357 閱讀 8081

作為乙個開發

/測試人員

,或多或少都得和資料庫打交道,而對資料庫的操作歸根到底都是

sql語句,所有

操作到最後都是

運算元據

,那麼對

sql效能

的掌控又成了我們

工作中一件非常重要的工作。

下面簡單介紹下

一些檢視oracle

效能的一些實用方法:

1、查詢每台機器的連線數

select

t.machine,count(*)

from 

v$session t

group by 

t.machine

這裡所說的每台機器是指每個連線

oracle

資料庫的伺服器,每個伺服器都有配置連線資料庫的連線數,以websphere

為例,在資料來源中,每個資料來源都有配置其最大

/最小連線數。

執行sql

後,可以看到每個伺服器連線

oracle

資料庫的連線數,若某個伺服器的連線數非常大,或者已經達到其最大連線數,那麼這台伺服器上的應用可能有問題導致其連線不能正常釋放。

2、查詢每個連線數的

sql_text

v$session

表裡存在的連線不是一直都在執行操作,如果

sql_hash_value

為空或者0

,則該連線是空閒的,可以查詢哪些連線非空閒, 

web3 

是機器名,就是

的主機名。

select

t.sql_hash_value,t.* 

from 

v$session t 

where 

t.machine='

web3

'and 

t.sql_hash_value!=0

這個sql

查詢出來的結果不能看到具體的

sql語句,需要看具體

sql語句的執行下面的方法。

3、查詢每個活動的連線執行什麼

sql

select

sid,username,sql_hash_value,b.sql_text

from

v$session a,v$sqltext b 

where

a.sql_hash_value = b.hash_value 

anda.machine=

'web3'

order

bysid,username,sql_hash_value,b.piece

order by這句話的作用在於,

sql_text

每條記錄不是儲存乙個完整的

sql,

需要以sql_hash_value

為關鍵id,

以piece

排序,如圖

username

是執行sql

的資料庫使用者名稱,乙個

sql_hash_value

下的sql_text

組合成乙個完整的

sql語句。這樣就可以看到乙個連線執行了哪些

sql。 4、

.從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; 

用buffer_gets

列來替換

disk_reads

列可以得到占用最多記憶體的

sql語句的相關資訊。

v$sql

是記憶體共享sql

區域中已經解析的

sql語句。

該錶在sql

效能檢視操作中用的比較頻繁的一張表,關於這個表的詳細資訊大家可以去

上學習,介紹得比較詳細。我這裡主要就將該錶的常用幾個操作簡單介紹一下: 1、

列出使用頻率最高的5

個查詢:

select 

sql_text,executions 

from (select 

sql_text,executions,

rank() over 

(order by 

executions desc

) exec_rank

from 

v$sql) 

where

exec_rank <=5;

該查詢結果列出的是執行最頻繁的5

個sql

語句。對於這種實用非常頻繁的

sql語句,我們需要對其進行持續的優化以達到最佳執行效能。 2、

找出需要大量緩衝讀取(邏輯讀)操作的查詢:

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; 

這種需要

大量緩衝讀取(邏輯讀)操作

的sql

基本是大資料量且邏輯複雜的查詢中會遇到,對於這樣的大資料量查詢

sql語句更加需要持續的關注,並進行優化。 3、

持續跟蹤有效能影響的sql。

select * from (

select parsing_user_id,executions,sorts,

command_type,disk_reads,sql_text from v$sqlarea

order

by disk_reads desc ) 

where

rownum<10

這個語句在sql

效能檢視中用的比較多,可以明顯的看出哪些

sql會影響到資料庫效能。

本文主要介紹了使用sql

查詢方式檢視

oracle

資料庫sql

效能的部分常用方法。此外還有許多任務具也能實現

sql

oracle資料庫效能

效能檢視v 開頭 v system event 正在等待的資源的系統資訊 v session event 會話累計發生的等待事件 v session wait 會話正在等待或者曾經等待的詳細時間資訊 v session 正在等待或者曾經等待的會話資訊 v metricname 檢視快取記憶體命中率 ...

Oracle資料庫查詢

取得該使用者下所有的表 select from user tables 取得表名為classinfo的注釋資訊 select from user tab comments where table name classinfo 取得該使用者下表名為classinfo表的結構 select from u...

資料庫查詢效能 LinqDB vs Sql查詢

使用linqdb查詢sqlite資料庫資料,不管是大資料還是少量的資料,感覺特別耗時,尤其是首次查詢 乙個含有2.7萬條資料的資料表 首次查詢 二次查詢 我們來嘗試優化一下,使用sql語句查詢 sql連線字串 1 var dbrelativepath dbs englishdict.db3 2var...