標籤:
作為一個開發/測試人員,或多或少都得和資料庫打交道,而對資料庫的操作歸根到底都是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 是機器名,就是WebSphere Application Server 的主機名稱。
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_textfrom v$session a,v$sqltext b where a.sql_hash_value = b.HASH_VALUE and a.MACHINE=‘web3‘order by sid,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 Statementfrom v$sqlarea a,dba_users bwhere a.parsing_user_id=b.user_idand a.disk_reads > 100000order by a.disk_reads desc;
用buffer_gets列來替換disk_reads列可以得到佔用最多記憶體的sql語句的相關資訊。
V$SQL是記憶體共用SQL地區中已經解析的SQL語句。
該表在SQL效能查看操作中用的比較頻繁的一張表,關於這個表的詳細資料大家可以去http://apps.hi.baidu.com/share/detail/299920# 上學習,介紹得比較詳細。我這裡主要就將該表的常用幾個操作簡單介紹一下:
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 資料庫SQL效能查看