SDE的性能取决于:
首先操作系统的性能;其次是Oracle的性能,再次是SDE的性能。
第一:操作系统,无非是内存、CPU、带宽等。
可以有待提高的地方:第一、硬件升级;
第二、磁盘速度,用RAID集中存储会比服务器硬盘速度快。
第三、做LB,负载均衡。比如可以用Orcle
RAC。
第二: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
da
ta
segment
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"的free
block。
?B、表格中chained rows的出现意味着pctfree太低或者是db_block_size太少。在很多情况下,RAW和LONG
RAW列都很巨大,以至超过了Oracle的最大块的大小,这时chained
rows是不可以避免的。
?C、如果一个表有同时插入的SQL语句,那么它需要有同时删除的语句。运行单一个一个清除的工作将会把全部的空闲块放到一个freelist中,而没有其它包含有任何空闲块的freelists出现。
?D、freelist参数应该设置为表格同时更新的最大值。例如,如果在任何时候,某个表最多有20个用户执行插入的操作,那么该表的参数应该设置为freelists=20。
应记住的是freelist groups参数的值只是对于Oracle
Parallel
Server和Real
Application
Clusters才是有用的。对于这类Oracle,freelist
groups应该设置为访问该表格的Oracle
Parallel
Server实例的数目。
2.3、其他常用参数
1)、包括SGA区(系统全局区):系统全局区(SGA)是一个分配给Oracle 的包含一个
Oracle
实例的数据库的控制信息内存段。
主要包括数据库高速缓存(the
database
buffer
cache),
重演日志缓存(the
redo
log
buffer),
共享池(the
shared
pool),
数据字典缓存(the
da
ta
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(‘redo
entries’,’redo
log
space
requests’)
如果比值大于1:5000
则需要增加redo
log
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"
TABLESPACE
ndextablespace
对于一个 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-on
ly
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
来提高性能
首先操作系统的性能;其次是Oracle的性能,再次是SDE的性能。
第一:操作系统,无非是内存、CPU、带宽等。
可以有待提高的地方:第一、硬件升级;
第二:Oracle的性能
Oracle可以调优的地方就太多了,有时数据库服务器本身硬件很好,但是oracle的参数设置不够好,Oracle也不能很好地发挥服务器的硬件性能。
我本身对Oracle只是入门水平,也就简单地给点建议:
2.1、OS的参数设置
内核参数名
bufpages
create_fastlinks
dbc_max_pct
dbc_min_pct
desfree
fs_async
lotsfree
maxdsiz
Maxdsiz_64bit
Maxssiz
maxssiz_64bit
Maxtsiz
maxtsiz_64bit
Minfree
Shmem
Shmmax
Timeslice
unlockable_mem
2.2、Oracle的竞争
让我们来回顾一下设置对象存储参数的一些常见规则:
?A、经常将pctused设置为可以接收一条新行。对于不能接受一行的free
?B、表格中chained
?C、如果一个表有同时插入的SQL语句,那么它需要有同时删除的语句。运行单一个一个清除的工作将会把全部的空闲块放到一个freelist中,而没有其它包含有任何空闲块的freelists出现。
?D、freelist参数应该设置为表格同时更新的最大值。例如,如果在任何时候,某个表最多有20个用户执行插入的操作,那么该表的参数应该设置为freelists=20。
应记住的是freelist
2.3、其他常用参数
1)、包括SGA区(系统全局区):系统全局区(SGA)是一个分配给Oracle
2)、db_block_buffers(数据高速缓冲区)访问过的数据都放在这一片内存区域,该参数越大,Oracle在内存中找到相同数据的可能性就越大,也即加快了查询速度。
3)、share_pool_size
4)、Log_buffer
5)、sort_area_size(排序区)
6)、processes
7)、db_block_size
8)、open_links
9)、dml_locks
10)、open_cursors
11)、dbwr_io_slaves
第三
3.1、ESRI要求安装SDE
?A、Control
对于Oracle来说至少需要有三份Control
?B、Redo
ESRI要求Oracle数据库至少有3份redo
?C、SYSTEM
把system表空间存储在一个低-中等活动的磁盘上。不要用System表空间作为数据存储空间,
同时也不要用SDE表空间存储空间数据。
?D、Undo
对于多版本地理数据库来说,需要增大undo_pool的大小;或者新建一个独立的roolback
?E、Temp
把temp空间和一些高IO的表空间放在一起。
3.2、数据文件位置
A、
B、
C、
D、
E、
3.3、创建SDE过程中的参数
1.
2.
3.
4.
5.
其次
6.
Swap
7.
如果cpu少于4个,则设置512kb*cpu个数,否则设置128kb*cpu个数
测试:Select
?
一般设置16Mb
?
SGA_memory
Buffer_cache
Db_block_buffer
Esri
?
设置
Pga_aggregate_target
?
?
$SDEHOME/tools/oracle
?
8、更新
在catalog
Command
Sdetable
3.4、Dbtune.sde
默认情况下
修改的话,直接修改,再导入即可。
如
B_STORAGE
#
修改成
B_STORAGE
对于一个
3.4、空间索引的重建
我们知道SDE存储空间图形的方式为,Binery方式直接存储。
这样对于一个
这里面涉及到的一个问题就是
先简单说明一下,这个分隔比例的影响:
如果分隔比例过大,如5000*5000,则一快图象中会存储着多个记录。
缺点1:这样以记录为序的S表,会存储着许多的冗余信息。因为每一个Feature
缺点2:在desktop
如果分隔比例过小,如50*50
缺点1:分隔比例小,导致每个记录均由多个图象组成,大大增加了数据库存储的记录数,增大了存储空间。
缺点2:分隔比例小,在显示一个记录时,需要读取多条记录,再拼接在一起进行显示。
综上所讲,无论过大,或者过小
在使用ArcCatalog或者SDE
在以下的情况下,会产生问题:
A、feature
首先,如果记录大小不一,计算出来的分隔比例总是不能达到最优。
另外,对于大范围的记录,默认分隔比例过小。会导致
通过ArcCatalog可以修改Grid
在《arcsde
《The
http://gis.esri.com/library/userconf/proc05/papers/pap1858.pdf
也会有所帮助。
完。
ps。说起来简单,做起来很难。我做过的尝试有:
1、由RAID代替服务器硬盘;
2、设置LDAP、dbblock-size
3、分离table
4、重新设置grid
另外,如果使用ArcIMS的话,可以用application