作為乙個開發
/測試人員
,或多或少都得和資料庫打交道,而對資料庫的操作歸根到底都是
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...