Oracle數(shù)據(jù)庫是目前主流的商用數(shù)據(jù)庫之一,隨著硬件價格的下降,以及Oracle數(shù)據(jù)庫強大的數(shù)據(jù)管理能力和良好的平臺支持性,被越來越多的用戶使用。因此,如何使用Oracle數(shù)據(jù)庫實現(xiàn)一個高效的數(shù)據(jù)管理平臺,被廣泛關(guān)注。下面從Oracle數(shù)據(jù)庫實例的存儲管理、內(nèi)存參數(shù)設(shè)置和日常維護等方面,分析影響數(shù)據(jù)庫性能的原因,從而通過合理的配置,實現(xiàn)一個高效的數(shù)據(jù)管理平臺。
1、存儲管理
系統(tǒng)的I/O性能是Oracle數(shù)據(jù)庫系統(tǒng)的性能瓶頸之一,選擇高速可靠的存儲設(shè)備,是解決數(shù)據(jù)庫性能問題的重要手段,在已有存儲設(shè)備的基礎(chǔ)上,如何合理的配置,也是提高Oracle數(shù)據(jù)庫性能的有效手段。
1.1 使用磁盤陣列
在數(shù)據(jù)庫服務(wù)器上,使用冗余獨立/廉價磁盤陣列(Redundant Array of Independent/Inexpensive Disks,RAID)配置磁盤幾乎已經(jīng)成為一種規(guī)范,使用磁盤陣列可以改進性能和可用性。但是,選擇單塊磁盤時,應(yīng)該根據(jù)數(shù)據(jù)庫需要存儲的數(shù)據(jù)量的大小來選擇磁盤容量,過大的容量會帶來不適當(dāng)?shù)娜哂嗪洼^差的性能。同時,要根據(jù)數(shù)據(jù)庫的特點,選擇合適的RAID級別。RAID 5對于有大量讀操作的應(yīng)用程序可以獲得最大的性能,這是一種低成本的解決方案,但是對于大量寫操作的Oracle應(yīng)用程序,效率并不高。RAID 10是先鏡像,然后再對其進行分段,這是最常見的Oracle OLTP產(chǎn)品的RAID級別。它通過將RAID 0的磁盤I/O分段優(yōu)勢融入到RAID 1帶來的鏡像,結(jié)合了這個兩個RAID級別的優(yōu)點。在高讀/寫量的環(huán)境(如OLAP)中,由于對數(shù)據(jù)的小規(guī)模訪問會很頻繁,建議使用RAID 10。在硬件條件允許的情況下,還可以使用RAID 10或者RAID 5的改進方案。對于使用了磁盤陣列,不再需要把磁盤陣列上的一個邏輯設(shè)備分割成操作系統(tǒng)的多個盤區(qū),因為這樣做會增加必須管理的數(shù)據(jù)文件位置的數(shù)量,從而使得系統(tǒng)I/O性能下降。
1.2 關(guān)鍵數(shù)據(jù)文件分開存儲
為了更有效地在文件系統(tǒng)上操作Oracle數(shù)據(jù)庫,應(yīng)該把關(guān)鍵的數(shù)據(jù)文件分布到可用的文件系統(tǒng)中。以下元素關(guān)聯(lián)的文件應(yīng)該盡可能分離:SYSTEM表空間、TEMPORARY表空間、UNDO表空間、聯(lián)機重做日志文件(最好放在最快的磁盤上)、操作系統(tǒng)盤、放在ORACLE_HOME目錄下的關(guān)鍵ORACLE文件、經(jīng)常被訪問的表的數(shù)據(jù)文件、經(jīng)常被訪問的索引的數(shù)據(jù)文件、歸檔區(qū)域等。同時,分開存儲數(shù)據(jù)和索引文件。把關(guān)鍵的Oracle數(shù)據(jù)文件分開放置,這樣可以避免磁盤爭用成為一個“瓶頸”。通過把經(jīng)常連接的幾個表的表和索引分開放置,保證即使最糟糕的表連接也不會導(dǎo)致磁盤爭用。
1.3 使用本地管理的表空間
在Oracle 8i之前,所有表空間的段的盤區(qū)信息都通過Oracle數(shù)據(jù)字典進行維護,這樣,發(fā)生在數(shù)據(jù)庫的段上并關(guān)系到盤區(qū)分配的操作,例如擴展或截取一個表,將會導(dǎo)致對數(shù)據(jù)字典的操作。如果有很多擁有大量盤區(qū)的表被操作時,維護數(shù)據(jù)字典將會成為這些操作的瓶頸。Oracle 8i推出了新的盤區(qū)管理方式,叫本地管理的盤區(qū),通過本地管理的盤區(qū),盤區(qū)管理操作被重新分配到數(shù)據(jù)文件頭中的位圖塊中,數(shù)據(jù)庫的每個表空間都只包含自己的盤區(qū)信息,可以使用快速散列進程訪問該信息,而不是使用較慢的基于表的查詢訪問,因而使用本地管理的表空間,可以提高性能?梢詣(chuàng)建本地管理的表空間,也可以把數(shù)據(jù)字典管理的表空間遷移到本地管理的表空間。
1.4 使用分區(qū)來避免磁盤爭用
分區(qū)技術(shù)是基于海量數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng)(比如數(shù)據(jù)倉庫或者OLAP系統(tǒng))中最重要的一個技術(shù),很難想象,在一個存儲著上TB或者幾十TB的數(shù)據(jù)庫中,數(shù)據(jù)表不使用分區(qū)的情況。分區(qū)可能是提高與大型表有關(guān)的性能的最佳方法。通過訪問一個表或索引的較小片段,而不是訪問整個表或索引,分區(qū)可以很好地提高效率。這個策略在一個或多個用戶訪問同一個表的多個部分時特別有效。如果一個表的分區(qū)(片段)位于不同的設(shè)備上,吞吐量就會大大增加,分區(qū)還可以被獨立地備份和恢復(fù),這樣可以減少備份期間可能出現(xiàn)的磁盤I/O問題。僅當(dāng)分區(qū)被正確實現(xiàn)后,才能體現(xiàn)Oracle性能提高的良好優(yōu)點。設(shè)計良好的分區(qū),在數(shù)據(jù)操作中,可以很好的實現(xiàn)分區(qū)規(guī)避,同時對索引進行分區(qū),并使用并行選項,可以使分區(qū)功能更強大。為了最小化對一個大表的磁盤I/O,應(yīng)該把表分割在多個分區(qū)上,這些分區(qū)應(yīng)該放置在不同的物理磁盤上。
1.5 使用自動存儲管理(Automatic Storage Management,ASM)
在Oracle Database 10g Release 2中,使用自動存儲管理極大地簡化了數(shù)據(jù)庫的存儲管理和配置。ASM提供了內(nèi)置于Oracle數(shù)據(jù)庫內(nèi)核中的文件系統(tǒng)和卷管理器功能,提供了跨越所有服務(wù)器和存儲平臺的簡單存儲管理界面。提供了管理動態(tài)數(shù)據(jù)庫環(huán)境的靈活性,并且可以有效地提高效率。
ASM主要有以下優(yōu)點:
1)將I/O均勻地分布到所有可用磁盤驅(qū)動器以防止產(chǎn)生熱點,并且最大化性能;
2)不再需要過多地進行配置工作,并且最大化推動數(shù)據(jù)庫合并的利用存儲資源;
3)內(nèi)在地支持大文件;
4)在增量增加或刪除存儲容量后執(zhí)行自動聯(lián)機重分配;
5)維護數(shù)據(jù)的冗余副本以提高可用性,或者利用第三方的RAID功能。
Oracle數(shù)據(jù)庫可以包含ASM文件和非ASM文件,任何新的文件都可以創(chuàng)建為ASM文件,已有的文件也可以遷移到ASM。ASM降低了Oracle數(shù)據(jù)庫的成本和復(fù)雜性,并且不會影響到性能或可用性。構(gòu)建ASM的主要用途是解決數(shù)據(jù)庫的配置和布局以及IT角色之間的通信。有資料表明,在同樣的硬件條件下,使用ASM比使用操作系統(tǒng)的文件系統(tǒng)的I/O要快26%左右。
總之,通過以上這些配置要么是提高磁盤I/O性能,要么就是減少I/O爭用,以此來提高數(shù)據(jù)庫性能。
2、內(nèi)存優(yōu)化
Oracle實例的內(nèi)存使用對性能起著至關(guān)重要的作用。如果未按最佳方式為各種結(jié)構(gòu)分配內(nèi)存量,性能將急轉(zhuǎn)直下。分配的內(nèi)存量不能過少,也不能過多。在較早的數(shù)據(jù)庫版本中,DBA只有掌握大量的知識,花費大量的時間才能調(diào)整內(nèi)存的使用,但是在11g版本中,內(nèi)存調(diào)整大多可以自動完成。
Oracle實例中的內(nèi)存使用分為兩類:程序全局區(qū)域(Program Global Area,PGA)和系統(tǒng)全局區(qū)域(System Global Area,SGA),前者專門供每個會話使用,后者由所有Oracle進程共享。從9i版本開始,PGA的管理實現(xiàn)了自動化,從10g版本開始,SGA的管理實現(xiàn)了自動化,11g版本可同時自動管理PGA和SGA。
2.1 PGA 內(nèi)存管理
針對Oracle實例的用戶會話由連接到服務(wù)器進程的用戶進程組成。用戶進程生成SQL語句,并將它們發(fā)送到服務(wù)器進程供執(zhí)行,這就是客戶端與服務(wù)器的分工。與服務(wù)器進程關(guān)聯(lián)在一起的是非共享內(nèi)存塊:PAG。在執(zhí)行SQL語句時,服務(wù)器進程使用PGA來存儲會話特有的數(shù)據(jù),包括:臨時表、排序表、歸并位圖、變量、調(diào)用堆棧。PGA中的某些數(shù)據(jù)必須使用內(nèi)存。例如,如果會話的調(diào)用堆棧需要內(nèi)存,那么,相應(yīng)的內(nèi)存必須可供使用。而對于其他存儲結(jié)構(gòu),例如臨時表存儲,使用PGA的效果是不錯的,但PGA并不是必需的,因為可以將數(shù)據(jù)寫到基于磁盤的存儲結(jié)構(gòu)中,但是這會對性能產(chǎn)生負(fù)面影響。Oracle強烈建議使用自動管理PGA內(nèi)存。實現(xiàn)自動PGA內(nèi)存管理,需要設(shè)置PGA內(nèi)存分配總量(所有會話需要量之和)的目標(biāo),此后,Oracle實例將根據(jù)需要,從總量中為會話分配內(nèi)存,在某個會話執(zhí)行完語句后,此會話使用的PGA可以分配給另一會話。在任何時刻,只有某些已經(jīng)連接上的會話需要任何可轉(zhuǎn)讓的PGA內(nèi)存,即使會話處于閑置狀態(tài),也都需要一定量的PGA內(nèi)存來保留當(dāng)前會話的狀態(tài),但總體看來,這會留下足夠的空間使正在實際運行語句的會話獲得需要的內(nèi)存。
使用兩個實例參數(shù)來啟用PGA 內(nèi)存的自動管理:WORKAREA_SIZE_POLICY,PGA_AGGREGAT_TARGET,WORKAREA_SIZE_POLICY的默認(rèn)值是AUTO,就是自動將PGA分配給用戶,同時力求將PGA分配的總量保持在PGA_AGGREGAT_TARGET范圍以內(nèi)。
2.2 SGA 內(nèi)存管理
SGA包含多個內(nèi)存結(jié)構(gòu),這些結(jié)構(gòu)的大小可以以獨立方式調(diào)整,主要有:共享池、數(shù)據(jù)庫高速緩存區(qū)、大池 、流池、Java池、日志緩沖區(qū)。分配給大池、Java池和流池的內(nèi)存與轉(zhuǎn)讓無關(guān),原因是需要這樣的內(nèi)存,或者相應(yīng)的內(nèi)容不可轉(zhuǎn)讓。如果這些結(jié)構(gòu)不夠大,將發(fā)生錯誤;如果這些結(jié)構(gòu)過大,也不會提高性能。分配給共享池、數(shù)據(jù)庫高速緩存區(qū)和日志緩存區(qū)的內(nèi)存是可以轉(zhuǎn)讓的;如果達(dá)不到最優(yōu)大小,不會發(fā)生錯誤,但性能會因此下降。共享池是一個例外:如果在較長時間內(nèi)達(dá)不到最優(yōu)大小,將會發(fā)生錯誤。
Oracle公司同樣建議對SGA內(nèi)存進行自動管理。設(shè)置SGA的總大小,實例依據(jù)總量將內(nèi)存分配給各個結(jié)構(gòu),確保不存在因SGA組件不夠大帶來錯誤,且分配大于最小限度的內(nèi)存使SGA組件可以最佳狀態(tài)執(zhí)行。根據(jù)需要調(diào)整組件的大小,這樣,如果組件需要更多內(nèi)存,可以從具有多余空間的組件那里獲取內(nèi)存。要啟用SGA自動管理,則保留上述內(nèi)存結(jié)構(gòu)參數(shù)的默認(rèn)值,并設(shè)置一個參數(shù),來啟用自動共享內(nèi)存管理:SGA_TARGET,在使用自動共享內(nèi)存管理時,實例將監(jiān)視各個SGA組件的內(nèi)存需求,并根據(jù)需要將內(nèi)存分配給組件,如有必要,會減少內(nèi)存容量,以便將內(nèi)存分配總量控制在目標(biāo)范圍內(nèi)。包含在目標(biāo)范圍的還有日志緩沖區(qū),其大小使用LOG_BUFFER參數(shù)進行設(shè)置。LOG_BUFFER的默認(rèn)大小可能是正確的,可將此參數(shù)設(shè)置得比默認(rèn)值更大,但這往往會導(dǎo)致性能下降,如果將其設(shè)置得低于默認(rèn)值,將忽略相應(yīng)設(shè)置。
2.3 Automatic Memory Management
使用Automatic Memory Management機制時,通過設(shè)置MEMORY_TARGET這個參數(shù),就可以讓Oracle實例在總體上管理服務(wù)器內(nèi)存的使用。這允許Oracle根據(jù)需要,在PGA和SGA之間轉(zhuǎn)換內(nèi)存,從而將自動PGA管理和自動SGA管理又向前推進了一步。自動內(nèi)存管理會帶來巨大的性能優(yōu)勢。在實例運行過程中,無法根據(jù)活動模式的更改,在SGA和PGA之間手工轉(zhuǎn)換內(nèi)存,而且很多系統(tǒng)也無法同時為二者分配足夠的內(nèi)存,來滿足它們的峰值需求;自動內(nèi)存管理能夠根據(jù)需要,在SGA和PGA之間轉(zhuǎn)換內(nèi)存,以便在內(nèi)存總量允許的范圍內(nèi)優(yōu)化性能。必須由DBA和系統(tǒng)管理員共同確定總量大小,如果DBA設(shè)置的上限過大,以至于操作系統(tǒng)必須將SGA和PGA分頁寫入交換設(shè)備,這將會失去意義;系統(tǒng)管理員將建議適當(dāng)?shù)淖畲笾怠?/p>
MEMORY_MAX_TARGET參數(shù)限制了MEMORY_TARGET參數(shù)的最大值不能超過。因此啟用自動內(nèi)存管理,只要設(shè)置一個參數(shù)MEMORY_TARGET,而不必設(shè)置上面列出的其他參數(shù)。
2.4 使用內(nèi)存顧問程序
Oracle實例收集大量有關(guān)活動和性能的信息。這些統(tǒng)計信息收集到內(nèi)存中,并由MMON(Manageability Monitor)后臺進程定期轉(zhuǎn)儲到自動工作負(fù)荷倉庫(Automatic Workload Repository,AWR),這些統(tǒng)計信息供內(nèi)存顧問程序使用。內(nèi)存顧問程序是計算更改SGA和PGA內(nèi)存結(jié)構(gòu)大小的效果的工具。AWR工具使用顧問程序制定有關(guān)內(nèi)存分配的決策,DBA可以通過各種視圖或者EntERPrise Management Database Control看到他們。通過查詢V$pga_target_advice、V$sga_target_advice和V$memory_target_advice,可以分別得到最佳的PGA、SGA和內(nèi)存分配值。如果使用自動內(nèi)存管理,僅需要查詢最后一個視圖,來確定Oracle實例總內(nèi)存的最佳分配值。同樣,可以通過EntERPrise Management Database Control,使用顧問程序來收集有關(guān)內(nèi)存分配的建議,通過打開Memory Advisors鏈接,可以分別查找SGA、PGA和Memory的當(dāng)前設(shè)置大小和建議的最佳大小。
3、日常運行和維護
在數(shù)據(jù)庫的長期運行過程中,隨著數(shù)據(jù)量的增加,以及數(shù)據(jù)物理存儲的變化,數(shù)據(jù)庫的性能會有所下降,所以,對數(shù)據(jù)庫進行相關(guān)的日常維護,也是提高數(shù)據(jù)庫性能的重要手段。
3.1 歸檔舊的數(shù)據(jù)
遵循“二八”原則,數(shù)據(jù)庫中有很多數(shù)據(jù)很少被訪問到,所以應(yīng)該對于這些“歷史”數(shù)據(jù),進行相應(yīng)的歸檔操作。如果是已經(jīng)使用了分區(qū)的表,可以通過分區(qū)合并和拆分,進行數(shù)據(jù)歸檔。以此來降低查詢數(shù)據(jù)時的磁盤I/O量,減少DML操作時的鎖沖突,提高數(shù)據(jù)庫性能。
3.2 管理無效對象和無用對象
決定性能的另一關(guān)鍵因素是數(shù)據(jù)庫中各種對象的狀態(tài),如果PL/SQL對象是無效的(INVALID),則會對性能產(chǎn)生負(fù)面影響,也可能導(dǎo)致錯誤;如果無法使用索引,那么SQL語句的執(zhí)行速度可能大大降低,并更密集地使用資源。應(yīng)該識別、了解和修復(fù)所有無效對象和不可用的對象。
1)無效對象
存儲的PL/SQL是數(shù)據(jù)字典中編譯為PL/SQL對象并在其中保持的代碼,可以是過程、函數(shù)、觸發(fā)器、程序包或?qū)ο箢愋。這些對象大多數(shù)會引用數(shù)據(jù)對象(例如表)。在編譯對象時,編譯器將檢查器引用的數(shù)據(jù)對象,以便確認(rèn)代碼的定義正確。如果編譯時發(fā)現(xiàn)引用的數(shù)據(jù)對象不存在,會將該對象標(biāo)記為無效;但是對象可能在創(chuàng)建一段時間之后變得無效。DBA_OBJECTS視圖包含STATUS列,該列標(biāo)記對象的狀態(tài)是有效還是無效。如果有相關(guān)的無效對象,應(yīng)該進行刪除或者修復(fù)。
2)無用的索引
一個索引由若干按照順序排列的索引鍵值組成,其中每個索引鍵值都具有相關(guān)聯(lián)的rowid,rowid是索引鍵引用的行的物理位置的指針。如果某個表的rowid發(fā)生變化,那么索引就會被標(biāo)記為無用。索引變得無用的原因有許多種,其中最常見的是使用Alter table……move命令移動了指定的表,會改變所有行的物理位置,因此索引被指向錯誤的位置,對于分區(qū)表的分區(qū)調(diào)整,也同樣會產(chǎn)生無用索引。隨著時間的推移,執(zhí)行了許多影響行鍵值的刪除和更新操作,索引往往會變得無用。Oracle會發(fā)現(xiàn)這個錯誤,從而不允許使用該索引。
在Oracle 11g版本中,如果某條SQL語句試圖使用無用的索引,那么查詢會重新使用不需要該索引的執(zhí)行計劃,SQL語句的執(zhí)行總會成功,不過查詢的性能會顯著降低。這種方式由實例參數(shù)SKIP_UNUSABLE_INDEXES控制,它的默認(rèn)值是TRUE。如果希望在查詢中使用到無用索引時返回錯誤消息,那么可以執(zhí)行Alter System Set SKIP_UNUSABLE_INDEXES=FALSE。通過查詢DBA_INDEXES視圖,運行Select owner, index_name from dba_indexes where status=’UNUSABLE’,可以查找變得無用的索引,并使用Alter Index …… Rebuild命令重新創(chuàng)建該索引。重建索引是數(shù)據(jù)庫正常維護工作的一部分。
3.3 消除數(shù)據(jù)碎片
碎片會阻礙數(shù)據(jù)庫的空間管理,但總的說來,一個段中的盤區(qū)量的多少總是會影響數(shù)據(jù)庫性能。擁有很多跨多個數(shù)據(jù)文件的不連續(xù)盤區(qū)的位圖索引就是一個大的性能問題?梢允褂谜_的盤區(qū)大小以消除碎片,對于已經(jīng)有碎片的數(shù)據(jù)表,可以創(chuàng)建一個新表空間并把數(shù)據(jù)移到其中。
3.4 增加日志文件的大小
增加日志文件的大小和LOG_CHECKPOINT_INTERVAL以提高速度,如果想讓大量的INSERT、UPDATE和DELETE操作速度更快,可以增加日志文件大小,并確保這些文件在最快的磁盤上。Oracle依賴于聯(lián)機重做日志文件來記錄事務(wù)處理。每次數(shù)據(jù)庫中發(fā)生一次事務(wù)處理,聯(lián)機重做日志文件中就會增加一個條目。如果增大分配給日志的空間,就可以提高性能,沒有提交的事務(wù)同樣會生成日志條目,因為它們生成撤銷記錄,這些撤銷記錄也寫入到重做日志。增加日志文件的大小,從而增加處理大型IN?SERTS、DELETES和UPDATES(DMLs)操作的規(guī)模。
3.5 配置UNDO 表空間
回滾段保存了在一次更新和刪除期間內(nèi)的數(shù)據(jù)快照,如果初始化參數(shù)UNDO_MANAGEMENT=MANUAL,那么就可以像Oracle前面的版本一樣使用回滾段。如果初始化參數(shù)UNDO_MANAGEMENT=AUTO,就使用撤銷表空間管理。當(dāng)事務(wù)回滾時,就要用到數(shù)據(jù)快照,如果把數(shù)據(jù)庫設(shè)置為使用回滾段,要為各個回滾段保留多個表空間,這樣用戶就不會在同一個表空間中出現(xiàn)爭用現(xiàn)象。在Oracle 9i中,提出了一個管理Rollback或UNDO數(shù)據(jù)的新辦法,就是使用UNDO表空間,大大簡化了對事務(wù)的管理。在回滾段中,撤銷塊會根據(jù)需要被新的事務(wù)重寫,因而要保證有足夠大的回滾段可用于事務(wù)。從而避免執(zhí)行大的事務(wù)時發(fā)生快照太舊的錯誤,并且保證有足夠的回滾段來維護數(shù)據(jù)庫中的常規(guī)活動,從而最小化回滾段的爭用。為了利用自動撤銷管理,可以在數(shù)據(jù)庫中創(chuàng)建UNDO類型的表空間。并在初始化文件中指定3個新的參數(shù):UNDO_MANAGEMENT=AUTO, UNDO_TABLESPACE=UN?DOTBS1, UNDO_RETENTION= 時間值,UNDO_RETENTION初始化參數(shù)用來指定撤銷數(shù)據(jù)被提交之后保留在表空間中的數(shù)據(jù)值(秒),這是使用撤銷表空間的真正優(yōu)點,因為不同于傳統(tǒng)的回滾段,數(shù)據(jù)庫至少會嘗試為長期運行的查詢維護較早版本的數(shù)據(jù)。如果將UNDO_MANAGEMENT設(shè)置為AUTO,即使用自動撤銷管理,就要將UNDO_TABLESPACE配置一個具體的表空間,如果沒有配置,則使用SYSTEM表空間,這將會影響數(shù)據(jù)庫性能。
通過V$UNDOSTAT視圖可以監(jiān)控實例中當(dāng)前事務(wù)使用UNDO表空間的情況,視圖中的每行表示在過去24小時里每隔10分鐘UNDO表空間的使用情況、事務(wù)量和查詢長度等信息的統(tǒng)計快照,通過分析這些信息可以對UNDO表空間進行重新配置。
4、結(jié)束語
有關(guān)Oracle數(shù)據(jù)庫性能優(yōu)化的方法還有很多,例如配置RAC、實現(xiàn)Data Guard以及SQL查詢優(yōu)化等,相關(guān)的論文有很多,這里不再討論。
總之,在硬件設(shè)備既定的情況下,通過上述的相關(guān)配置,能夠進一步的提高和優(yōu)化Oracle數(shù)據(jù)庫的性能,實現(xiàn)一個功能強大的數(shù)據(jù)庫管理平臺。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.oesoe.com/
本文標(biāo)題:Oracle 數(shù)據(jù)庫性能優(yōu)化分析與配置
本文網(wǎng)址:http://www.oesoe.com/html/support/11121510916.html