一、主要內容
影響ArcSDE效能的因素很多,但是歸根到底包括兩個方面,背景Oracle和ArcSDE的配置。Oracle方面,不僅包含資料庫組件大小定義、儲存參數等內容,還包括Oracle執行個體的初始化參數、Oracle統計資訊分析等內容。ArcSDE方麵包括DBTUNE儲存參數、空間索引、以及統計資訊更新等方面。作為建立在後台資料庫系統之上的空間資料庫引擎,ArcSDE的效能很大程度上取決於Oracle的效能狀況。換句話說,如果沒有良好效能的Oracle系統的支援,就無法建立高效的ArcSDE資料訪問引擎。
二、降低Oracle磁碟I/O
典型的Oracle安裝方便了資料庫安裝的過程,但一定不會達到預期的良好效能。沒有經過認真配置和調整的Oracle系統不會獲得滿意的效率。在Oracle系統中,磁碟I/O衝突導致了大多數明顯的效能上的瓶頸。除了購買更快的磁碟機和附加的網卡外,問題的解決方案在於平衡檔案系統中的磁碟I/O,儘可能將其降至最低,減少進程間I/O等待發生的可能性。
合理放置資料庫組件的參考原則
如果估算好了資料檔案的大小,就可以確定在檔案系統中如何放置它們。本段中列舉了一些相關的指導,不必完全照搬,因為需要考慮自己磁碟機的數目和大小。這些指導原則上按照其重要程度從大到小進行排序。資料庫使用一段時間之後,一種正常的使用模式也就建立了,訪問非常頻繁的資料檔案需要隔離在單獨的磁碟上。
分離表和索引
每次Oracle訪問索引來定位到某個記錄行時,它必須同時訪問表來取出所指向的行。此時如果表和索引存放在同一個磁碟上時,磁頭就需要在索引和表之間進行移動。儘可能不要把索引和表格儲存體在同一個資料表空間中。始終將表的資料檔案和索引的資料檔案分開存放。當表及其索引的資料區塊位於同一磁碟機時,這樣做可以減少磁頭移動的發生。
按照活動性放置檔案
將聯機重做記錄檔儲存在它們自己的磁碟機上。經常進行編輯操作(inserts,updates,or
deletes)的Oracle資料庫具有非常活躍的聯機重做記錄檔。將聯機重做記錄檔和其他也需要頻繁進行I/O操作的資料檔案從物理上分離是很重要的。只要有可能,將記錄檔建立在自己單獨的磁碟機上,或者和其他一些相對靜態檔案一起存放。在一個經常進行編輯操作的資料庫中,就I/O而言,聯機重做記錄檔是最活躍部分。如果無法將它們安排在自己單獨的磁碟機上,就將它們和那些相對I/O操作較少的檔案放置在一起。
一定將復原段資料檔案與重做記錄檔分離。當資料庫被編輯時,復原段會被經常性地訪問。要盡量將這些資料檔案和其他活動性強的檔案分開存放。這樣做能夠提高Oracle處理事務的效率。
在索引建立之後,如果SORT_AREA_SIZE參數已經設定為推薦的512KB,ArcSDE就不再使用暫存資料表空間。因此,如果其他的應用程式也同樣不使用暫存資料表空間的話,暫存資料表空間可以和其他活動性高的檔案放置在一起。
將系統資料表空間資料檔案和其他活動性強的資料檔案放置在一起。對系統資料表空間資料字典表的訪問率相對較低,因為它們的資料緩衝在共用池(shared
pool)和高速緩衝區(buffer
cache)中。
根據預期的I/O訪問情況放置business表和索引資料檔案。如果預期某個特定的資料檔案會具有很高的I/O訪問,盡量把它單獨放置在自己的磁碟機上或者和其他活動性較低或中等的資料檔案放置在一起。
三、ArcSDE儲存參數
和Oracle系統相同,典型的ArcSDE安裝過程很方便,但一定不會達到預期的良好效能。沒有經過配置和調整的ArcSDE也同樣不會獲得滿意的效率。
DBTUNE表
如前所述,ArcSDE的效能很大程度上取決於Oracle的效率,那麼如何把先前提到的Oracle中減少I/O衝突和瓶頸的原則體現到ArcSDE的配置過程中呢?即如何控制ArcSDE表和索引在Oracle中的的儲存配置呢?我們可以通過DBTUNE中定義的儲存參數來實現。
ArcSDE從DBTUNT表中讀取儲存的參數,用來定義ArcSDE表和索引的物理資料參數。這些儲存參數按照配置關鍵字進行分組。當ArcSDE用戶端程式建立資料對象(表和索引)時,這些資料對象會被賦予配置關鍵字。
在ArcSDE之前,配置關鍵字儲存在一個名為“dbtune.sde”的檔案中,位於ArcSDE的etc目錄中。在執行sdesetupora8*命令時,ArcSDE使用dbtune.sde檔案進行儲存參數的初始化。配置參數從dbtune.sde檔案讀出,然後寫入DBTUNE資料表。
應該注意到,ArcSDE已經簡化了儲存的參數。ArcSDE沒有為每一個Oracle的儲存參數匹配一個相同的ArcSDE參數;ArcSDE的儲存參數已經演變為配置的字串,反應表和索引的整體儲存配置。
ArcSDE以前版本的儲存參數可以自動轉換為新的、更為簡化的ArcSDE版本的儲存參數。ArcSDE的儲存參數保留了Oracle的CREATE
TABLE或CREATE
INDEX語句中所有儲存參數。
ArcSDE在安裝過程中產生DBTUNE表。如果dbtune.sde檔案不存在或者為空白,sdesetupora8*就會利用預設的配置關鍵字(ArcSDE的最小配置)建立並產生DBTUNE表。在幾乎所有的情況下,需要利用指定的儲存參數為資料庫建立表。
2、編輯DBTUNE表
儘管可以使用SQL語句來編輯DBTUNE表的內容,比如SQL*Plus,但是ArcSDE中引入的Sdedbtune命令為ArcSDE管理員提供了一種方便的管理和維護DBTUNE表的方式。Sdedbtune命令將DBTUNE表中的記錄和ArcSDE
etc目錄中的檔案之間進行匯入或者匯出。
轉出的檔案可以在文字編輯器中進行修改(UNIX下的”vi”,或者Windows
NT中的”notepad”)。下面的例子中DBTUNE錶轉出到dbtune.out檔案中,而該檔案被vi編輯之後再轉入到表中:
$
sdedbtune -o export -f dbtune.out -u sde -p fredericton
$ vi
dbtune.out
$ sdedbtune -o import -f dbtune.out -u sde -p fredericton
-N
sdedbtune管理工具總是轉出檔案到ArcSDE的etc目錄中。不能改變和指定檔案的存放位置到別的路徑。通過不允許其他目錄,可以保證只有ArcSDE管理目錄的所有者才能執行sdedbtune命令。
3、DBTUNE修改執行個體
比如我們已經在Oracle中分別建立了用於存放空間資料的資料表空間sdedata和用於存放索引的sdeindx資料表空間,並根據“索引和資料分開存放”的原則,將它們建立在不同的的物理磁碟機上。然後,我們可以修改dbtune中default關鍵字中的參數如下:
##DEFAULTS
GEOMETRY_STORAGE
"SDEBINARY"
ATTRIBUTE_BINARY "LONGRAW"
B_STORAGE "PCTFREE 10
PCTUSED 90 INITRANS 4 TABLESPACE sdedata
STORAGE (FREELISTS 4 MINEXTENTS
1 PCTINCREASE 0)"
B_INDEX_ROWID "PCTFREE 10 INITRANS 4 TABLESPACE
sdeindx
STORAGE (FREELISTS 4 MINEXTENTS 1 PCTINCREASE 0)
NOLOGGING"
B_INDEX_SHAPE "PCTFREE 10 INITRANS 4 TABLESPACE
sdeindx
STORAGE (FREELISTS 4 MINEXTENTS 1 PCTINCREASE 0)
NOLOGGING"
B_INDEX_USER "PCTFREE 10 INITRANS 4 TABLESPACE
sdeindx
STORAGE (FREELISTS 4 MINEXTENTS 1 PCTINCREASE 0)
NOLOGGING"
………….
在該例中,將business表的資料存放在sdedata資料表空間中,其他索引存放在sdeindx資料表空間中。當然,其他儲存參數,諸如初始大小、最大值、增長率等都可以根據需要進行調整。
四、ArcSDE空間索引
基本概念
為了提高空間查詢的效能,ArcSDE採用空間索引的機制。是一個覆蓋整個要素類的兩維索引,類似於一般的道路圖上的索引網格。ArcSDE可以賦予三層空間索引網格,每個網格層都具有自己的格網大小。第一層網格為必需,它的格網尺寸最小;而第二和第三層可選,它們的網格可以通過設定為0使之無效。如果有效,第二層網格大小必須至少比第一層網格大三倍,而第三層網格大小也必須至少比第二層網格大三倍。
建立空間索引
每次向business表添加要素類時,會為它自動建立一個的空間索引。ArcSDE伺服器在整個要素類的生命週期內都管理它的空間索引。當插入、更新或者刪除要素時,空間索引會被自動更新。load-only模式會禁止空間索引的管理,直到載入資料結束。這種做法充分地提高了載入的效能,並且在大批量載入資料時必不可少。Load-only模式不允許SQL之外的查詢操作。
資料載入結束後,返回normal模式,空間索引就可用了。從normal
I/O模式到load-only I/O模式的轉換會重建空間索引。在normal
I/O模式下,插入、更新或者刪除要素會更新空間索引。
ArcSDE首先將每個要素的範圍覆蓋到最低層的網格,獲得網格數量。如果要素超過四個格網,ArcSDE將該要素提升到更高層次的網格(如果定義了更高層次的網格)。ArcSDE會一直提升要素到更高層次網格,直到該要素位於四個格網之內或者已到達最高層次的網格水平。在最高一層網格,圖形可以被超過四個的格網索引。
ArcSDE將要素的格網和相應的shape
ID、和要素範圍一起添加到空間索引表中。網格層次和每個格網都進行編碼,如下例:該要素類有兩個網格層次。面狀圖形101位於第1層的第4號格網,那麼空間索引表中就添加了一條記錄,因為該要素在四個格網之內(事實上是一個格網)。面狀要素102的範圍位於第一層網格的格網1到8中。因為該要素的範圍超出了四個格網,所以該要素被提升到第二層,在第二層中它位於兩個格網之內。因此,要素102被第二層網格索引,並在空間索引表中添加了2條記錄。
空間查詢和空間索引
空間查詢,比如尋找某個州邊界內的所有湖泊,就會使用空間索引。空間索引會被使用,除非SE_stream_set_spatial_constraints函數中的尋找順序設定為SE_ATTRIBUTE_FIRST。當尋找順序設為SE_ATTRIBUTE_FIRST時,ArcSDE忽略空間索引,而採用屬性條件作為where子句尋找滿足條件的要素類中的記錄。當使用空間索引時,ArcSDE通常按照下面的過程執行查詢:
定義範圍。範圍可以之間由應用程式定義,比如ArcMap的zoom
in工具定義的範圍。此外,範圍也可以由其他的要素範圍來確定。
串連(Join)空間索引表和要素表,返回與該範圍相交的格網。
串連(Join)要素表和business表,應用屬性條件中的where子句進行更進一步的查詢。
調整空間索引
格網的大小影響空間索引表的大小。設定空間索引在於尋找格網大小的平衡點—較小的格網會使每個要素對應較多的格網,也就需要空間索引表中的更多記錄。由於用戶端應用程式和空間資料的特徵在各個系統之間差異很大,所以沒有單一的適合所有情形的空間索引,有時需要嘗試不同的格網大小和網格層次的配置。
sdelayer命令有幾個操作選項可以通過改變格網大小和添加新的網格層次最佳化空間索引(’alter’操作選項)。‘stats’和‘si_stats’操作顯示當前空間資料特徵和空間索引資訊。
如下為一些提高空間查詢效能的方法:
考慮需要多少個網格層次,而且記住ArcSDE伺服器為每個網格層次掃描一次空間索引表。經常一個網格層次對一個要素類而言就是最好的解決方案,即使認為將幾何圖形分布在多個不同的網格層次可以減少空間索引表的入口。
對於純點狀類型的要素類,使用一個網格層次,而且考慮增大格網大小。空間查詢一般處理點狀圖形要比其他類型快。
監視空間索引。如果資料經常發生變化,調整空間索引會很困難。調整措施取決於空間資料的結構。當空間資料變化時,定期訪問空間索引。
根據具體應用建立空間索引。將應用程式視窗大小和空間索引網格大小相匹配。
對於未知的或者變化的應用程式視窗,開始定義一個網格層次,格網大小為要素平均範圍大小的3倍。可以利用如下的查詢獲得要素的平均大小:
select
(avg(emaxx - eminx) + avg(emaxy - eminy)) / 2 from f
(where is the layer
number of the feature
class)
根據資料種類設計要素類,比如類型、幾何大小、和分布情況。有時精心設計的要素類會更加充分地提高空間查詢的效能。
查看空間索引統計值
sdelayer命令的空間索引統計操作‘si_stats’,能夠有助於確定最佳化的空間索引網格大小。最佳化網格大小取決於所有要素幾何圖形的空間範圍、要素幾何空間範圍的差異、和要對該要素類進行的查詢類型。以下是一個si_stats輸出的例子:
$
sdelayer -o si_stats -l victoria,parcels -u av -p mo -i
sde81
輸出結果顯示每個網格層次的統計值:
網格層次和格網大小
當前網格層次總的空間索引記錄數
當前網格層次種儲存的圖形總數
每個圖形的空間索引比率
分組的圖形數量和百分比。表明圖形空間索引在該網格層次如何分組。
每個網格的圖形平均數
每個網格的最大數量
完全在一個網格中的圖形的百分比
五、總結
本文並沒有涉及所有ArcSDE效能的調整和配置內容,也沒有就所有影響其效能的因素進行討論。本文僅從最關鍵的磁碟I/O和空間索引等因素出發,介紹了配置和調整的一些關鍵原則。關於其他因素的配置和調整情況,比如Oracle執行個體的初始化參數、Oracle資料庫組件的大小、Oracle資料庫的統計資訊更新、以及ArcSDE的其他儲存參數,可以參考相關的指南。