時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
2. 在系統(tǒng)設(shè)計開發(fā)階段調(diào)整數(shù)據(jù)庫
為了充分利用Oracle數(shù)據(jù)庫的功能特性,在設(shè)計信息系統(tǒng)時,數(shù)據(jù)庫設(shè)計人員需要根據(jù)業(yè)務情況(如訪問量或客戶端數(shù)量)和現(xiàn)有資源狀況(如數(shù)據(jù)庫服務器的配置)考慮系統(tǒng)結(jié)構(gòu)和數(shù)據(jù)庫的邏輯結(jié)構(gòu)的設(shè)計:
2.1調(diào)整應用程序結(jié)構(gòu)設(shè)計。
即應用程序采用的是傳統(tǒng)的C/S兩層體系結(jié)構(gòu),還是B/W/D三層體系結(jié)構(gòu)。不同的應用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫資源是不同的。
2.2恰當使用分區(qū)、索引及存檔功能。
如果某種業(yè)務的數(shù)據(jù)量增長非常快,可以考慮存放該業(yè)務的數(shù)據(jù)庫表是否使用Oracle數(shù)據(jù)庫的分區(qū)功能;對于經(jīng)常訪問的數(shù)據(jù)庫表是否需要建立索引;對于經(jīng)常訪問但是當業(yè)務流程完成后不再變動的數(shù)據(jù)可采用放入歷史檔案的方法來實現(xiàn)應用系統(tǒng)中訪問盡可能少的數(shù)據(jù)量。
2.3恰當編寫訪問數(shù)據(jù)的SQL語句。
良好的SQL語句可以被數(shù)據(jù)庫重復使用而減少分析時間;恰當?shù)氖褂盟饕墒乖L問的數(shù)據(jù)塊大大減少從而減少響應時間。應用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫中的SQL語句執(zhí)行,因此SQL語句的執(zhí)行效率決定了Oracle數(shù)據(jù)庫的性能。Oracle公司推薦使用Oracle語句優(yōu)化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調(diào)整優(yōu)化SQL語句。
2.4調(diào)整硬盤I/O
這一步是在信息系統(tǒng)開發(fā)之前完成的。數(shù)據(jù)庫管理員可以將組成同一個表空間的數(shù)據(jù)文件放在不同的硬盤上,做到硬盤之間I/O負載均衡。在磁盤比較富裕的情況下還應該遵循以下原則:
將表和索引分開;
創(chuàng)造用戶表空間,與系統(tǒng)表空間(system)分開磁盤;
創(chuàng)建表和索引時指定不同的表空間;
創(chuàng)建回滾段專用的表空間,防止空間競爭影響事務的完成;
創(chuàng)建臨時表空間用于排序操作,盡可能的防止數(shù)據(jù)庫碎片存在于多個表空間中。
2.5確定數(shù)據(jù)塊大小和存儲參數(shù)。
由于數(shù)據(jù)庫的塊大小在數(shù)據(jù)庫創(chuàng)建以后就不能在修改(除非重建數(shù)據(jù)庫),因此為了減少數(shù)據(jù)鏈接和行遷移,又提高磁盤空間的利用率,在設(shè)計數(shù)據(jù)庫時要確定合適的數(shù)據(jù)塊大小和存儲參數(shù)。通常我們是根據(jù)樣例數(shù)據(jù)確定數(shù)據(jù)塊大小,而根據(jù)業(yè)務現(xiàn)狀和未來發(fā)展趨勢確定存儲參數(shù)。
3. 在數(shù)據(jù)庫運行階段調(diào)整數(shù)據(jù)庫
數(shù)據(jù)庫運行階段調(diào)整數(shù)據(jù)庫包括兩個方面:操作系統(tǒng)級的調(diào)整;數(shù)據(jù)庫級的調(diào)整。
3.1 操作系統(tǒng)級的調(diào)整
實施操作系統(tǒng)級調(diào)整的主要目的是減少內(nèi)存交換,減少分頁,使SGA(System Globle Area)可留駐內(nèi)存。
3.1.1減少內(nèi)存交換
內(nèi)存交換(swapping)可能會造成很大的內(nèi)存開銷,應將它最小化。運行在Solaris Unix操作系統(tǒng)上的Oracle數(shù)據(jù)庫,可利用vmstat或sar命令來檢查交換,查看到系統(tǒng)級內(nèi)存和硬盤I/O的使用情況,調(diào)整unix數(shù)據(jù)緩沖池的大小、每個進程所能使用的內(nèi)存大小等參數(shù)。
vmstat命令
它報告Solaris上的進程、虛擬內(nèi)存、磁盤、分頁和CPU的活動情況。下面命令將顯示系統(tǒng)每5秒鐘做的事情的概要:
% vmstat 5
sar命令
用于監(jiān)控交換、分頁、磁盤和CPU活動。下面命令用于每10秒顯示10次分頁活動的概要:
% sar -p 10 10
若系統(tǒng)內(nèi)存交換較多,且需要節(jié)省內(nèi)存,可采用以下措施:
1) 避免運行不必要的系統(tǒng)daemon進程或應用程序進程;
2) 在不明顯影響數(shù)據(jù)塊命中率的前提下減少數(shù)據(jù)庫緩沖區(qū)的數(shù)量,以釋放一些內(nèi)存;
3) 減少UNIX文件緩沖區(qū)的數(shù)量(特別是在使用裸設(shè)備時)。
3.1.2控制分頁
少量的內(nèi)存分頁不會太顯著地影響系統(tǒng)的性能,因為應用程序不必全部放在內(nèi)存中。但是分頁過多將會造成系統(tǒng)性能下降。為了檢測過多的分頁,可在快速響應或空閑期間運行測量,并與響應遲緩時的測量進行比較??赏ㄟ^以下辦法來解決:
使用vmstat或sar -p監(jiān)控分頁;
安裝更多的內(nèi)存;
將一些工作移到另一系統(tǒng)中;
配置系統(tǒng)核心使用更少的內(nèi)存;
保持SGA在單個共享內(nèi)存段中。
3.1.3使SGA(System Globle Area)留駐內(nèi)存
SGA是對數(shù)據(jù)庫數(shù)據(jù)進行快速訪問的一個系統(tǒng)全局區(qū),若SGA本身需要頻繁地進行釋放、分配,則不可能達到快速訪問數(shù)據(jù)的目的,因此,要求SGA駐留內(nèi)存。這時,我們可以重新配置UNIX核心,調(diào)整一些操作系統(tǒng)參數(shù)以達到增加共享內(nèi)存的目的。
3.2 數(shù)據(jù)庫級的調(diào)整
每一個Oracle實例都是由一組Oracle后臺進程和SGA的一個內(nèi)存區(qū)組成的。這組后臺進程會自動的讀寫數(shù)據(jù)庫的數(shù)據(jù)文件,因此,數(shù)據(jù)庫性能可以被這些因素所影響:SGA各部分的分配是否合理,使用效率是否正常;I/O和鎖競爭是否較多。
3.2.1 SGA的分配及使用效率
分配給每個實例的內(nèi)存,即SGA的使用效率如何,會大大影響數(shù)據(jù)庫系統(tǒng)的性能。SGA由下列部分組成:共享池、數(shù)據(jù)塊緩沖區(qū)、重做日志緩沖區(qū)、大池組成。
l 共享池(Shared pool)
共享池存放庫緩存(存儲共享SQL和PL/SQL區(qū))和數(shù)據(jù)字典緩存(數(shù)據(jù)庫對象信息)以及會話期間信息(對于MTS)。由于這些信息是應用程序需要經(jīng)常訪問的,因此這些信息需要保持高的命中率。可以通過以下語句來確認共享池數(shù)據(jù)的命中率:
庫緩存:
select gethitratio from v$librarycache 應大于90%
select sum(reloads)/sum(pins) from v$librarycache 應小于1%
數(shù)據(jù)字典緩存:
select sum(getmisses)/sum(gets) from v$rowcache 應小于15%
由于程序設(shè)計人員的水平參差不齊,可能存在大的匿名塊,這會導致SQL不能重用,因此需要找出大的匿名塊以轉(zhuǎn)換為存儲過程達到重用:
select * from v$sqlarea where command_type=47 and length(sql_text)>500
而對于一些應用系統(tǒng)非常頻繁使用的SQL對象如存儲過程、函數(shù)、包等,可以通過釘在內(nèi)存中的方式來防止由于共享池太小被移出:
exec dbms_shared_pool.keep(對象名)
數(shù)據(jù)塊緩沖區(qū)(Db block buffer):
數(shù)據(jù)塊緩沖區(qū)存放用戶所經(jīng)常訪問的數(shù)據(jù)文件的數(shù)據(jù)塊內(nèi)容以及用戶修改的數(shù)據(jù)內(nèi)容。數(shù)據(jù)庫把數(shù)據(jù)文件里的內(nèi)容讀到內(nèi)存中,下次需要時直接從內(nèi)存中讀取,從而減少了磁盤的I/O和響應時間。當然,一般只在比較小的數(shù)據(jù)表(如常用代碼表)才緩存到內(nèi)存中。
由于數(shù)據(jù)快緩沖區(qū)中不可能存放所有的數(shù)據(jù),因此可使用LRU算法來確定移出哪些數(shù)據(jù)塊,但又盡量保證有較高的數(shù)據(jù)命中率。
查看數(shù)據(jù)塊命中率的SQL語句為:
select 1-(phy.value/(cur.value+con.value)) from v$sysstat cur,v$sysstat con,v$sysstat phy
where cur.name='db block gets' and con.name='consistent gets'
and phy.name='physical gets'
如果這個命中率小于0.85,就要考慮為數(shù)據(jù)塊緩沖區(qū)分配更多的內(nèi)存了。
重做日志緩沖區(qū)(Log buffer):
重做日志緩沖區(qū)存放從用戶內(nèi)存區(qū)復制來的每個DML或DDL語句的重做條目。如果這個緩沖區(qū)分配太小會導致沒有足夠的空間來放重做條目而等待。
3.2.2 I/O和資源競爭
由于有眾多的進程要寫數(shù)據(jù)文件,因此需要通過I/O調(diào)整來解決I/O瓶頸問題。如果在設(shè)計階段有效地考慮了表空間的合理
關(guān)鍵詞標簽:技術(shù),優(yōu)化,性能,數(shù)據(jù)庫
相關(guān)閱讀 Foxpro到MySQL的數(shù)據(jù)轉(zhuǎn)換技術(shù)介紹 AJAX技術(shù) vs 傳統(tǒng)的ASP無刷新技術(shù) 暗區(qū)突圍秘密任務怎么做-秘密任務位置介紹 最好用的雙核瀏覽器有哪些 長生劫郭解怎么打-長生劫郭解攻略 CSSHack技術(shù)速查對照-CSS教程
熱門文章
Oracle中使用alter table來增加,刪除,修改列的語法
oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例
誤刪Oracle數(shù)據(jù)庫實例的控制文件
為UNIX服務器設(shè)置Oracle全文檢索
時間:2023-05-24 11:59:11
時間:2022-03-04 19:20:34
時間:2020-09-21 18:13:14
時間:2020-05-06 12:19:12
時間:2020-05-06 12:10:27
時間:2019-10-30 10:26:19
人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權(quán)語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法