oracle查詢?nèi)绾蝺?yōu)化 oracle查詢語句優(yōu)化

如何提高oracle視圖的查詢速度?

1、可以縮小到5張表,因?yàn)楹芏喽际菑囊粡埍砝锶〕鰜淼臄?shù)據(jù);

成都創(chuàng)新互聯(lián)公司專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、清徐網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為清徐等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

2、不能子查詢因?yàn)槭且@示數(shù)據(jù)子查詢只是查詢條件;

3不能建立索引,因?yàn)檫@樣會(huì)影響表的增刪改,它里面都是導(dǎo)入進(jìn)去的一次增加上千條都有可能;

4、定期結(jié)轉(zhuǎn)是什么意思,表示沒看懂。時(shí)間發(fā)的太長(zhǎng)的話就算了;

5、定期結(jié)轉(zhuǎn)的意思就是,將你要建立視圖的幾種表數(shù)據(jù)“轉(zhuǎn)移”到一張新表里面去,不用視圖查詢。數(shù)據(jù)庫全文檢索是RDBMS自帶的擴(kuò)展功能,可以實(shí)現(xiàn)高速查詢。全文檢索建議搜索下關(guān)鍵字,什么lucene之類的就出來了。

Oracle分區(qū)是怎樣優(yōu)化數(shù)據(jù)庫的?

Oracle的分區(qū)可以分為:列表分區(qū)、范圍分區(qū)、散列分區(qū)、復(fù)合分區(qū)。

1、增強(qiáng)可用性:如果表的一個(gè)分區(qū)由于系統(tǒng)故障而不能使用,表的其余好的分區(qū)仍可以使用;

2、減少關(guān)閉時(shí)間:如果系統(tǒng)故障只影響表的一部分分區(qū),那么只有這部分分區(qū)需要修復(fù),可能比整個(gè)大表修復(fù)花的時(shí)間更少;

3、維護(hù)輕松:如果需要建表,獨(dú)自管理每個(gè)公區(qū)比管理單個(gè)大表要輕松得多;

4、均衡I/O:可以把表的不同分區(qū)分配到不同的磁盤來平衡I/O改善性能;

5、改善性能:對(duì)大表的查詢、增加、修改等操作可以分解到表的不同分區(qū)來并行執(zhí)行,可使運(yùn)行速度更快;

6、分區(qū)對(duì)用戶透明:最終用戶感覺不到分區(qū)的存在。

優(yōu)化數(shù)據(jù)庫大幅度提高Oracle的性能

幾個(gè)簡(jiǎn)單的步驟大幅提高Oracle性能 我優(yōu)化數(shù)據(jù)庫的三板斧

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

一.設(shè)置合適的SGA

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

( )假設(shè)內(nèi)存有 G Oracle 的SGA可以考慮分配 M 共享池分配 M到 M 數(shù)據(jù)緩沖區(qū)分配 M到 M

( )內(nèi)存 G SGA可以考慮分配 G 共享池 M到 M 剩下的給數(shù)據(jù)塊緩沖區(qū)

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

二.分析表和索引 更改優(yōu)化模式

Oracle默認(rèn)優(yōu)化模式是CHOOSE 在這種情況下 如果表沒有經(jīng)過分析 經(jīng)常導(dǎo)致查詢使用全表掃描 而不使用索引 這通常導(dǎo)致磁盤I/O太多 而導(dǎo)致查詢很慢 如果沒有使用執(zhí)行計(jì)劃穩(wěn)定性 則應(yīng)該把表和索引都分析一下 這樣可能直接會(huì)使查詢速度大幅提升 分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令 對(duì)于少于 萬的表 可以考慮分析整個(gè)表 對(duì)于很大的表 可以按百分比來分析 但是百分比不能過低 否則生成的統(tǒng)計(jì)信息可能不準(zhǔn)確 可以通過DBA_TABLES的LAST_ANALYZED列來查看表是否經(jīng)過分析或分析時(shí)間 索引可以通過DBA_INDEXES的LAST_ANALYZED列

下面通過例子來說明分析前后的速度對(duì)比 (表CASE_GA_AJZLZ大約有 萬數(shù)據(jù) 有主鍵)首先在SQLPLUS中打開自動(dòng)查詢執(zhí)行計(jì)劃功能 (第一次要執(zhí)行\(zhòng)RDBMS\ADMIN\utlxplan sql來創(chuàng)建PLAN_TABLE這個(gè)表)

SQL SET AUTOTRACE ON SQLSET TIMING ON

通過SET AUTOTRACE ON 來查看語句的執(zhí)行計(jì)劃 通過SET TIMING ON 來查看語句運(yùn)行時(shí)間

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

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

SQL *** yze table CASE_GA_AJZLZ pute statistics;

表已分析 已用時(shí)間: : : 然后再來查詢

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

請(qǐng)注意 這次時(shí)間僅僅用了 秒!這要?dú)w功于INDEX(FAST FULL SCAN) 通過分析表 查詢使用了PK_AJZLZ索引 磁盤I/O大幅減少 速度也大幅提升!下面的實(shí)用語句可以

用來生成分析某個(gè)用戶的所有表和索引 假設(shè)用戶是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

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

當(dāng)然 也可以通過dbms_stats來分析表和索引 更方便一些 但是我仍然習(xí)慣上面的方法 因?yàn)槌晒εc否會(huì)直接提示出來

另外 我們可以將優(yōu)化模式進(jìn)行修改 optimizer_mode值可以是RULE CHOOSE FIRST_ROWS和ALL_ROWS 對(duì)于OLTP系統(tǒng) 可以改成FIRST_ROWS 來要求查詢盡快返回結(jié)果 這樣即使不用分析 在一般情況下也可以提高查詢性能 但是表和索引經(jīng)過分析后有助于找到最合適的執(zhí)行計(jì)劃

三.設(shè)置cursor_sharing=FORCE 或SIMILAR

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

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

這個(gè)方法可以大幅降低緩沖區(qū)利用率低的問題 避免語句重新解釋 通過這個(gè)功能 可以很大程度上解決硬解析帶來的性能下降的問題 個(gè)人感覺可根據(jù)系統(tǒng)的實(shí)際情況 決定是否將該參數(shù)改成FORCE 該參數(shù)默認(rèn)是exact 不過一定要注意 修改之前 必須先給ORACLE打補(bǔ)丁 否則改之后oracle會(huì)占用 %的CPU 無法使用 對(duì)于ORACLE i 可以設(shè)置成SIMILAR 這個(gè)設(shè)置綜合了FORCE和EXACT的優(yōu)點(diǎn) 不過請(qǐng)慎用這個(gè)功能 這個(gè)參數(shù)也可能帶來很大的負(fù)面影響!

四.將常用的小表 索引釘在數(shù)據(jù)緩存KEEP池中

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

將表定在KEEP池中需要做一些準(zhǔn)備工作 對(duì)于ORACLE i 需要設(shè)置DB_KEEP_CACHE_SIZE 對(duì)于 i 需要設(shè)置buffer_pool_keep 在 i中 還要修改db_block_lru_latches 該參數(shù)默認(rèn)是 無法使用buffer_pool_keep 該參數(shù)應(yīng)該比 * *CPU數(shù)量少 但是要大于 才能設(shè)置DB_KEEP_CACHE_BUFFER buffer_pool_keep從db_block_buffers中分配 因此也要小于db_block_buffers 設(shè)置好這些參數(shù)后 就可以把常用對(duì)象永久釘在內(nèi)存里

五.設(shè)置optimizer_max_permutations

對(duì)于多表連接查詢 如果采用基于成本優(yōu)化(CBO) ORACLE會(huì)計(jì)算出很多種運(yùn)行方案

從中選擇出最優(yōu)方案 這個(gè)參數(shù)就是設(shè)置oracle究竟從多少種方案來選擇最優(yōu) 如果設(shè)置太大 那么計(jì)算最優(yōu)方案過程也是時(shí)間比較長(zhǎng)的 Oracle 和 i默認(rèn)是 建議改成 對(duì)于 i 已經(jīng)默認(rèn)是 了

六.調(diào)整排序參數(shù)

( ) SORT_AREA_SIZE:默認(rèn)的用來排序的SORT_AREA_SIZE大小是 K 通常顯得有點(diǎn)小 一般可以考慮設(shè)置成 M( ) 這個(gè)參數(shù)不能設(shè)置過大 因?yàn)槊總€(gè)連接都要分配同樣的排序內(nèi)存

lishixinzhi/Article/program/Oracle/201311/18879

如何提高oracle模糊查詢的性能?

1、使用兩邊加‘%’號(hào)的查詢,Oracle是不通過索引的,所以查詢效率很低。

例如:select count(*) from lui_user_base t where t.user_name like '%cs%';

2、like '...%'和 like'%...'雖然走了索引,但是效率依然很低。

3、有人說使用如下sql,他的效率提高了10倍,但是數(shù)據(jù)量小的時(shí)候

select count(*) from lui_user_base where rowid in (select rowid from lui_user_base t where t.user_name like '%cs%')

我拿100w跳數(shù)據(jù)做了測(cè)試,效果一般,依然很慢,原因:

select rowid from lui_user_base t where t.user_name like '%cs%' ? 這條sql執(zhí)行很快,那是相當(dāng)?shù)目?,但是放到select count(*) from lui_user_base where rowid in()里后,效率就會(huì)變的很慢了。

4、select count(*) from lui_user_base t where instr(t.user_name,'cs') 0

這種查詢效果很好,速度很快,推薦使用這種。因?yàn)槲覍?duì)oracle內(nèi)部機(jī)制不是很懂,只是對(duì)結(jié)果做了一個(gè)說明。

5、有人說了用全文索引,我看了,步驟挺麻煩,但是是個(gè)不錯(cuò)的方法,留著備用:

對(duì)cmng_custominfo 表中的address字段做全文檢索:

1,在oracle9201中需要?jiǎng)?chuàng)建一個(gè)分詞的東西:

BEGIN

ctx_ddl.create_preference ('SMS_ADDRESS_LEXER', 'CHINESE_LEXER');

--ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer'); 不用

end;

2,創(chuàng)建全文檢索:

CREATE INDEX INX_CUSTOMINFO_ADDR_DOCS ON cmng_custominfo(address) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER SMS_ADDRESS_LEXER');

3,查詢時(shí)候,使用:

select * from cmng_custominfo where contains (address, '金色新城')1;

4,需要定期進(jìn)行同步和優(yōu)化:

同步:根據(jù)新增記錄的文本內(nèi)容更新全文搜索的索引。

begin

ctx_ddl.sync_index('INX_CUSTOMINFO_ADDR_DOCS');

end;

優(yōu)化:根據(jù)被刪除記錄清除全文搜索索引中的垃圾

begin

ctx_ddl.optimize_index('INX_CUSTOMINFO_ADDR_DOCS', 'FAST');

end;

5,采用job做步驟4中的工作:

1)該功能需要利用oracle的JOB功能來完成

因?yàn)閛racle9I默認(rèn)不啟用JOB功能,所以首先需要增加ORACLE數(shù)據(jù)庫實(shí)例的JOB配置參數(shù):

job_queue_processes=5

重新啟動(dòng)oracle數(shù)據(jù)庫服務(wù)和listener服務(wù)。

2)同步 和 優(yōu)化

--同步 sync:

variable jobno number;

BEGIN

DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''INX_CUSTOMINFO_ADDR_DOCS'');',

SYSDATE, 'SYSDATE + (1/24/4)');

commit;

END;

--優(yōu)化

variable jobno number;

begin

DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''INX_CUSTOMINFO_ADDR_DOCS'',''FULL'');', SYSDATE, 'SYSDATE + 1');

commit;

END;

其中, 第一個(gè)job的SYSDATE + (1/24/4)是指每隔15分鐘同步一次,第二個(gè)job的SYSDATE + 1是每隔1天做一次全優(yōu)化。具體的時(shí)間間隔,可以根據(jù)應(yīng)用的需要而定。

6,索引重建

重建索引會(huì)刪除原來的索引,重新生成索引,需要較長(zhǎng)的時(shí)間。

重建索引語法如下:

ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;

據(jù)網(wǎng)上一些用家的體會(huì),oracle重建索引的速度也是比較快的,有一用家這樣描述:

Oracle 的全文檢索建立和維護(hù)索引要比ms sql server都要快得多,筆者的65萬記錄的一個(gè)表建立索引只需要20分鐘,同步一次只需要1分鐘。

因此,也可以考慮用job的辦法定期重建索引。

九大Oracle性能優(yōu)化基本方法詳解

Oracle性能優(yōu)化基本方法包括一下幾個(gè)步驟 包括

)設(shè)立合理的Oracle性能優(yōu)化目標(biāo)

)測(cè)量并記錄當(dāng)前的Oracle性能

)確定當(dāng)前Oracle性能瓶頸(Oracle等待什么 哪些SQL語句是該等待事件的成分)

)把等待事件記入跟蹤文件

)確定當(dāng)前的OS瓶頸

)優(yōu)化所需的成分(應(yīng)用程序 數(shù)據(jù)庫 I/O 爭(zhēng)用 OS等)

)跟蹤并實(shí)施更改控制過程

)測(cè)量并記錄當(dāng)前性能

)重復(fù)步驟 到 直到滿足優(yōu)化目標(biāo)

下面來一一詳述

設(shè)立合理的Oracle性能優(yōu)化目標(biāo)

重點(diǎn) 關(guān)于設(shè)立目標(biāo)的最重要的一點(diǎn)是它們必須是可量化和可達(dá)到的

方法 目標(biāo)必須是當(dāng)前性能和所需性能的的陳述形式的語句

測(cè)量并記錄當(dāng)前Oracle性能重點(diǎn)

)需要在峰值活動(dòng)時(shí)間獲得當(dāng)前系統(tǒng)性能快照

)關(guān)鍵是要在出現(xiàn)性能問題的時(shí)間段內(nèi)采集信息

)必須在合理的時(shí)間段上采集 一般在峰值期間照幾個(gè)為期 分鐘的快照

確定當(dāng)前Oracle性能瓶頸重點(diǎn) 從Oracle 等待接口v$system_event v$session_event和v$session_wait中獲得等待事件 進(jìn)而找出影響性能的對(duì)象和sql語句 方法如下

)首先 利用v$system_event視圖執(zhí)行下面的查詢查看數(shù)據(jù)庫中某些常見的等待事件

select * from v$system_event

where event in ( buffer busy waits

db file sequential read

db file scattered read

enqueue

free buffer waits

latch free

log file parallel write

log file sync );

)接著 利用下面對(duì)v$session_event和v$session視圖進(jìn)行的查詢 研究具有對(duì)上面顯示的內(nèi)容有貢獻(xiàn)的等待事件的會(huì)話

select se sid s username se event se total_waits se time_waited se average_wait

from v$session s v$session_event se

where s sid = se sid

and se event not like SQL*Net%

and s status = ACTIVE

and s username is not null;

)使用下面查詢找到與所連接的會(huì)話有關(guān)的當(dāng)前等待事件 這些信息是動(dòng)態(tài)的 為了查看一個(gè)會(huì)話的等待最多的事件是什么 需要多次執(zhí)行此查詢

select sw sid s username sw event sw wait_time sw state sw seconds_in_wait SEC_IN_WAIT

from v$session s v$session_wait sw

where s sid = sw sid

and sw event not like SQL*Net%

and s username is not null

order by sw wait_time desc;

)查詢會(huì)話等待事件的詳細(xì)信息

select sid event p text p p text p p text p

from v$session_wait

where sid beeen and

and event not like %SQL%

and event not like %rdbms% ;

)利用P P 的信息 找出等待事件的相關(guān)的段

select owner segment_name segment_type tablespace_name

from dba_extents

where file_id = fileid_in

and blockid_in beeen block_id and block_id + blocks ;

)獲得操作該段的sql語句

select sid getsqltxt(sql_hash_value sql_address)

from v$session

where sid = sid_in;

)getsqltxt函數(shù)

)至此已經(jīng)找到影響性能的對(duì)象和sql語句 可以有針對(duì)性地優(yōu)化

把等待事件記入跟蹤文件

重點(diǎn) 如果在跟蹤系統(tǒng)上的等待事件時(shí) 由于某種原因遇到了麻煩 則可以將這些等待事件記入一個(gè)跟蹤文件 方法如下

)對(duì)于當(dāng)前會(huì)話

alter session set timed_statistics=true;

alter session set max_dump_file_size=unlimited;

alter session set events trace name context forever level ;

)執(zhí)行應(yīng)用程序 然后在USER_DUMP_DEST指出的目錄中找到跟蹤文件

)查看文件中以詞WAIT開始的所有行

)對(duì)于其它的會(huì)話

)確定會(huì)話的進(jìn)程ID(SPID) 下面的查詢識(shí)別出名稱以A開始的所有用戶的會(huì)話進(jìn)程ID

select S Username P Spid from V$SESSION S V$PROCESS P

where S PADDR = P ADDR and S Username like A% ;

)以sysdba進(jìn)入sqlplus執(zhí)行

alter session set timed_statistics=true;

alter session set max_dump_file_size=unlimited;

oradebug setospid

oradebug unlimit

oradebug event trace name context forever level X /* Where X = ( ) */

)跟蹤某個(gè)時(shí)間間隔得會(huì)話應(yīng)用程序

)在USER_DUMP_DEST 的值指出的目錄中利用SPID查看跟蹤文件

)查看文件中以詞WAIT開始的所有行

確定當(dāng)前OS瓶頸 )Windows NT上的監(jiān)控

使用控制面板 〉管理工具 〉性能即可

)UNIX上的監(jiān)控

使用通用性的工具 包括sar iostat cpustat mpstat netstat top osview等

.Oracle性能優(yōu)化所需的成分(應(yīng)用程序 數(shù)據(jù)庫 I/O 爭(zhēng)用 OS等)

.跟蹤并實(shí)施更改控制過程

.測(cè)量并記錄當(dāng)前Oracle性能

lishixinzhi/Article/program/Oracle/201311/18709

oracle數(shù)據(jù)庫優(yōu)化有哪些方法?

你最好買一本專門講ORACLE性能優(yōu)化的書,好好看看\x0d\x0a1、調(diào)整數(shù)據(jù)庫服務(wù)器的性能\x0d\x0aOracle數(shù)據(jù)庫服務(wù)器是整個(gè)系統(tǒng)的核心,它的性能高低直接影響整個(gè)系統(tǒng)的性能,為了調(diào)整Oracle數(shù)據(jù)庫服務(wù)器的性能,主要從以下幾個(gè)方面考慮: \x0d\x0a1.1、調(diào)整操作系統(tǒng)以適合Oracle數(shù)據(jù)庫服務(wù)器運(yùn)行\(zhòng)x0d\x0aOracle數(shù)據(jù)庫服務(wù)器很大程度上依賴于運(yùn)行服務(wù)器的操作系統(tǒng),如果操作系統(tǒng)不能提供最好性能,那么無論如何調(diào)整,Oracle數(shù)據(jù)庫服務(wù)器也無法發(fā)揮其應(yīng)有的性能。 \x0d\x0a1.1.1、為Oracle數(shù)據(jù)庫服務(wù)器規(guī)劃系統(tǒng)資源 \x0d\x0a據(jù)已有計(jì)算機(jī)可用資源, 規(guī)劃分配給Oracle服務(wù)器資源原則是:盡可能使Oracle服務(wù)器使用資源最大化,特別在Client/Server中盡量讓服務(wù)器上所有資源都來運(yùn)行Oracle服務(wù)。 \x0d\x0a1.1.2、調(diào)整計(jì)算機(jī)系統(tǒng)中的內(nèi)存配置 \x0d\x0a多數(shù)操作系統(tǒng)都用虛存來模擬計(jì)算機(jī)上更大的內(nèi)存,它實(shí)際上是硬盤上的一定的磁盤空間。當(dāng)實(shí)際的內(nèi)存空間不能滿足應(yīng)用軟件的要求時(shí),操作系統(tǒng)就將用這部分的磁盤空間對(duì)內(nèi)存中的信息進(jìn)行頁面替換,這將引起大量的磁盤I/O操作,使整個(gè)服務(wù)器的性能下降。為了避免過多地使用虛存,應(yīng)加大計(jì)算機(jī)的內(nèi)存。 \x0d\x0a1.1.3、為Oracle數(shù)據(jù)庫服務(wù)器設(shè)置操作系統(tǒng)進(jìn)程優(yōu)先級(jí) \x0d\x0a不要在操作系統(tǒng)中調(diào)整Oracle進(jìn)程的優(yōu)先級(jí),因?yàn)樵贠racle數(shù)據(jù)庫系統(tǒng)中,所有的后臺(tái)和前臺(tái)數(shù)據(jù)庫服務(wù)器進(jìn)程執(zhí)行的是同等重要的工作,需要同等的優(yōu)先級(jí)。所以在安裝時(shí),讓所有的數(shù)據(jù)庫服務(wù)器進(jìn)程都使用缺省的優(yōu)先級(jí)運(yùn)行。 \x0d\x0a1.2、調(diào)整內(nèi)存分配\x0d\x0aOracle數(shù)據(jù)庫服務(wù)器保留3個(gè)基本的內(nèi)存高速緩存,分別對(duì)應(yīng)3種不同類型的數(shù)據(jù):庫高速緩存,字典高速緩存和緩沖區(qū)高速緩存。庫高速緩存和字典高速緩存一起構(gòu)成共享池,共享池再加上緩沖區(qū)高速緩存便構(gòu)成了系統(tǒng)全程區(qū)(SGA)。SGA是對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行快速訪問的一個(gè)系統(tǒng)全程區(qū),若SGA本身需要頻繁地進(jìn)行釋放、分配,則不能達(dá)到快速訪問數(shù)據(jù)的目的,因此應(yīng)把SGA放在主存中,不要放在虛擬內(nèi)存中。內(nèi)存的調(diào)整主要是指調(diào)整組成SGA的內(nèi)存結(jié)構(gòu)的大小來提高系統(tǒng)性能,由于Oracle數(shù)據(jù)庫服務(wù)器的內(nèi)存結(jié)構(gòu)需求與應(yīng)用密切相關(guān),所以內(nèi)存結(jié)構(gòu)的調(diào)整應(yīng)在磁盤I/O調(diào)整之前進(jìn)行。 \x0d\x0a1.2.1、庫緩沖區(qū)的調(diào)整 \x0d\x0a庫緩沖區(qū)中包含私用和共享SQL和PL/SQL區(qū),通過比較庫緩沖區(qū)的命中率決定它的大小。要調(diào)整庫緩沖區(qū),必須首先了解該庫緩沖區(qū)的活動(dòng)情況,庫緩沖區(qū)的活動(dòng)統(tǒng)計(jì)信息保留在動(dòng)態(tài)性能表v$librarycache數(shù)據(jù)字典中,可通過查詢?cè)摫韥砹私馄浠顒?dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect sum(pins),sum(reloads) from v$librarycache; \x0d\x0a \x0d\x0aPins列給出SQL語句,PL/SQL塊及被訪問對(duì)象定義的總次數(shù);Reloads列給出SQL 和PL/SQL塊的隱式分析或?qū)ο蠖x重裝載時(shí)在庫程序緩沖區(qū)中發(fā)生的錯(cuò)誤。如果sum(pins)/sum(reloads) ≈0,則庫緩沖區(qū)的命中率合適;若sum(pins)/sum(reloads)1, 則需調(diào)整初始化參數(shù) shared_pool_size來重新調(diào)整分配給共享池的內(nèi)存量。 \x0d\x0a1.2.2、數(shù)據(jù)字典緩沖區(qū)的調(diào)整 \x0d\x0a數(shù)據(jù)字典緩沖區(qū)包含了有關(guān)數(shù)據(jù)庫的結(jié)構(gòu)、用戶、實(shí)體信息。數(shù)據(jù)字典的命中率,對(duì)系統(tǒng)性能影響極大。數(shù)據(jù)字典緩沖區(qū)的使用情況記錄在動(dòng)態(tài)性能表v$librarycache中,可通過查詢?cè)摫韥砹私馄浠顒?dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect sum(gets),sum(getmisses) from v$rowcache; \x0d\x0a \x0d\x0aGets列是對(duì)相應(yīng)項(xiàng)請(qǐng)求次數(shù)的統(tǒng)計(jì);Getmisses 列是引起緩沖區(qū)出錯(cuò)的數(shù)據(jù)的請(qǐng)求次數(shù)。對(duì)于頻繁訪問的數(shù)據(jù)字典緩沖區(qū),sum(getmisses)/sum(gets)10%~15%。若大于此百分?jǐn)?shù),則應(yīng)考慮增加數(shù)據(jù)字典緩沖區(qū)的容量,即需調(diào)整初始化參數(shù)shared_pool_size來重新調(diào)整分配給共享池的內(nèi)存量。 \x0d\x0a1.2.3、緩沖區(qū)高速緩存的調(diào)整 \x0d\x0a用戶進(jìn)程所存取的所有數(shù)據(jù)都是經(jīng)過緩沖區(qū)高速緩存來存取,所以該部分的命中率,對(duì)性能至關(guān)重要。緩沖區(qū)高速緩存的使用情況記錄在動(dòng)態(tài)性能表v$sysstat中,可通過查詢?cè)摫韥砹私馄浠顒?dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads'); \x0d\x0a \x0d\x0adbblock gets和consistent gets的值是請(qǐng)求數(shù)據(jù)緩沖區(qū)中讀的總次數(shù)。physical reads的值是請(qǐng)求數(shù)據(jù)時(shí)引起從盤中讀文件的次數(shù)。從緩沖區(qū)高速緩存中讀的可能性的高低稱為緩沖區(qū)的命中率,計(jì)算公式: \x0d\x0a \x0d\x0aHit Ratio=1-(physical reds/(dbblock gets+consistent gets)) \x0d\x0a \x0d\x0a如果Hit Ratio60%~70%,則應(yīng)增大db_block_buffers的參數(shù)值。db_block_buffers可以調(diào)整分配給緩沖區(qū)高速緩存的內(nèi)存量,即db_block_buffers可設(shè)置分配緩沖區(qū)高速緩存的數(shù)據(jù)塊的個(gè)數(shù)。緩沖區(qū)高速緩存的總字節(jié)數(shù)=db_block_buffers的值*db_block_size的值。db_block_size 的值表示數(shù)據(jù)塊大小的字節(jié)數(shù),可查詢 v$parameter 表: \x0d\x0a \x0d\x0aselect name,value from v$parameter where name='db_block_size'; \x0d\x0a \x0d\x0a在修改了上述數(shù)據(jù)庫的初始化參數(shù)以后,必須先關(guān)閉數(shù)據(jù)庫,在重新啟動(dòng)數(shù)據(jù)庫后才能使新的設(shè)置起作用。

當(dāng)前題目:oracle查詢?nèi)绾蝺?yōu)化 oracle查詢語句優(yōu)化
網(wǎng)頁網(wǎng)址:http://muchs.cn/article40/hjshho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、服務(wù)器托管靜態(tài)網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、企業(yè)建站、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)