這種問題要回答好要求知識比較全面。
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的蚌埠網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
1 從操作系統(tǒng)層次上看
看CPU 內(nèi)存 swqp(交換分區(qū))等使用率
2 從磁盤上看
主要看磁盤讀寫。可以用dd測磁盤讀寫的速度 也可以在業(yè)務(wù)高峰期檢測磁盤的速率。
3 從數(shù)據(jù)庫本身來看。
先要看數(shù)據(jù)庫各個參數(shù)的值 。 如sga的大小,process的大小,redo日志的個數(shù)與大小等這些關(guān)系到性能的參數(shù)是否設(shè)置合理。
長期觀察的方式就是看各個時期的AWR報告。里面有各種性能指標(biāo),以及按執(zhí)行時間或資源排列的sql ,以及各種等待時間的排名。從這里面可以掌握數(shù)據(jù)庫的長期的性能變化。
即時觀察的方式就是利用各種sql 查詢 數(shù)據(jù)庫在當(dāng)前時間的各個性能指標(biāo)(AWR報告里面的各種指標(biāo)也都是通過sql查詢出來的)
還有對數(shù)據(jù)庫整體的一個檢查:
如 表的大小,表是否需要分區(qū)而沒有分區(qū),索引是否創(chuàng)建,索引是否失效,開發(fā)人員寫的sql是否正確使用到了索引,頻繁使用的sql是否有綁定變量,有頻繁大批量增刪改的表是否存在高水位。。。
額 總之,這個話題涉及的知識非常多,盡可能多的學(xué)習(xí)一些東西,祝你好運。
作為一個開發(fā)/測試人員,或多或少都得和數(shù)據(jù)庫打交道,而對數(shù)據(jù)庫的操作歸根到底都是SQL語句,所有操作到最后都是操作數(shù)據(jù),那么對sql性能的掌控又成了我們工作中一件非常重要的工作。下面簡單介紹下一些查看oracle性能的一些實用方法:
1、查詢每臺機器的連接數(shù)
select?t.MACHINE,count(*)?from?v$session?t?group?by?t.MACHINE
這里所說的每臺機器是指每個連接oracle數(shù)據(jù)庫的服務(wù)器,每個服務(wù)器都有配置連接數(shù)據(jù)庫的連接數(shù),以websphere為例,在數(shù)據(jù)源中,每個數(shù)據(jù)源都有配置其最大/最小連接數(shù)。
執(zhí)行SQL后,可以看到每個服務(wù)器連接oracle數(shù)據(jù)庫的連接數(shù),若某個服務(wù)器的連接數(shù)非常大,或者已經(jīng)達(dá)到其最大連接數(shù),那么這臺服務(wù)器上的應(yīng)用可能有問題導(dǎo)致其連接不能正常釋放。
2、查詢每個連接數(shù)的sql_text
v$session表里存在的連接不是一直都在執(zhí)行操作,如果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查詢出來的結(jié)果不能看到具體的SQL語句,需要看具體SQL語句的執(zhí)行下面的方法。
3、查詢每個活動的連接執(zhí)行什么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為關(guān)鍵id,以piece排序,如圖
Username是執(zhí)行SQL的數(shù)據(jù)庫用戶名,一個sql_hash_value下的SQL_TEXT組合成一個完整的SQL語句。這樣就可以看到一個連接執(zhí)行了哪些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列可以得到占用最多內(nèi)存的sql語句的相關(guān)信息。
V$SQL是內(nèi)存共享SQL區(qū)域中已經(jīng)解析的SQL語句。
該表在SQL性能查看操作中用的比較頻繁的一張表,關(guān)于這個表的詳細(xì)信息大家可以去?上學(xué)習(xí),介紹得比較詳細(xì)。我這里主要就將該表的常用幾個操作簡單介紹一下:
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;
該查詢結(jié)果列出的是執(zhí)行最頻繁的5個SQL語句。對于這種實用非常頻繁的SQL語句,我們需要對其進(jìn)行持續(xù)的優(yōu)化以達(dá)到最佳執(zhí)行性能。
2、找出需要大量緩沖讀?。ㄟ壿嬜x)操作的查詢:
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;
這種需要大量緩沖讀?。ㄟ壿嬜x)操作的SQL基本是大數(shù)據(jù)量且邏輯復(fù)雜的查詢中會遇到,對于這樣的大數(shù)據(jù)量查詢SQL語句更加需要持續(xù)的關(guān)注,并進(jìn)行優(yōu)化。
3、持續(xù)跟蹤有性能影響的SQL。
SELECT?*?FROM?(
SELECT?PARSING_USER_ID,EXECUTIONS,SORTS,
COMMAND_TYPE,DISK_READS,sql_text?FROM?v$sqlarea
ORDER?BY?disk_reads?DESC
)
WHERE?ROWNUM10
這個語句在SQL性能查看中用的比較多,可以明顯的看出哪些SQL會影響到數(shù)據(jù)庫性能。
本文主要介紹了使用SQL查詢方式查看oracle數(shù)據(jù)庫SQL性能的部分常用方法。此外還有許多工具也能實現(xiàn)SQL性能監(jiān)控,大家可以在網(wǎng)上搜索相關(guān)知識進(jìn)行學(xué)習(xí)。
轉(zhuǎn)載僅供參考,版權(quán)屬于原作者
select rownum as rank, a.*
from (select PARSING_SCHEMA_NAME RUN_USER, --執(zhí)行用戶
SQL_FULLTEXT, --SQL文本,全,帶格式
sql_text, --SQL文本前面部分
elapsed_Time , --單位是微秒,語句執(zhí)行完的總時間,包括CPU時間和等待時間
cpu_time , --CPU時間,語句運行的時間
elapsed_Time - cpu_time wait_time,
trunc((elapsed_Time - cpu_time)*100/elapsed_Time,2) "wait_time_per%",--等待時間所占百分比
executions, --執(zhí)行次數(shù)
elapsed_Time/(executions+1) Per_Time, --每次執(zhí)行平均時間,
buffer_gets, --
disk_reads, --磁盤讀
hash_value, --SQL的hash_value,以備獲取完整SQL
USER_IO_WAIT_TIME,
SORTS --排序次數(shù)
from v$sqlarea t
where elapsed_time 20000 and PARSING_SCHEMA_NAME'SYS'
order by elapsed_time desc) a
where rownum 21
order by elapsed_time desc