當前位置:首頁 » 數據倉庫 » oracle查看資料庫性能
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle查看資料庫性能

發布時間: 2023-03-12 06:44:11

A. Oracle進行資料庫查詢的小技巧

數據查詢 是資料庫操作中最主要的功能之一;有時候資料庫查詢性能的好壞 直接關繫到資料庫的運行效率 關繫到資料庫的選型 下面筆者不談大道理 只是對其中對一些平時大家容易忽略的查詢小技巧做一些總結 或許大家可能正在為此犯愁呢?

第一個技巧 利用連接符連接多個欄位

如在員工基本信息表中 有員工姓名 員工職位 出身日期等等 如果現在視圖中這三個欄位顯示在同一個欄位中 並且中間有分割符 如我現在想顯示的結果為 經理Victor出身於 年 月 日 這該如何處理呢?其實 這是比較簡單的 我們可以在Select查詢語句中 利用連接符把這些欄位連接起來

如可以這么寫查詢語句

SELECT員工職位 || ||員工姓名|| 出身於 ||出身日期 as 員工出身信息 FROM 員工基本信息表;

通過這條語句就可以實現如上的需求 也就是說 我們在平時查詢中 可以利用||連接符把一些相關的欄位連接起來 這在報表視圖中非常的有用 如筆者以前在設計圖書館管理系統的時候 在書的基本信息處有圖書的出版社 出版序列號等等內容 但是 有時會在列印報表的時候 需要把這些欄位合並成一個欄位列印 為此 就需要利用這個連接符把這些欄位連接起來 而且 利用連接符還可以在欄位中間加入一些說明性的文字 以方便大家閱讀 如上面我在員工職位與員工姓名之間加入了空格;並且在員工姓名與出身日期之間加入了出身於幾個注釋性的文字 這些功能看起來比較小 但是卻可以大大的提高內容的可讀性 這也是我們在資料庫設計過程中需要關注的一個內容

總之 令後採用連接符 可以提高我們報表的可讀性於靈活性

第二個技巧 取消重復的行

如在人事管理系統中 有員工基本信息基本表 在這張表中 可能會有部門 職位 員工姓名 身份證件號碼等欄位 若查詢這些內容 可能不會有重復的行 但是 我若想知道 在公司內部設置了哪些部門與職位的時候 並且這些部門與職位配置了相關人員 此時 又該如何查詢呢?

若我現在直接查詢部門表 其可以知道系統中具體設置了哪些部門與職位 但是 很有可能這些部門或者職位由於人事變動的關系 現在已經沒有人了 所以 這里查詢出來的是所有的部門與職位信息 而不能夠保證這個部門或者職位一定有職員存在 也就是說 這不能夠滿足於我們上面的要求

若我現在直接從員工信息表中查詢 雖然可以保證所查詢出來的部門與職位信息 一定有員工信息的存在 但是 此時查詢出來的部門與職位信息會有重復的行 如采購部門分工合作 可能會有采購采購小組長 此時 在查詢出來的部門與職位的信息中 就會有三條重復的記錄

所以 以上兩種處理方式 都不能夠百分之百的滿足企業用戶的需求 此時 我們其實可以利用一個DISTINCT函數 來消除其中查詢出來的重復行

如我們可以利用SELECT DISTINCT 部門信息 職位信息 FROM 員工基本信息表 通過這條加了DISTINCT約束的查詢語句 不但可以查詢出所有有員工的職位與部門信息 而且 會把重復的記錄過濾掉 從而提高可閱讀性

所以 在資料庫設計過程中 特別是在查詢語句的使用中 這個函數特別有用

第三個技巧 勤用WHERE語句

我們都知道 資料庫查詢效率高不高 是我們評價資料庫設計好壞的一個重要標准 毋庸置疑 在資料庫查詢中勤用Where條件語句 是提高資料庫查詢性能的一個很重要的手段之一 特別是在設計到比較大的表中查詢符合條件的記錄過程中 利用WHERE條件語句加以限制 可以大幅度的提高查詢的響應速度

如在圖書館管理系統中 現在有人想查詢 注冊會計師 輔導用書的時候 雖然不在書的類別或者名稱中輸入 注冊會計師 先查詢出全部的紀錄 然後再一條條的看是否有相關的書籍信息 也是可行的 但是 這么處理的話 一方面系統響應的速度會非常的慢 因為裡面記錄很多 另一方面 查詢的結果看起來也會非常的頭疼

其實 我們只需要在查詢中加入一些查詢的參數 利用Where條件語句加以限制 則即可以提高資料庫響應的速度 也可以找出最符合用戶需求的數據

另外 我也接觸過一些在Oracle資料庫上設計的平台型管理軟體 他們可以自定義相關的報表 在報表設計中 只要用戶在前台設計平台中 選中 大表查詢 的話 則這個平台會在生成報表的時候 自動應用Where條件語句 以提高前台系統從資料庫查詢數據的效率

所以 筆者認為在Oracle資料庫系統設計中 要勤於使用Where語句 利用Where語句來提高資料庫查詢的效率

第四個技巧 靈活使用COUNT函數

在查詢處理的時候 COUNT函數可以說是我們應用的比較多的函數之一 如我們有時候需要統計員工的人數 統計圖書的種類數的時候 都需要使用到這個函數 不過 這個函數很多人可能會用 但是到靈活應用的地步 還是有一點差距

下面筆者就COUNT函數的一些應用技巧談談自己的心得

一是要靈活放置COUNT函數的位置 因為利用COUNT函數統計記錄數的時候 是會考慮空行的記錄的 如在數據表中一般有序列欄位與其它的有意義欄位兩類 有時候可能序列欄位中有內容而其它欄位中沒有內容 則在利用COUNT函數統計記錄數量的時候 會把這個空記錄也考慮進去 很明顯 則就會發生統計的錯誤 所以 這個COUNT函數該放在哪個位置上 還是比較講究的 一般的話 筆者試建議不要放在序列號欄位上 而要放在一些關鍵的實體欄位中 如統計員工人數的時候 則就可以放在員工姓名或者編號上等等

二是靈活跟其它函數搭配使用 如在上面的例子中 筆者談到有時候用戶需要知道現在有員工編制的部門與職位有哪一些 我們可以利用DISTINCT函數來找出具體的部門 但是 我現在只想知道有編制的部門與職位具體有多少 此時 我們也可以利用COUNT 與DISTINCT函數結合應用 找出我們所需要的數據 在COUNT函數中 可以指定ALL與DISTINCT選項 默認的情況下 是ALL選項 表示統計所有的行 其中也包括重復的行 而DISTINCT就表示只統計不重復的行 可見 COUNT函數跟其它函數搭配使用的話 可以簡化我們的查詢語句 提高查詢效率

第五個技巧 只查詢時必須的欄位

有時候 用戶不同的查詢需求都要用到同一張表 如在員工信息表中包含了很多內容 有時候用戶想要知道正式員工有多少;管理層員工有多少;生產線員工又有哪些;或者想知道合同即將到期的員工有哪些 為此 就遇到一個問題 因為這些內容基本上都是在同一張表中 那是在同一個視圖中實現 而是根據需求不同 設計不同的視圖呢?

若單從技術上考慮 兩這都是可以實現的 不會有多大的難度 但是 若是從資料庫性能上考慮在 則還是採用不同的視圖來實現不同的需求為好

一方面 若從安全方面講 則可以根據不同的視圖來控制相關的訪問許可權 可見 把視圖細化 在許可權控制上則會更加的靈活

lishixin/Article/program/Oracle/201311/17049

B. 資料庫性能優化有哪些措施

1、調整數據結構的設計

這一部分在開發信息系統之前完成,程序員需要考慮是否使用ORACLE資料庫的分區功能,對於經常訪問的資料庫表是否需要建立索引等。

2、調整應用程序結構設計

這一部分也是在開發信息系統之前完成,程序員在這一步需要考慮應用程序使用什麼樣的體系結構,是使用傳統的Client/Server兩層體系結構,還是使用Browser/Web/Database的三層體系結構。不同的應用程序體系結構要求的資料庫資源是不同的。

3、調整資料庫sql語句

應用程序的執行最終將歸結為資料庫中的SQL語句執行,因此SQL語句的執行效率最終決定了ORACLE資料庫的性能。ORACLE公司推薦使用ORACLE語句優化器(OracleOptimizer)和行鎖管理器(row-levelmanager)來調整優化SQL語句。

4、調整伺服器內存分配

內存分配是在信息系統運行過程中優化配置的,資料庫管理員可以根據資料庫運行狀況調整資料庫系統全局區(SGA區)的數據緩沖區、日誌緩沖區和共享池的大小;還可以調整程序全局區(PGA區)的大小。需要注意的是,SGA區不是越大越好,SGA區過大會佔用操作系統使用的內存而引起虛擬內存的頁面交換,這樣反而會降低系統。

5、調整硬碟I/O

這一步是在信息系統開發之前完成的。資料庫管理員可以將組成同一個表空間的數據文件放在不同的硬碟上,做到硬碟之間I/O負載均衡。

6、調整操作系統參數

例如:運行在UNIX操作系統上的ORACLE資料庫,可以調整UNIX數據緩沖池的大小,每個進程所能使用的內存大小等參數。

實際上,上述資料庫優化措施之間是相互聯系的。ORACLE資料庫性能惡化表現基本上都是用戶響應時間比較長,需要用戶長時間的等待。但性能惡化的原因卻是多種多樣的,有時是多個因素共同造成了性能惡化的結果,這就需要資料庫管理員有比較全面的計算機知識,能夠敏感地察覺到影響資料庫性能的主要原因所在。另外,良好的資料庫管理工具對於優化資料庫性能也是很重要的。

一、ORACLE資料庫性能優化工具

常用的資料庫性能優化工具有:

ORACLE資料庫在線數據字典,ORACLE在線數據字典能夠反映出ORACLE動態運行情況,對於調整資料庫性能是很有幫助的。

操作系統工具,例如UNIX操作系統的vmstat,iostat等命令可以查看到系統系統級內存和硬碟I/O的使用情況,這些工具對於管理員弄清出系統瓶頸出現在什麼地方有時候很有用。

SQL語言跟蹤工具(SQLTRACEFACILITY),SQL語言跟蹤工具可以記錄SQL語句的執行情況,管理員可以使用虛擬表來調整實例,使用SQL語句跟蹤文件調整應用程序性能。SQL語言跟蹤工具將結果輸出成一個操作系統的文件,管理員可以使用TKPROF工具查看這些文件。

ORACLEEnterpriseManager(OEM),這是一個圖形的用戶管理界面,用戶可以使用它方便地進行資料庫管理而不必記住復雜的ORACLE資料庫管理的命令。

EXPLAINPLAN——SQL語言優化命令,使用這個命令可以幫助程序員寫出高效的SQL語言。

二、ORACLE資料庫的系統性能評估

信息系統的類型不同,需要關注的資料庫參數也是不同的。資料庫管理員需要根據自己的信息系統的類型著重考慮不同的資料庫參數。

1、在線事務處理信息系統(OLTP),這種類型的信息系統一般需要有大量的Insert、Update操作,典型的系統包括民航機票發售系統、銀行儲蓄系統等。OLTP系統需要保證資料庫的並發性、可靠性和最終用戶的速度,這類系統使用的ORACLE資料庫需要主要考慮下述參數:

資料庫回滾段是否足夠?

是否需要建立ORACLE資料庫索引、聚集、散列?

系統全局區(SGA)大小是否足夠?

SQL語句是否高效?

2、數據倉庫系統(DataWarehousing),這種信息系統的主要任務是從ORACLE的海量數據中進行查詢,得到數據之間的某些規律。資料庫管理員需要為這種類型的ORACLE資料庫著重考慮下述參數:

是否採用B*-索引或者bitmap索引?

是否採用並行SQL查詢以提高查詢效率?

是否採用PL/SQL函數編寫存儲過程?

有必要的話,需要建立並行資料庫提高資料庫的查詢效率

三、SQL語句的調整原則

SQL語言是一種靈活的語言,相同的功能可以使用不同的語句來實現,但是語句的執行效率是很不相同的。程序員可以使用EXPLAINPLAN語句來比較各種實現方案,並選出最優的實現方案。總得來講,程序員寫SQL語句需要滿足考慮如下規則:

1、盡量使用索引。試比較下面兩條SQL語句:

語句A:SELECTdname,

(SELECTdeptnoFROMemp);

語句B:SELECTdname,deptnoFROMdeptWHERENOTEXISTS

(SELECTdeptnoFROMempWHEREdept.deptno=emp.deptno);

這兩條查詢語句實現的結果是相同的,但是執行語句A的時候,ORACLE會對整個emp表進行掃描,沒有使用建立在emp表上的deptno索引,執行語句B的時候,由於在子查詢中使用了聯合查詢,ORACLE只是對emp表進行的部分數據掃描,並利用了deptno列的索引,所以語句B的效率要比語句A的效率高一些。

2、選擇聯合查詢的聯合次序。考慮下面的例子:

SELECTstuffFROMtabaa,tabbb,tabcc

WHEREa.acolbetween:alowand:ahigh

ANDb.bcolbetween:blowand:bhigh

ANDc.ccolbetween:clowand:chigh

ANDa.key1=b.key1

AMDa.key2=c.key2;

這個SQL例子中,程序員首先需要選擇要查詢的主表,因為主表要進行整個表數據的掃描,所以主表應該數據量最小,所以例子中表A的acol列的范圍應該比表B和表C相應列的范圍小。

3、在子查詢中慎重使用IN或者NOTIN語句,使用where(NOT)exists的效果要好的多。

4、慎重使用視圖的聯合查詢,尤其是比較復雜的視圖之間的聯合查詢。一般對視圖的查詢最好都分解為對數據表的直接查詢效果要好一些。

5、可以在參數文件中設置SHARED_POOL_RESERVED_SIZE參數,這個參數在SGA共享池中保留一個連續的內存空間,連續的內存空間有益於存放大的SQL程序包。

6、ORACLE公司提供的DBMS_SHARED_POOL程序可以幫助程序員將某些經常使用的存儲過程「釘」在SQL區中而不被換出內存,程序員對於經常使用並且佔用內存很多的存儲過程「釘」到內存中有利於提高最終用戶的響應時間。

四、CPU參數的調整

CPU是伺服器的一項重要資源,伺服器良好的工作狀態是在工作高峰時CPU的使用率在90%以上。如果空閑時間CPU使用率就在90%以上,說明伺服器缺乏CPU資源,如果工作高峰時CPU使用率仍然很低,說明伺服器CPU資源還比較富餘。

使用操作相同命令可以看到CPU的使用情況,一般UNIX操作系統的伺服器,可以使用sar_u命令查看CPU的使用率,NT操作系統的伺服器,可以使用NT的性能管理器來查看CPU的使用率。

資料庫管理員可以通過查看v$sysstat數據字典中「CPUusedbythissession」統計項得知ORACLE資料庫使用的CPU時間,查看「OSUserlevelCPUtime」統計項得知操作系統用戶態下的CPU時間,查看「OSSystemcallCPUtime」統計項得知操作系統系統態下的CPU時間,操作系統總的CPU時間就是用戶態和系統態時間之和,如果ORACLE資料庫使用的CPU時間占操作系統總的CPU時間90%以上,說明伺服器CPU基本上被ORACLE資料庫使用著,這是合理,反之,說明伺服器CPU被其它程序佔用過多,ORACLE資料庫無法得到更多的CPU時間。

資料庫管理員還可以通過查看v$sesstat數據字典來獲得當前連接ORACLE資料庫各個會話佔用的CPU時間,從而得知什麼會話耗用伺服器CPU比較多。

出現CPU資源不足的情況是很多的:SQL語句的重解析、低效率的SQL語句、鎖沖突都會引起CPU資源不足。

1、資料庫管理員可以執行下述語句來查看SQL語句的解析情況:

SELECT*FROMV$SYSSTATWHERENAMEIN

('parsetimecpu','parsetimeelapsed','parsecount(hard)');

這里parsetimecpu是系統服務時間,parsetimeelapsed是響應時間,用戶等待時間,waitetime=parsetimeelapsed_parsetimecpu

由此可以得到用戶SQL語句平均解析等待時間=waitetime/parsecount。這個平均等待時間應該接近於0,如果平均解析等待時間過長,資料庫管理員可以通過下述語句

SELECTSQL_TEXT,PARSE_CALLS,EXECUTIONSFROMV$SQLAREA

ORDERBYPARSE_CALLS;

來發現是什麼SQL語句解析效率比較低。程序員可以優化這些語句,或者增加ORACLE參數SESSION_CACHED_CURSORS的值。

2、資料庫管理員還可以通過下述語句:

SELECTBUFFER_GETS,EXECUTIONS,SQL_TEXTFROMV$SQLAREA;

查看低效率的SQL語句,優化這些語句也有助於提高CPU的利用率。

3、資料庫管理員可以通過v$system_event數據字典中的「latchfree」統計項查看ORACLE資料庫的沖突情況,如果沒有沖突的話,latchfree查詢出來沒有結果。如果沖突太大的話,資料庫管理員可以降低spin_count參數值,來消除高的CPU使用率。

五、內存參數的調整

內存參數的調整主要是指ORACLE資料庫的系統全局區(SGA)的調整。SGA主要由三部分構成:共享池、數據緩沖區、日誌緩沖區。

1、共享池由兩部分構成:共享SQL區和數據字典緩沖區,共享SQL區是存放用戶SQL命令的區域,數據字典緩沖區存放資料庫運行的動態信息。資料庫管理員通過執行下述語句:

select(sum(pins-reloads))/sum(pins)"LibCache"fromv$librarycache;

來查看共享SQL區的使用率。這個使用率應該在90%以上,否則需要增加共享池的大小。資料庫管理員還可以執行下述語句:

select(sum(gets-getmisses-usage-fixed))/sum(gets)"RowCache"fromv$rowcache;

查看數據字典緩沖區的使用率,這個使用率也應該在90%以上,否則需要增加共享池的大小。

2、數據緩沖區。資料庫管理員可以通過下述語句:

SELECTname,valueFROMv$sysstatWHEREnameIN('dbblockgets','consistentgets','physicalreads');

來查看資料庫數據緩沖區的使用情況。查詢出來的結果可以計算出來數據緩沖區的使用命中率=1-(physicalreads/(dbblockgets+consistentgets))。

這個命中率應該在90%以上,否則需要增加數據緩沖區的大小。

3、日誌緩沖區。資料庫管理員可以通過執行下述語句:

selectname,valuefromv$sysstatwherenamein('redoentries','redologspacerequests');

查看日誌緩沖區的使用情況。查詢出的結果可以計算出日誌緩沖區的申請失敗率:

申請失敗率=requests/entries,申請失敗率應該接近於0,否則說明日誌緩沖區開設太小,需要增加ORACLE資料庫的日誌緩沖區。

昆明北大青鳥java培訓班轉載自網路如有侵權請聯系我們感謝您的關注謝謝支持

C. 優化資料庫大幅度提高Oracle的性能

幾個簡單的步驟大幅提高Oracle性能 我優化資料庫的三板斧

資料庫優化的討論可以說是一個永恆的主題 資深的Oracle優化人員通常會要求提出性能問題的人對資料庫做一個statspack 貼出資料庫配置等等 還有的人認為要抓出執行最慢的語句來進行優化 但實際情況是 提出疑問的人很可能根本不懂執行計劃 更不要說statspack了 而我認為 資料庫優化 應該首先從大的方面考慮 網路 伺服器硬體配置 操作系統配置 Oracle伺服器配置 數據結構組織 然後才是具體的調整 實際上網路 硬體等往往無法決定更換 應用程序一般也無法修改 因此應該著重從資料庫配置 數據結構上來下手 首先讓資料庫有一個良好的配置 然後再考慮具體優化某些過慢的語句 我在給我的用戶系統進行優化的過程中 總結了一些基本的 簡單易行的辦法來優化資料庫 算是我的三板斧 呵呵 不過請注意 這些不一定普遍使用 甚至有的會有副作用 但是對OLTP系統 基於成本的資料庫往往行之有效 不妨試試 (注 附件是Burleson寫的用來報告資料庫性能等信息的腳本 本文用到)

一.設置合適的SGA

常常有人抱怨伺服器硬體很好 但是Oracle就是很慢 很可能是內存分配不合理造成的 ( )假設內存有 M 這通常是小型應用 建議Oracle的SGA大約 M 其中 共享池(SHARED_POOL_SIZE)可以設置 M到 M 根據實際的用戶數 查詢等來定 數據塊緩沖區可以大致分配 M M i下需要設置DB_BLOCK_BUFFERS DB_BLOCK_BUFFER*DB_BLOCK_SIZE等於數據塊緩沖區大小 i 下的數據緩沖區可以用db_cache_size來直接分配

( )假設內存有 G Oracle 的SGA可以考慮分配 M 共享池分配 M到 M 數據緩沖區分配 M到 M

( )內存 G SGA可以考慮分配 G 共享池 M到 M 剩下的給數據塊緩沖區

( )內存 G以上 共享池 M到 M就足夠啦 再多也沒有太大幫助 (Biti_rainy有專述)數據緩沖區是盡可能的大 但是一定要注意兩個問題 一是要給操作系統和其他應用留夠內存 二是對於 位的操作系統 Oracle的SGA有 G的限制 有的 位操作系統上可以突破這個限制 方法還請看Biti的大作吧

二.分析表和索引 更改優化模式

Oracle默認優化模式是CHOOSE 在這種情況下 如果表沒有經過分析 經常導致查詢使用全表掃描 而不使用索引 這通常導致磁碟I/O太多 而導致查詢很慢 如果沒有使用執行計劃穩定性 則應該把表和索引都分析一下 這樣可能直接會使查詢速度大幅提升 分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令 對於少於 萬的表 可以考慮分析整個表 對於很大的表 可以按百分比來分析 但是百分比不能過低 否則生成的統計信息可能不準確 可以通過DBA_TABLES的LAST_ANALYZED列來查看錶是否經過分析或分析時間 索引可以通過DBA_INDEXES的LAST_ANALYZED列

下面通過例子來說明分析前後的速度對比 (表CASE_GA_AJZLZ大約有 萬數據 有主鍵)首先在SQLPLUS中打開自動查詢執行計劃功能 (第一次要執行RDBMSADMINutlxplan sql來創建PLAN_TABLE這個表)

SQL> SET AUTOTRACE ON SQL>SET TIMING ON

通過SET AUTOTRACE ON 來查看語句的執行計劃 通過SET TIMING ON 來查看語句運行時間

SQL> select count(*) from CASE_GA_AJZLZ; COUNT(*) 已用時間: : : Execution Plan SELECT STATEMENT Optimizer=CHOOSE SORT (AGGREGATE) TABLE ACCESS (FULL) OF CASE_GA_AJZLZ ……………………

請注意上面分析中的TABLE ACCESS(FULL) 這說明該語句執行了全表掃描 而且查詢使用了 秒 這時表還沒有經過分析 下面我們來對該表進行分析

SQL> *** yze table CASE_GA_AJZLZ pute statistics;

表已分析 已用時間: : : 然後再來查詢

SQL> select count(*) from CASE_GA_AJZLZ; COUNT(*) 已用時間: : : Execution Plan SELECT STATEMENT Optimizer=FIRST_ROWS (Cost= Card= ) SORT (AGGREGATE) INDEX (FAST FULL SCAN) OF PK_AJZLZ (UNIQUE) (Cost= Card= ) …………………………

請注意 這次時間僅僅用了 秒!這要歸功於INDEX(FAST FULL SCAN) 通過分析表 查詢使用了PK_AJZLZ索引 磁碟I/O大幅減少 速度也大幅提升!下面的實用語句可以

用來生成分析某個用戶的所有表和索引 假設用戶是GAXZUSR

SQL> set pagesize SQL> spool d: *** yze_tables sql; SQL> select *** yze table ||owner|| ||table_name|| pute statistics; from dba_tables where owner= GAXZUSR ; SQL> spool off SQL> spool spool d: *** yze_indexes sql; SQL> select *** yze index ||owner|| ||index_name|| pute statistics; from dba_indexes where owner= GAXZUSR ; SQL> spool off SQL> @d: *** yze_tables sql SQL> @d: *** yze_indexes sql

解釋 上面的語句生成了兩個sql文件 分別分析全部的GAXZUSR的表和索引 如果需要按照百分比來分析表 可以修改一下腳本 通過上面的步驟 我們就完成了對表和索引的分析 可以測試一下速度的改進啦 建議定期運行上面的語句 尤其是數據經過大量更新

當然 也可以通過dbms_stats來分析表和索引 更方便一些 但是我仍然習慣上面的方法 因為成功與否會直接提示出來

另外 我們可以將優化模式進行修改 optimizer_mode值可以是RULE CHOOSE FIRST_ROWS和ALL_ROWS 對於OLTP系統 可以改成FIRST_ROWS 來要求查詢盡快返回結果 這樣即使不用分析 在一般情況下也可以提高查詢性能 但是表和索引經過分析後有助於找到最合適的執行計劃

三.設置cursor_sharing=FORCE 或SIMILAR

這種方法是 i才開始有的 oracle 不支持 通過設置該參數 可以強制共享只有文字不同的語句解釋計劃 例如下面兩條語句可以共享

SQL> SELECT * FROM MYTABLE WHERE NAME= tom SQL> SELECT * FROM MYTABLE WHERE NAME= turner

這個方法可以大幅降低緩沖區利用率低的問題 避免語句重新解釋 通過這個功能 可以很大程度上解決硬解析帶來的性能下降的問題 個人感覺可根據系統的實際情況 決定是否將該參數改成FORCE 該參數默認是exact 不過一定要注意 修改之前 必須先給ORACLE打補丁 否則改之後oracle會佔用 %的CPU 無法使用 對於ORACLE i 可以設置成SIMILAR 這個設置綜合了FORCE和EXACT的優點 不過請慎用這個功能 這個參數也可能帶來很大的負面影響!

四.將常用的小表 索引釘在數據緩存KEEP池中

內存上數據讀取速度遠遠比硬碟中讀取要快 據稱 內存中數據讀的速度是硬碟的 倍!如果資源比較豐富 把常用的小的 而且經常進行全表掃描的表給釘內存中 當然是在好不過了 可以簡單的通過ALTER TABLE tablename CACHE來實現 在ORACLE i之後可以使用ALTER TABLE table STORAGE(BUFFER_POOL KEEP) 一般來說 可以考慮把 數據塊之內的表放在keep池中 當然要根據內存大小等因素來定 關於如何查出那些表或索引符合條件 可以使用本文提供的access sql和access_report sql 這兩個腳本是著名的Oracle專家 Burleson寫的 你也可以在讀懂了情況下根據實際情況調整一下腳本 對於索引 可以通過ALTER INDEX indexname STORAGE(BUFFER_POOL KEEP)來釘在KEEP池中

將表定在KEEP池中需要做一些准備工作 對於ORACLE i 需要設置DB_KEEP_CACHE_SIZE 對於 i 需要設置buffer_pool_keep 在 i中 還要修改db_block_lru_latches 該參數默認是 無法使用buffer_pool_keep 該參數應該比 * *CPU數量少 但是要大於 才能設置DB_KEEP_CACHE_BUFFER buffer_pool_keep從db_block_buffers中分配 因此也要小於db_block_buffers 設置好這些參數後 就可以把常用對象永久釘在內存里

五.設置optimizer_max_permutations

對於多表連接查詢 如果採用基於成本優化(CBO) ORACLE會計算出很多種運行方案

從中選擇出最優方案 這個參數就是設置oracle究竟從多少種方案來選擇最優 如果設置太大 那麼計算最優方案過程也是時間比較長的 Oracle 和 i默認是 建議改成 對於 i 已經默認是 了

六.調整排序參數

( ) SORT_AREA_SIZE:默認的用來排序的SORT_AREA_SIZE大小是 K 通常顯得有點小 一般可以考慮設置成 M( ) 這個參數不能設置過大 因為每個連接都要分配同樣的排序內存

lishixin/Article/program/Oracle/201311/18879

D. 如何評估和測試Mysql及oracle資料庫性能

1:伺服器環境

操作系統:Red Hat Enterprise Linux Server release 5.5 (Tikanga)

CPU:Intel(R) Xeon(R) CPU E5607 @ 2.27GHz 8核

內存:16G

Mysql:Ver 14.14 Distrib 5.5.21, for Linux (x86_64)

Oracle:OracleDatabase 11g Enterprise Edition Release

詳細數據測試(操作通過存儲過程完成)

數據插入

50並發Mysql插入性能圖示(橫坐標:當前數據總量,縱坐標:每秒執行次數){平均值:4841.98}

E. 請教如何進行Oracle RAC性能測試,推薦幾款測試工具來

oracle sql性能測試工具
Oracle ORION:存儲系統性能測試工具 - Oracle資料庫欄目 ...
Oracle ORION:存儲系統性能測試工具一 定義 ORION(Oracle I/O Calibration Tool)是Oracle提供的、用於測試存儲系統性能瓶頸 由於 ORION ...
ORACLE 免費壓力測試工具--hammerora的使用過程 - 寧靜 ...
2009-7-28 · 從創作者對這個工具的標題描述可以看出,Hammerora是一款Oracle資料庫負載測試工具。該工具可以在Oracle 8i、9i ... TCL語言已經用來提供高性能的和Oracle …
ORACLE壓力測試工具orion_oracle | 幫客之家
ORACLE壓力測試工具orion 1,功能簡介 ORION (Oracle I/O Calibration Tool) 是校準用於 Oracle 資料庫的存儲系統 I/O 性能的獨立工具 。校準結果對於了解 首頁 編程 前端 ...
Microsoft SQL Server 和 Oracle 資料庫的比較
性能測試 先前版本 解決方案 成功案例 針對各種需求 應用程序開發 商業智能 規范 ... SQL Server Oracle 11g 性能 與擴展性 安全性 (低危險) 開發效率 商業智能* 總擁有 ...
Oracle PL/SQL 性能分析工具 profiler 說明 - 推酷
一.說明 Oracle提供了profiler工具包,利用該工具包可以查看PL/SQL執行過程中各模塊的性能。可以從MOS上下載該腳本: Implementing andUsing the PL/SQL ...
oracle性能測試工具 - 下載頻道 - CSDN.NET
oracle性能測試工具 cerato3132009-10-09 上傳 主要用於測試oracle資料庫的讀寫性能,尤其是在有磁碟陣列的情況下 ... SQL 入門經典 2015年全國最新省市區鎮(街道)四級 ...
Oracle性能相關常用腳本(SQL) - 免費軟體測試工具-澤眾 ...
在缺乏的可視化工具來監控資料庫性能的情形下,常用的腳本就派上用場了,下面提供幾個關於Oracle性能相關的腳本供大家參考。
Orion - oracle提供的測試io性能的工具-dbs101-ITPUB博客
Orion是oracle提供的測試io性能的工具。它可以用來模擬Oracle資料庫IO,也可以用來模擬ASM的條帶化的功能。 Orion可以支持下列IO負載 1. 小的隨機的IO:OLTP ...
Oracle性能測試 - 愛程序網
Oracle性能測試 2012-01-18 17:03 本站整理 瀏覽(327) 輕量型測試工具JMeter1、在jmeter網站下載軟體,目前最新版為jmeter ... .live.com/embed?cid重量型測試工具 測試 ...
資料庫優化實踐【性能檢測工具篇】 - SQL Server(mssql ...
第八步:使用SQL事件探查器和性能監控工具 有效地診斷性能問題 在SQL Server應用領域SQL事件探查器可能是最著名的性能故障排除工具,大多數情況下,當得到 ...

F. 如何查詢oracle 資料庫性能,sql資源佔用

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

1、查詢每台機器的連接數

selectt.MACHINE,count(*)fromv$sessiontgroupbyt.MACHINE

這里所說的每台機器是指每個連接oracle資料庫的伺服器,每個伺服器都有配置連接資料庫的連接數,以websphere為例,在數據源中,每個數據源都有配置其最大/最小連接數。

執行SQL後,可以看到每個伺服器連接oracle資料庫的連接數,若某個伺服器的連接數非常大,或者已經達到其最大連接數,那麼這台伺服器上的應用可能有問題導致其連接不能正常釋放。

2、查詢每個連接數的sql_text

v$session表裡存在的連接不是一直都在執行操作,如果sql_hash_value為空或者0,則該連接是空閑的,可以查詢哪些連接非空閑,web3是機器名,就是WebSphereApplicationServer的主機名。

selectt.sql_hash_value,t.*fromv$sessiontwheret.MACHINE='web3'andt.sql_hash_value!=0

這個SQL查詢出來的結果不能看到具體的SQL語句,需要看具體SQL語句的執行下面的方法。

3、查詢每個活動的連接執行什麼sql

selectsid,username,sql_hash_value,b.sql_text

fromv$sessiona,v$sqltextb

wherea.sql_hash_value=b.HASH_VALUEanda.MACHINE='web3'

orderbysid,username,sql_hash_value,b.piece

orderby這句話的作用在於,sql_text每條記錄不是保存一個完整的sql,需要以sql_hash_value為關鍵id,以piece排序,如圖

Username是執行SQL的資料庫用戶名,一個sql_hash_value下的SQL_TEXT組合成一個完整的SQL語句。這樣就可以看到一個連接執行了哪些SQL。

4、.從V$SQLAREA中查詢最佔用資源的查詢

selectb.usernameusername,a.disk_readsreads,a.executionsexec,

a.disk_reads/decode(a.executions,0,1,a.executions)rds_exec_ratio,

a.sql_textStatement

fromv$sqlareaa,dba_usersb

wherea.parsing_user_id=b.user_id

anda.disk_reads>100000

orderbya.disk_readsdesc;

用buffer_gets列來替換disk_reads列可以得到佔用最多內存的sql語句的相關信息。

V$SQL是內存共享SQL區域中已經解析的SQL語句。

該表在SQL性能查看操作中用的比較頻繁的一張表,關於這個表的詳細信息大家可以去http://apps.hi..com/share/detail/299920#上學習,介紹得比較詳細。我這里主要就將該表的常用幾個操作簡單介紹一下:

1、列出使用頻率最高的5個查詢:

selectsql_text,executions

from(selectsql_text,executions,

rank()over

(orderbyexecutionsdesc)exec_rank

fromv$sql)

whereexec_rank<=5;

該查詢結果列出的是執行最頻繁的5個SQL語句。對於這種實用非常頻繁的SQL語句,我們需要對其進行持續的優化以達到最佳執行性能。

2、找出需要大量緩沖讀取(邏輯讀)操作的查詢:

selectbuffer_gets,sql_text

from(selectsql_text,buffer_gets,

dense_rank()over

(orderbybuffer_getsdesc)buffer_gets_rank

fromv$sql)

wherebuffer_gets_rank<=5;

這種需要大量緩沖讀取(邏輯讀)操作的SQL基本是大數據量且邏輯復雜的查詢中會遇到,對於這樣的大數據量查詢SQL語句更加需要持續的關注,並進行優化。

3、持續跟蹤有性能影響的SQL。

SELECT*FROM(

SELECTPARSING_USER_ID,EXECUTIONS,SORTS,

COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlarea

ORDERBYdisk_readsDESC

)

WHEREROWNUM<10

這個語句在SQL性能查看中用的比較多,可以明顯的看出哪些SQL會影響到資料庫性能。

本文主要介紹了使用SQL查詢方式查看oracle資料庫SQL性能的部分常用方法。此外還有許多工具也能實現SQL性能監控,大家可以在網上搜索相關知識進行學習。


轉載僅供參考,版權屬於原作者

G. 如何檢查oracle資料庫性能

這種問題要回答好要求知識比較全面。
1 從操作系統層次上看
看CPU 內存 swqp(交換分區)等使用率
2 從磁碟上看
主要看磁碟讀寫。可以用dd測磁碟讀寫的速度 也可以在業務高峰期檢測磁碟的速率。
3 從資料庫本身來看。
先要看資料庫各個參數的值 。 如sga的大小,process的大小,redo日誌的個數與大小等這些關繫到性能的參數是否設置合理。
長期觀察的方式就是看各個時期的AWR報告。裡面有各種性能指標,以及按執行時間或資源排列的sql ,以及各種等待時間的排名。從這裡面可以掌握資料庫的長期的性能變化。
即時觀察的方式就是利用各種sql 查詢 資料庫在當前時間的各個性能指標(AWR報告裡面的各種指標也都是通過sql查詢出來的)
還有對資料庫整體的一個檢查:
如 表的大小,表是否需要分區而沒有分區,索引是否創建,索引是否失效,開發人員寫的sql是否正確使用到了索引,頻繁使用的sql是否有綁定變數,有頻繁大批量增刪改的表是否存在高水位。。。
額 總之,這個話題涉及的知識非常多,盡可能多的學習一些東西,祝你好運。