Oracle性能調(diào)整的誤區(qū)
導(dǎo)讀:Oracle數(shù)據(jù)庫的發(fā)展可以說是告訴發(fā)展,憑借著超強的能力,Oracle數(shù)據(jù)的性能是很好的,在Oracle數(shù)據(jù)庫管理員操作時經(jīng)常會遇到一些性能調(diào)整的誤區(qū),給工作人員的操作帶來很大的不便,這里我將為大家解析Oracle數(shù)據(jù)庫性能調(diào)整的誤區(qū)?!?/p>
為了提高性能,我們針對Oracle數(shù)據(jù)庫本身提供了的方法或方案進(jìn)行過不少的嘗試,主要包括:
共享服務(wù)器模式(MTS)
集群技術(shù)(Clustering)RAC
分區(qū)
并行處理(主要是并行查詢)
Oracle提供的這些特性確實是用來進(jìn)行性能改善的,但我們往往忽略了對自身應(yīng)用特性的分析,它們是否適合于我們。最近,通過對這方面知識的深入了解,發(fā)現(xiàn)我們以前存在一些錯誤的認(rèn)識。我覺得有必要,大家一起來改變這種誤解。
分析之前,先明確一下我們的應(yīng)用特性。數(shù)據(jù)庫應(yīng)用大體可以分為OLAP和OLTP兩大類,即:聯(lián)機事務(wù)分析(數(shù)據(jù)倉庫)和聯(lián)機事務(wù)處理(事務(wù)應(yīng)用)我們的應(yīng)用系統(tǒng),其應(yīng)用特性主要是聯(lián)機事務(wù)處理,又包含了少量的數(shù)據(jù)倉庫特性。
1.共享服務(wù)器(MTS)
Oracle缺省用的是專用服務(wù)器模式,也就是說一個用戶連接進(jìn)程對應(yīng)一個服務(wù)器的進(jìn)程。記得某大醫(yī)院剛啟用的時候,我們曾經(jīng)試過MTS.因為聽說MTS在不增加內(nèi)存和CPU的情況下連接更多的客戶端,結(jié)果并不是我們預(yù)期的那樣。MTS有問題嗎?不是,是因為我們對MTS不了解,并不是它有問題,而是它不是用來在這種情況下做這件事的。
一般情況,只有當(dāng)并發(fā)連接數(shù)超過了操作系統(tǒng)的支持時,才建議使用MTS,否則應(yīng)該使用缺省的專用服務(wù)器模式。也就是說,在專用服務(wù)器模式下,因為多一個連接就要多消耗一個操作系統(tǒng)的進(jìn)程,只有當(dāng)并發(fā)應(yīng)用需求超過操作系統(tǒng)的允許連接數(shù)時,才有必要考慮MTS.如果現(xiàn)有系統(tǒng),物理上支持100個連接的專用服務(wù)器數(shù)據(jù)庫,改為使用共享服務(wù)器模式,也許支持1000個連接,但同時活動的連接可能只有100個。一般2到4個CPU的服務(wù)器,應(yīng)對200到400個并發(fā)連接是足夠的,如果連接增加了,可以增加CPU和內(nèi)存。
MTS具有以下一些缺點:
1.共享服務(wù)器的代碼路徑比專用服務(wù)器長,所以它天生就比專用服務(wù)器慢。
2.存在人為死鎖的可能,因為它是串行的,所有共享服務(wù)器綁定在一起(一個進(jìn)程),只要一個連接阻塞,則所有用戶阻塞,并且極可能死鎖。
3.存在獨占事務(wù)的可能,因為如果一個會話的事務(wù)運行時間過長,它獨占共享資源,其它用戶只能等待。(而專用服務(wù)器,每個客戶端是一個會話)
4.共享服務(wù)器模式限制了某些數(shù)據(jù)庫特性,例如:不能單獨啟動和關(guān)閉實例,不能進(jìn)行介質(zhì)恢復(fù),不能使用Log Miner,不能使用,并且SQL_TRACE沒有意義(因為是共享而不是當(dāng)前會話的)。
MTS減少的內(nèi)存實際上是專用服務(wù)器模式下每個用戶連接到操作系統(tǒng)進(jìn)程所需的內(nèi)存,但它卻使用SGA的Large_Pool來分配UGA,拆東墻補西墻,所減少的內(nèi)存是很少的。如果用戶會話的連接和斷開很頻繁,數(shù)據(jù)庫進(jìn)程的創(chuàng)建和刪除的開銷會非常大,這種情況最好采用共享服務(wù)器模式(否則,應(yīng)該使用連接池技術(shù))。所幸的是,我們產(chǎn)品的設(shè)計可能就考慮了這個因素,使用的是一次連接終身使用(會話生命周期內(nèi)),避免了這種情況。
所以,綜上所述,針對我們產(chǎn)品,建議采用缺省的專用服務(wù)器模式,連接不夠時,通過增加硬件解決,而不是改用MTS.另外,實際上,Oracle可以同時支持共享服務(wù)器和專用服務(wù)器模式,可以指定一個會話使用專用服務(wù)器,另一個會話使用共享服務(wù)器。
2.集群技術(shù)(RAC)
Oracle RAC(Real Application Clusters),我們說的雙機容錯就是RAC的一種。 集群技術(shù)的優(yōu)勢在在于橫向擴展性能,并提供高可用性。32位的操作系統(tǒng)有4G內(nèi)存的限制,有些Unix系統(tǒng)(以及非高級版本的Windows)有CPU個數(shù)的限制。而集群技術(shù)通過集合多臺機器協(xié)同工作,橫向打破了這種限制。通過RAC,一臺服務(wù)器一個實例,多臺機器構(gòu)成一個實例服務(wù)集,客戶端連接到它上面。這項技術(shù),我們有時對客戶說是負(fù)載均衡,實際上這是片面的,RAC的主要針對的是CPU和內(nèi)存的負(fù)載均衡,并沒有實現(xiàn)磁盤IO的負(fù)載均衡。(當(dāng)然,磁盤IO可以通過Raid或NAS來實現(xiàn))
#p#
RAC還有一個好處是,提高了可用性,也就是說一臺服務(wù)器壞掉了(注意:不是數(shù)據(jù)存儲介質(zhì)),不影響正常使用。就像負(fù)載均衡一樣,它提高了數(shù)據(jù)層以上的可用性,但不是全部,因為數(shù)據(jù)壞了,它也沒有辦法。(數(shù)據(jù)層,那是Oracle Data Guard的事了,或者干脆說那是存儲硬件的事)
但是,RAC帶來好處的同時,也帶來了性能的影響。因為它要全局協(xié)調(diào)數(shù)據(jù)高速緩存,保證每個實例上連接的用戶看到的緩存數(shù)據(jù)是一致的,所以把以下三方面的矛盾放大:
1.高速緩存爭用
2.過多的I/O 3.鎖定
也就是說,如果這些方面有問題,用了RAC后問題就會更大,例如:由于SQL沒有使用綁定變量導(dǎo)致高速緩存爭用,用了RAC會更嚴(yán)重。
總之,如果你的服務(wù)器的CPU插滿了,內(nèi)存也加到極限了,而并發(fā)用戶還在不斷增長,或者你對故障停機時間要求非常高,RAC無疑是你應(yīng)該選擇的。
3.分區(qū)
Oracle的分區(qū)用途在于把大的表或索引分成小的片段,以便更容易管理。我們以前可能錯誤的認(rèn)為分區(qū)就是fast=true,可以提高速度,也在腫瘤和兒科做過這方面的試驗。實際上,在事務(wù)處理系統(tǒng)中,分區(qū)一般不能加快查詢速度(某些情況下可能會減少對共享資源的爭用)。Oracle的分區(qū)特性,主要是針對數(shù)據(jù)倉庫來設(shè)計的,也就是說你的某張表如果有100G的大小,最好使用分區(qū),好處有以下三個方面:
1.提高可用性
分區(qū)的原理就是分而治之,如果一張表劃分為多個分區(qū),其中一個分區(qū)所在的介質(zhì)出了問題,不影響整個表的其它分區(qū)數(shù)據(jù)的訪問。
2.易于管理
在數(shù)據(jù)倉庫下,表分成小的片斷,更容易批量的刪除,碎片整理,以及一些并行處理。
3.提高性能
這方面,通過分區(qū)來達(dá)到是最困難的,必須經(jīng)過周密的計算來安排分區(qū)數(shù)據(jù)。
分區(qū)的規(guī)劃是復(fù)雜的,拿我們產(chǎn)品應(yīng)用來說,一般查詢涉及到多個表,多個索引,假設(shè)我們把病人費用記錄,藥品收發(fā)記錄,病人醫(yī)囑記錄這類大表建立分區(qū)。顯然,范圍分區(qū)對我們提升性能用處不大,散列分區(qū)才是我們查詢需求的,但大多數(shù)數(shù)據(jù)的散列又不夠集中。再加上,這些表上的索引這么多,常用的ID,時間類索引就不少,很少有人能做到把它們?nèi)窟M(jìn)行全局分區(qū)或準(zhǔn)確的進(jìn)行范圍分區(qū)(實際上可能根本無法按需求進(jìn)行多個索引的范圍分區(qū))。如果查詢經(jīng)常涉及多個索引,如何保證用到的每個索引都在一個分區(qū)上,如果不是,必然掃描多個分區(qū),增加邏輯I/O和CPU時間,從而增加查詢時間。(數(shù)據(jù)分布在不同物理存儲介質(zhì)的情況,在下面的并行處理中再討論)
再來看一下,某些情況下可能會減少對共享資源的爭用是指什么,是指并行修改和更新會更快。仔細(xì)分析,我們分區(qū)的原則是什么?一般最常用的可能是按時間段進(jìn)行范圍分區(qū),這樣,修改和更新絕大多數(shù)還是在同一個分區(qū)上進(jìn)行,所以對減少共享資源的爭用這方面,基本沒有什么效果。(有按科室ID進(jìn)行散列分區(qū)的對應(yīng)的唯一應(yīng)用需求嗎?有基于列表分區(qū)(典型特征值)的對應(yīng)的唯一應(yīng)用需求嗎?基本上沒有。)分區(qū)主要從并行的角度來提高性能,但事務(wù)處理系統(tǒng)本身應(yīng)用特性決定了它不適合這種技術(shù)。也就是說,針對我們產(chǎn)品的事務(wù)處理應(yīng)用特點,根本沒有必要采用分區(qū)技術(shù)。
4.并行處理
根據(jù)我們的應(yīng)用特點,主要分析并行查詢。一般要求配合分區(qū)特性,多CPU硬件。自O(shè)racle 8.1.6起,增加了一個自動調(diào)節(jié)并行查詢的選項:PARALLEL_AUTOMATIC_TUNING=TRUE在相應(yīng)的表上設(shè)置PARALLEL參數(shù),Oracle就會在適當(dāng)?shù)臅r候自動并行化該表上的操作。并行查詢對事務(wù)處理系統(tǒng)基本上沒有用。因為并行查詢的設(shè)計是針對數(shù)據(jù)倉庫中的單用戶完全消耗100的資源而做的。而事務(wù)處理中,往往有很多并發(fā)用戶,他們爭用共用資源,所以你想辦法讓一個用戶占用所有的資源是適得其反。
在以后進(jìn)行Oracle數(shù)據(jù)庫性能調(diào)整時,要特別注意上文中講到的性能調(diào)整誤區(qū),如果錯了就及時糾正過來,避免造成更大的麻煩,很高興與大家分享關(guān)于Oracle數(shù)據(jù)庫性能調(diào)整的誤區(qū),希望能夠幫助到大家。
【編輯推薦】