gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:5626回复:13

ArcSDE for Oracle配置和调整初步

楼主#
更多 发布于:2005-02-16 13:48
  【摘要】由于ArcSDE本身所具有的海量数据存储、多用户并发访问、版本管理、长事务处理等强大优势,在GIS应用系统中引入ArcSDE作为空间数据存储和管理引擎,变得越来越普遍。随着ArcSDE的应用日益广泛,ArcSDE的性能越来越受到关注。本文以Oracle数据库为例,从影响ArcSDE性能的关键环节出发,主要介绍数据库和ArcSDE两个方面的一些基本配置和调整手段。

【关键词】ArcSDE Oracle 配置 调整
<p>
<P> </P>
<P>一、主要内容</P>影响ArcSDE性能的因素很多,但是归根到底包括两个方面,后台的Oracle和ArcSDE的配置。Oracle方面,不仅包含数据库组件大小定义、存储参数等内容,还包括Oracle实例的初始化参数、Oracle统计信息分析等内容。ArcSDE方面包括DBTUNE存储参数、空间索引、以及统计信息更新等方面。作为建立在后台数据库系统之上的空间数据库引擎,ArcSDE的性能很大程度上取决于Oracle的性能状况。换句话说,如果没有良好性能的Oracle系统的支持,就无法建立高效的ArcSDE数据访问引擎。
<p>
<P> 
<P>二、降低Oracle磁盘I/O</P>
<P>典型的Oracle安装方便了数据库安装的过程,但一定不会达到预期的良好性能。没有经过认真配置和调整的Oracle系统不会获得满意的效率。在Oracle系统中,磁盘I/O冲突导致了大多数明显的性能上的瓶颈。除了购买更快的磁盘驱动器和附加的网卡外,问题的解决方法在于平衡文件系统中的磁盘I/O,尽可能将其降至最低,减少进程间I/O等待发生的可能性。</P> 
<p>合理放置数据库组件的参考原则
<p>
<P>如果估算好了数据文件的大小,就可以确定在文件系统中如何放置它们。本段中列举了一些相关的指导,不必完全照搬,因为需要考虑自己磁盘驱动器的数目和大小。这些指导原则上按照其重要程度从大到小进行排序。数据库使用一段时间之后,一种正常的使用模式也就建立了,访问非常频繁的数据文件需要隔离在单独的磁盘上。</P>
<P>分离表和索引 </P>
<P>每次Oracle访问索引来定位到某个记录行时,它必须同时访问表来取出所指向的行。此时如果表和索引存放在同一个磁盘上时,磁头就需要在索引和表之间进行移动。尽可能不要把索引和表存储在同一个表空间中。始终将表的数据文件和索引的数据文件分开存放。当表及其索引的数据块位于同一磁盘驱动器时,这样做可以减少磁头移动的发生。</P>
<P>按照活动性放置文件 </P>
<P>将联机重做日志文件存储在它们自己的磁盘驱动器上。经常进行编辑操作(inserts,updates,or deletes)的Oracle数据库具有非常活跃的联机重做日志文件。将联机重做日志文件和其他也需要频繁进行I/O操作的数据文件从物理上分离是很重要的。只要有可能,将日志文件创建在自己单独的磁盘驱动器上,或者和其他一些相对静态的文件一起存放。在一个经常进行编辑操作的数据库中,就I/O而言,联机重做日志文件是最活跃部分。如果无法将它们安排在自己单独的磁盘驱动器上,就将它们和那些相对I/O操作较少的文件放置在一起。</P>
<P>一定将回滚段数据文件与重做日志文件分离。当数据库被编辑时,回滚段会被经常性地访问。要尽量将这些数据文件和其他活动性强的文件分开存放。这样做能够提高Oracle处理事务的效率。</P>
<P>在索引建立之后,如果SORT_AREA_SIZE参数已经设置为推荐的512KB,ArcSDE就不再使用临时表空间。因此,如果其他的应用程序也同样不使用临时表空间的话,临时表空间可以和其他活动性高的文件放置在一起。</P>
<P>将系统表空间数据文件和其他活动性强的数据文件放置在一起。对系统表空间数据字典表的访问率相对较低,因为它们的数据缓存在共享池(shared pool)和高速缓冲区(buffer cache)中。</P>
<P>根据预期的I/O访问情况放置business表和索引数据文件。如果预期某个特定的数据文件会具有很高的I/O访问,尽量把它单独放置在自己的磁盘驱动器上或者和其他活动性较低或中等的数据文件放置在一起。</P>
<P> 
<P>三、ArcSDE存储参数</P>
<P>和Oracle系统相同,典型的ArcSDE安装过程很方便,但一定不会达到预期的良好性能。没有经过配置和调整的ArcSDE也同样不会获得满意的效率。</P>
<P>DBTUNE表 </P>
<P>如前所述,ArcSDE的性能很大程度上取决于Oracle的效率,那么如何把先前提到的Oracle中减少I/O冲突和瓶颈的原则体现到ArcSDE的配置过程中呢?即如何控制ArcSDE表和索引在Oracle中的的存储配置呢?我们可以通过DBTUNE中定义的存储参数来实现。</P>
<P>ArcSDE从DBTUNT表中读取存储的参数,用来定义ArcSDE表和索引的物理数据参数。这些存储参数按照配置关键字进行分组。当ArcSDE客户端程序创建数据对象(表和索引)时,这些数据对象会被赋予配置关键字。</P>
<P>在ArcSDE之前,配置关键字存储在一个名为“dbtune.sde”的文件中,位于ArcSDE的etc目录中。在执行sdesetupora8*命令时,ArcSDE使用dbtune.sde文件进行存储参数的初始化。配置参数从dbtune.sde文件读出,然后写入DBTUNE数据表。</P>
<P>应该注意到,ArcSDE已经简化了存储的参数。ArcSDE没有为每一个Oracle的存储参数匹配一个相同的ArcSDE参数;ArcSDE的存储参数已经演变为配置的字符串,反应表和索引的整体存储配置。</P>
<P>ArcSDE以前版本的存储参数可以自动转换为新的、更为简化的ArcSDE版本的存储参数。ArcSDE的存储参数保留了Oracle的CREATE TABLE或CREATE INDEX语句中所有存储参数。</P>ArcSDE在安装过程中产生DBTUNE表。如果dbtune.sde文件不存在或者为空,sdesetupora8*就会利用缺省的配置关键字(ArcSDE的最小配置)创建并生成DBTUNE表。在几乎所有的情况下,需要利用指定的存储参数为数据库创建表。
<p>
<P>2、编辑DBTUNE表
<P>尽管可以使用SQL语句来编辑DBTUNE表的内容,比如SQL*Plus,但是ArcSDE中引入的Sdedbtune命令为ArcSDE管理员提供了一种方便的管理和维护DBTUNE表的方式。Sdedbtune命令将DBTUNE表中的记录和ArcSDE etc目录中的文件之间进行导入或者导出。</P>
<P>转出的文件可以在文本编辑器中进行修改(UNIX下的”vi”,或者Windows NT中的”notepad”)。下面的例子中DBTUNE表转出到dbtune.out文件中,而该文件被vi编辑之后再转入到表中:</P>
<P>$ sdedbtune -o export -f dbtune.out -u sde -p fredericton</P>
<P>$ vi dbtune.out</P>
<P>$ sdedbtune -o import -f dbtune.out -u sde -p fredericton -N</P>
<P>sdedbtune管理工具总是转出文件到ArcSDE的etc目录中。不能改变和指定文件的存放位置到别的路径。通过不允许其他目录,可以保证只有ArcSDE管理目录的所有者才能执行sdedbtune命令。</P>
<P>3、DBTUNE修改实例 比如我们已经在Oracle中分别创建了用于存放空间数据的表空间sdedata和用于存放索引的sdeindx表空间,并根据“索引和数据分开存放”的原则,将它们建立在不同的的物理驱动器上。然后,我们可以修改dbtune中default关键字中的参数如下:</P>##DEFAULTS
<p>GEOMETRY_STORAGE "SDEBINARY"
<p>ATTRIBUTE_BINARY "LONGRAW"
<p>B_STORAGE "PCTFREE 10 PCTUSED 90 INITRANS 4 TABLESPACE sdedata
<p>STORAGE (FREELISTS 4 MINEXTENTS 1 PCTINCREASE 0)"
<p>B_INDEX_ROWID "PCTFREE 10 INITRANS 4 TABLESPACE sdeindx
<p>STORAGE (FREELISTS 4 MINEXTENTS 1 PCTINCREASE 0) NOLOGGING"
<p>B_INDEX_SHAPE "PCTFREE 10 INITRANS 4 TABLESPACE sdeindx
<p>STORAGE (FREELISTS 4 MINEXTENTS 1 PCTINCREASE 0) NOLOGGING"
<p>B_INDEX_USER "PCTFREE 10 INITRANS 4 TABLESPACE sdeindx
<p>STORAGE (FREELISTS 4 MINEXTENTS 1 PCTINCREASE 0) NOLOGGING"
<p>………….
<p>在该例中,将business表的数据存放在sdedata表空间中,其他索引存放在sdeindx表空间中。当然,其他存储参数,诸如初始大小、最大值、增长率等都可以根据需要进行调整。
<p> 
<p>
<P>四、ArcSDE空间索引
<P>基本概念 </P>
<P>为了提高空间查询的性能,ArcSDE采用空间索引的机制。是一个覆盖整个要素类的两维索引,类似于一般的道路图上的索引网格。ArcSDE可以赋予三层空间索引网格,每个网格层都具有自己的格网大小。第一层网格为必需,它的格网尺寸最小;而第二和第三层可选,它们的网格可以通过设置为0使之无效。如果有效,第二层网格大小必须至少比第一层网格大三倍,而第三层网格大小也必须至少比第二层网格大三倍。</P>
<P>建立空间索引 </P>
<P>每次向business表添加要素类时,会为它自动创建一个的空间索引。ArcSDE服务器在整个要素类的生命周期内都管理它的空间索引。当插入、更新或者删除要素时,空间索引会被自动更新。load-only模式会禁止空间索引的管理,直到载入数据结束。这种做法充分地提高了载入的性能,并且在大批量载入数据时必不可少。Load-only模式不允许SQL之外的查询操作。</P>
<P>数据载入结束后,返回normal模式,空间索引就可用了。从normal I/O模式到load-only I/O模式的转换会重建空间索引。在normal I/O模式下,插入、更新或者删除要素会更新空间索引。</P>
<P>ArcSDE首先将每个要素的范围覆盖到最低层的网格,获得网格数量。如果要素超过四个格网,ArcSDE将该要素提升到更高层次的网格(如果定义了更高层次的网格)。ArcSDE会一直提升要素到更高层次网格,直到该要素位于四个格网之内或者已到达最高层次的网格水平。在最高一层网格,图形可以被超过四个的格网索引。</P>
<P>ArcSDE将要素的格网和相应的shape ID、和要素范围一起添加到空间索引表中。网格层次和每个格网都进行编码,如下例:该要素类有两个网格层次。面状图形101位于第1层的第4号格网,那么空间索引表中就添加了一条记录,因为该要素在四个格网之内(事实上是一个格网)。面状要素102的范围位于第一层网格的格网1到8中。因为该要素的范围超出了四个格网,所以该要素被提升到第二层,在第二层中它位于两个格网之内。因此,要素102被第二层网格索引,并在空间索引表中添加了2条记录。</P>
<p>
<P>空间查询和空间索引 </P>
<P>空间查询,比如查找某个州边界内的所有湖泊,就会使用空间索引。空间索引会被使用,除非SE_stream_set_spatial_constraints函数中的查找顺序设置为SE_ATTRIBUTE_FIRST。当查找顺序设为SE_ATTRIBUTE_FIRST时,ArcSDE忽略空间索引,而采用属性条件作为where子句查找满足条件的要素类中的记录。当使用空间索引时,ArcSDE通常按照下面的过程执行查询:</P>
<P>定义范围。范围可以之间由应用程序定义,比如ArcMap的zoom in工具定义的范围。此外,范围也可以由其他的要素范围来确定。 </P>
<P>连接(Join)空间索引表和要素表,返回与该范围相交的格网。 </P>
<P>连接(Join)要素表和business表,应用属性条件中的where子句进行更进一步的查询。 </P>
<P>调整空间索引 </P>
<P>格网的大小影响空间索引表的大小。设置空间索引在于寻找格网大小的平衡点—较小的格网会使每个要素对应较多的格网,也就需要空间索引表中的更多记录。由于客户端应用程序和空间数据的特征在各个系统之间差异很大,所以没有单一的适合所有情形的空间索引,有时需要尝试不同的格网大小和网格层次的配置。</P>
<P>sdelayer命令有几个操作选项可以通过改变格网大小和添加新的网格层次优化空间索引(’alter’操作选项)。‘stats’和‘si_stats’操作显示当前空间数据特征和空间索引信息。</P>
<P>如下为一些提高空间查询性能的方法:</P>
<P>考虑需要多少个网格层次,而且记住ArcSDE服务器为每个网格层次扫描一次空间索引表。经常一个网格层次对一个要素类而言就是最好的解决方法,即使认为将几何图形分布在多个不同的网格层次可以减少空间索引表的入口。</P>
<P>对于纯点状类型的要素类,使用一个网格层次,而且考虑增大格网大小。空间查询一般处理点状图形要比其他类型快。</P>
<P>监视空间索引。如果数据经常发生变化,调整空间索引会很困难。调整措施取决于空间数据的结构。当空间数据变化时,定期访问空间索引。</P>
<P>根据具体应用建立空间索引。将应用程序窗口大小和空间索引网格大小相匹配。</P>
<P>对于未知的或者变化的应用程序窗口,开始定义一个网格层次,格网大小为要素平均范围大小的3倍。可以利用如下的查询获得要素的平均大小:</P>
<P>select (avg(emaxx - eminx) + avg(emaxy - eminy)) / 2 from f<N></P>
<P>(where <N> is the layer number of the feature class)</P>
<P>根据数据种类设计要素类,比如类型、几何大小、和分布情况。有时精心设计的要素类会更加充分地提高空间查询的性能。</P>
<P>查看空间索引统计值 </P>
<P>sdelayer命令的空间索引统计操作‘si_stats’,能够有助于确定优化的空间索引网格大小。优化网格大小取决于所有要素几何图形的空间范围、要素几何空间范围的差异、和要对该要素类进行的查询类型。以下是一个si_stats输出的例子:</P>
<P>$ sdelayer -o si_stats -l victoria,parcels -u av -p mo -i sde81</P>
<P>输出结果显示每个网格层次的统计值:</P>
<P>网格层次和格网大小 </P>
<P>当前网格层次总的空间索引记录数 </P>
<P>当前网格层次种存储的图形总数 </P>
<P>每个图形的空间索引比率 </P>
<P>分组的图形数量和百分比。表明图形空间索引在该网格层次如何分组。 </P>
<P>每个网格的图形平均数 </P>
<P>每个网格的最大数量 </P>
<P>完全在一个网格中的图形的百分比 </P>
<P>五、总结
<P>本文并没有涉及所有ArcSDE性能的调整和配置内容,也没有就所有影响其性能的因素进行讨论。本文仅从最关键的磁盘I/O和空间索引等因素出发,介绍了配置和调整的一些关键原则。关于其他因素的配置和调整情况,比如Oracle实例的初始化参数、Oracle数据库组件的大小、Oracle数据库的统计信息更新、以及ArcSDE的其他存储参数,可以参考相关的指南。</P> 
<p>【参考资料】
<p>1.“config_tuning_guide_oracle.pdf”,by ESRI.
<p>2.“Managing ArcSDE services”,by ESRI.
<p>3.“Oracle 8 Advanced Tuning ; Administration”,by Eyal Aronoff,Kevin Loney, Noorali Sonawalla.
<p>4.《Oracle 8性能优化和管理手册》,机械工业出版社,李逸波等译
<p>
喜欢0 评分0
leewj0126
路人甲
路人甲
  • 注册日期2004-08-04
  • 发帖数84
  • QQ44494081
  • 铜币366枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-03-25 20:31
<P>楼主有没有sde 的破解文件啊?</P>
<P><a href="mailtleewj0126@126.com" target="_blank" >leewj0126@126.com</A></P>
<P>谢谢!</P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2005-04-01 13:52
这个在论坛ftp上就有,arcgis版面好象也发过的
举报 回复(0) 喜欢(0)     评分
星期天
论坛版主
论坛版主
  • 注册日期2004-03-16
  • 发帖数1327
  • QQ16940978
  • 铜币655枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-05-28 13:19
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
天天很自由!我想我能……
举报 回复(0) 喜欢(0)     评分
星期天
论坛版主
论坛版主
  • 注册日期2004-03-16
  • 发帖数1327
  • QQ16940978
  • 铜币655枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-05-28 13:20
<img src="images/post/smile/dvbbs/em06.gif" /><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em06.gif" />
天天很自由!我想我能……
举报 回复(0) 喜欢(0)     评分
chi222428
路人甲
路人甲
  • 注册日期2005-04-25
  • 发帖数82
  • QQ
  • 铜币299枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2007-03-06 22:06
<img src="images/post/smile/dvbbs/em02.gif" />
天地不仁,以万物为刍狗; 圣人不仁,以百姓为刍狗。
举报 回复(0) 喜欢(0)     评分
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2007-03-08 19:44
谢楼主<img src="images/post/smile/dvbbs/em06.gif" />
举报 回复(0) 喜欢(0)     评分
mingkof
路人甲
路人甲
  • 注册日期2006-01-01
  • 发帖数73
  • QQ
  • 铜币408枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2007-03-21 19:44
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2007-03-27 13:04
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
chi222428
路人甲
路人甲
  • 注册日期2005-04-25
  • 发帖数82
  • QQ
  • 铜币299枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2007-04-04 21:57
太好了,正要的
天地不仁,以万物为刍狗; 圣人不仁,以百姓为刍狗。
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部