Oracle 資料庫SQL效能查看

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.