SDE+ORACLE优化配置
生活随笔
收集整理的這篇文章主要介紹了
SDE+ORACLE优化配置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文 SDE+ORACLE優化配置
?
SDE的性能取決于:
首先操作系統的性能;其次是Oracle的性能,再次是SDE的性能。
第一:操作系統,無非是內存、CPU、帶寬等。
可以有待提高的地方:第一、硬件升級;
第三、做LB,負載均衡。比如可以用OrcleRAC。
第二:Oracle的性能
Oracle可以調優的地方就太多了,有時數據庫服務器本身硬件很好,但是oracle的參數設置不夠好,Oracle也不能很好地發揮服務器的硬件性能。
我本身對Oracle只是入門水平,也就簡單地給點建議:
2.1、OS的參數設置
內核參數名 說明
bufpages 對buffer空間不按靜態分配,采用動態分配,使bufpages值隨nbuf一起對buffer空間進行動態分配。
create_fastlinks 對HFS文件系統允許快速符號鏈接,
dbc_max_pct 加大最大動態buffer空間所占物理內存的百分比,以滿足應用系統的讀寫命中率的需要。
dbc_min_pct 設置最小動態buffer空間所占物理內存的百分比
desfree 提高開始交換操作的最低空閑內存下限,保障系統的穩定性,防止出現不可預見的系統崩潰(Crash)。
fs_async 允許進行磁盤異步操作,提高CPU和磁盤的利用率
lotsfree 提高系統解除換頁操作的空閑內存的上限值,保證應用程序有足夠的可用內存空間。
maxdsiz 針對系統數據量大的特點,加大最大數據段的大小,保證應用的需要。(32位)
Maxdsiz_64bit maximum process datasegment size for 64_bit
Maxssiz 加大最大堆棧段的大小。(32_bit)
maxssiz_64bit 加大最大堆棧段的大小(64_bit)
Maxtsiz 提高最大代碼段大小,滿足應用要求
maxtsiz_64bit 原值過大,應調小
Minfree 提高停止交換操作的自由內存的上限
Shmem 允許進行內存共享,以提高內存的利用率。
Shmmax 設置最大共享內存段的大小,完全滿足目前的需要。
Timeslice 由于系統的瓶頸主要反映在磁盤I/O上,因此 降低時間片的大小,一方面可避免因磁盤I/O不暢造成CPU的等待,從而提高了CPU的綜合利用率。另一方面減少了進程的阻塞量。
unlockable_mem 提高了不可鎖內存的大小,使可用于換頁和交換的內存空間擴大,用以滿足系統對內存管理的要求。
2.2、Oracle的競爭
讓我們來回顧一下設置對象存儲參數的一些常見規則:
?A、經常將pctused設置為可以接收一條新行。對于不能接受一行的free blocks對于我們來說是沒有用的。如果這樣做,將會令Oracle的性能變慢,因為Oracle將在擴展表來得到一個空的塊之前,企圖讀取5個"dead"的freeblock。
?B、表格中chained rows的出現意味著pctfree太低或者是db_block_size太少。在很多情況下,RAW和LONG RAW列都很巨大,以至超過了Oracle的最大塊的大小,這時chainedrows是不可以避免的。
?C、如果一個表有同時插入的SQL語句,那么它需要有同時刪除的語句。運行單一個一個清除的工作將會把全部的空閑塊放到一個freelist中,而沒有其它包含有任何空閑塊的freelists出現。
?D、freelist參數應該設置為表格同時更新的最大值。例如,如果在任何時候,某個表最多有20個用戶執行插入的操作,那么該表的參數應該設置為freelists=20。
應記住的是freelist groups參數的值只是對于Oracle Parallel Server和Real ApplicationClusters才是有用的。對于這類Oracle,freelist groups應該設置為訪問該表格的Oracle ParallelServer實例的數目。
2.3、其他常用參數
1)、包括SGA區(系統全局區):系統全局區(SGA)是一個分配給Oracle 的包含一個 Oracle 實例的數據庫的控制信息內存段。
主要包括數據庫高速緩存(the database buffer cache),
重演日志緩存(the redo log buffer),
共享池(the shared pool),
數據字典緩存(the data dictionary cache)以及其它各方面的信息
2)、db_block_buffers(數據高速緩沖區)訪問過的數據都放在這一片內存區域,該參數越大,Oracle在內存中找到相同數據的可能性就越大,也即加快了查詢速度。
3)、share_pool_size (SQL共享緩沖池):該參數是庫高速緩存和數據字典的高速緩存。
4)、Log_buffer (重演日志緩沖區)
5)、sort_area_size(排序區)
6)、processes (同時連接的進程數)
7)、db_block_size (數據庫塊大小):Oracle默認塊為2KB,太小了,因為如果我們有一個8KB的數據,則2KB塊的數據庫要讀4次盤,才能讀完,而8KB塊的數據庫只要1次就讀完了,大大減少了I/O操作。數據庫安裝完成后,就不能再改變db_block_size的值了,只能重新建立數據庫并且建庫時,要選擇手工安裝數據庫。
8)、open_links (同時打開的鏈接數)
9)、dml_locks
10)、open_cursors (打開光標數)
11)、dbwr_io_slaves (后臺寫進程數)
第三 就是SDE的性能
3.1、ESRI要求安裝SDE for Oracle時的一些推薦參數設置。
?A、Control files
對于Oracle來說至少需要有三份Control Files。分布在物理分離的磁盤上。
?B、Redo logs
ESRI要求Oracle數據庫至少有3份redo logs。ESRI 建議不要使用 NONARCHIVELOG作為默認的log類別.
?C、SYSTEM tablespace
把system表空間存儲在一個低-中等活動的磁盤上。不要用System表空間作為數據存儲空間,
同時也不要用SDE表空間存儲空間數據。
?D、Undo tablespace
對于多版本地理數據庫來說,需要增大undo_pool的大小;或者新建一個獨立的roolback tablespace。
?E、Temp tablespace
把temp空間和一些高IO的表空間放在一起。
3.2、數據文件位置
A、 redo log 文件 -- 獨立的磁盤
B、 undo tablespace 與redo log 文件分離 頻繁的操作
C、 system tablespace 中-低 IO操作,與其他高IO的文件放置在一起.
D、 按照預定的IO程度,放置ArcSDE的Table 和INDEX表空間.
E、 Spatial Index Table 根本不讀取table 只讀取Index.
3.3、創建SDE過程中的參數
1. 設置oracle的db_block_size為 16kb;
2. 創建業務表的存儲表空間,和index的存儲表空間,注意 一定一定 要分離 index表空間 和 table 表空間到不同的物理磁盤上;
3. 修改dbtune.sde參數;
4. SDE 用戶的的log文件,如果設置sessionlogpoolsize大于0的話,就會創建sde的log 文件。
5. 設置oracle的memory
首先 內存不能swap ;
其次 SGA不能超過RAM的2/3 .High degree of paging 是GPA過大的結果;
6. Swap space (Virtual Memory)
Swap space至少是3-4倍于RAM.
7. Redo log buffer
如果cpu少于4個,則設置512kb*cpu個數,否則設置128kb*cpu個數
測試:Select name,value from v$sysstat where name in(‘redoentries’,’redo log space requests’) 如果比值大于1:5000 則需要增加redolog buffer 的數值.
? Shared pool
一般設置16Mb 可以適應大多數的應用。esri 推薦設置成128MB 或 200MB.
? Buffer cache
SGA_memory = RAM *0.66
Buffer_cache = (SGA_memory-(share_pool size +log_buffer size))*0.9
Db_block_buffer = Buffer_cache/ Db_block_size;
Esri 推薦至少是16kb
? 設置PGA空間
設置 workarea_size_policy =auto
Pga_aggregate_target = RAM *0.16
? 如果數據庫服務器只運行一個instance 設置 pre_sage_pga=true;
? 可選擇:安裝oracle startup trigger
$SDEHOME/tools/oracle arcsde_database_startup.sql 清除由于系統
? 創建ArcSDE數據庫時一定要用OLTP 模板,不能使用數據倉庫模板。
8、更新 sde featrue class 的stastistics
在catalog 中 右鍵 analyze 分析 圖層;
Command line :
Sdetable –o update_dbms_stats – t –m compute –u–p
3.4、Dbtune.sde 的參數
默認情況下 index表空間 與table表空間相同。
修改的話,直接修改,再導入即可。
如 對于一個 feature class 的存儲參數為:
B_STORAGE "PCTFREE 0 INITRANS 4"
# TABLESPACE<default business table tablespace name>
修改成
B_STORAGE "PCTFREE 0 INITRANS 4"
TABLESPACEndextablespace
對于一個 feature class 來說,導入ArcSDE數據庫后,會產生3個table 和 7個index。至于這些表的結構和日后的使用,我在這里不做太多介紹。但是對于圖象顯示來講,S表的大小起到了至關重要的作用。
3.4、空間索引的重建
我們知道SDE存儲空間圖形的方式為,Binery方式直接存儲。
這樣對于一個 S 表,里面以feature ID 為序列,存儲著構成這個Feature ID 的所有切割圖形。
這里面涉及到的一個問題就是 這個所謂的(Grid Size )切割比例,到底用多大的比例來切割存儲才能達到最好的數據庫效果。
先簡單說明一下,這個分隔比例的影響:
如果分隔比例過大,如5000*5000,則一快圖象中會存儲著多個記錄。
缺點1:這樣以記錄為序的S表,會存儲著許多的冗余信息。因為每一個Feature Class均存儲了這個圖象。
缺點2:在desktop 之類客戶端軟件訪問數據庫時,有時只需要顯示一條記錄(放大到記錄),此時ArcSDE必須把一個大的圖形讀取出來,再按照該記錄的大小進行裁減。也消耗性能。
如果分隔比例過小,如50*50 則同一個feature class中的記錄會有很多個圖象組成。
缺點1:分隔比例小,導致每個記錄均由多個圖象組成,大大增加了數據庫存儲的記錄數,增大了存儲空間。
缺點2:分隔比例小,在顯示一個記錄時,需要讀取多條記錄,再拼接在一起進行顯示。
綜上所講,無論過大,或者過小 都會影響存儲和性能。
在使用ArcCatalog或者SDE 命令行導入數據時,ArcCatalog 或SDE會自動計算出一個合適的分隔存儲比例。這個默認的比例一般情況下會比較合適,但因為ArcSDE支持三級分隔比例。如果只使用一個默認的分隔比例,ArcSDE性能不會最佳。
在以下的情況下,會產生問題:
A、feature class 中的所有記錄大小不一致時。B、大范圍的記錄時(如河流、道路、邊框)
首先,如果記錄大小不一,計算出來的分隔比例總是不能達到最優。
另外,對于大范圍的記錄,默認分隔比例過小。會導致 Feature Class is read-only mode 。圖層不再可讀。
通過ArcCatalog可以修改Grid Size 的大小。
在《arcsde configuration guide for oracle 》 中詳細介紹了 grid size的設置和調整。另外,
《The Role of Grid Size Optimization in ArcSDE Performance Tuning》
http://gis.esri.com/library/userconf/proc05/papers/pap1858.pdf
也會有所幫助。
完。
ps。說起來簡單,做起來很難。我做過的嘗試有:
1、由RAID代替服務器硬盤;
2、設置LDAP、dbblock-size 等esri推薦的oracle參數;
3、分離table 和index 表空間;
4、重新設置grid size。
另外,如果使用ArcIMS的話,可以用application server 集群和 多spatial server 來提高性能
轉載于:https://www.cnblogs.com/arxive/p/6017442.html
總結
以上是生活随笔為你收集整理的SDE+ORACLE优化配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab 读写其他格式数据文件(ex
- 下一篇: haproxy 参数说明