Oracle 數據庫SQL性能查看

 Oracle 數據庫SQL性能查看 2013-07-23 17:26:20php

分類: Linuxweb

 

做爲一個開發/測試人員,或多或少都得和數據庫打交道,而對數據庫的操做歸根到底都是SQL語句,全部操做到最後都是操做數據,那麼對sql性能的掌控又成了咱們工做中一件很是重要的工做。下面簡單介紹下一些查看oracle性能的一些實用方法:sql

一、查詢每臺機器的鏈接數數據庫

select t.MACHINE,count(*) from v$session t group by t.MACHINE服務器

這裏所說的每臺機器是指每一個鏈接oracle數據庫的服務器,每一個服務器都有配置鏈接數據庫的鏈接數,以websphere爲例,在數據源中,每一個數據源都有配置其最大/最小鏈接數。session

執行SQL後,能夠看到每一個服務器鏈接oracle數據庫的鏈接數,若某個服務器的鏈接數很是大,或者已經達到其最大鏈接數,那麼這臺服務器上的應用可能有問題致使其鏈接不能正常釋放。oracle

二、查詢每一個鏈接數的sql_textapp

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語句的執行下面的方法。

三、查詢每一個活動的鏈接執行什麼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 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。

四、.從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性能查看操做中用的比較頻繁的一張表,關於這個表的詳細信息你們能夠去http://apps.hi.baidu.com/share/detail/299920# 上學習,介紹得比較詳細。我這裏主要就將該表的經常使用幾個操做簡單介紹一下:

一、列出使用頻率最高的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語句,咱們須要對其進行持續的優化以達到最佳執行性能。

二、找出須要大量緩衝讀取(邏輯讀)操做的查詢: 

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語句更加須要持續的關注,並進行優化。

三、持續跟蹤有性能影響的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性能監控,你們能夠在網上搜索相關知識進行學習。

相關文章
相關標籤/搜索