原文 SDE+ORACLE优化配置

SDE的性能取决于:

首先操作系统的性能;其次是Oracle的性能,再次是SDE的性能。



第一:操作系统,无非是内存、CPU、带宽等。

可以有待提高的地方:第一、硬件升级;

第二、磁盘速度,用RAID集中存储会比服务器硬盘速度快。

第三、做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
来提高性能

SDE+ORACLE优化配置的更多相关文章

  1. Oracle优化总结

    本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案.关键词 ORACLE数据库 环境调整 ...

  2. Oracle优化的几个简单步骤

    数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等.还有的人认为要抓出执行最慢的语句来进行优化.但实际情况 ...

  3. ORACLE 优化

    本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了 ORACLE数据库的优化调整方案. 关键词 ORACLE数据库 环境 ...

  4. eclipse的使用、优化配置

    一.简介 eclipse 可谓是Java开发界的神器,基本占据了大部分的Java开发市场,而且其官方还对其他语言提供支持,如C++,Ruby,JavaScript等等.为 什么使用它?我想离不开下面的 ...

  5. eclipse使用和优化配置

    一.简介 eclipse 可谓是Java开发界的神器,基本占据了大部分的Java开发市场,而且其官方还对其他语言提供支持,如C++,Ruby,JavaScript等等.为 什么使用它?我想离不开下面的 ...

  6. MyEclipse+Weblogic+Oracle+PLSQL配置注意事项

    Weblogic配置详情:<Weblogic安装与配置图文详解>Oracle+PLSQL配置详情:<PL/SQL访问远程Oracle服务器(多种方式)>MyEclipse配置: ...

  7. Oracle优化-SQL_TRACE

    思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...

  8. Eclipse的企业开发时常用快捷键使用、优化配置(博主推荐)

    不多说,直接上干货! 一.简介 eclipse可谓是Java开发界的神器,基本占据了大部分的Java开发市场,而且其官方还对其他语言提供支持,如C++,Ruby,JavaScript等等.为什么使用它 ...

  9. Oracle 优化和性能调整

    分析评价Oracle数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库用户响应时间又可以分为系统服务时间和用户等待时间两项,即:  数据库用户响应时间=系统服务时间+用户等待时间  因此 ...

随机推荐

  1. Selenium FF WebDriver 加载firebug 和设置代理

    首先这次使用的webDriver for Firefox的 由于项目的原因,需要在测试的时候加载Firebug和使用vpn,加载代理 Firefox 加载代理,可以从FF菜单上看,代理分为好几种 我这 ...

  2. Gobblin采集kafka数据

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 找时间记录一下利用Gobblin采集kafka数据的过程,话不多说,进入正题 一.Gobblin ...

  3. html 上传预览图片

    直接上代码了 <!DOCTYPE html> <html><head lang="en"><meta http-equiv="C ...

  4. [bzoj1068]压缩[区间动规]

    看了lujiaxin的blog,感觉自己好浪啊....好难过 刷题的时候不够投入,每种算法都是只写一两道就过去了,这样怎么可能进步嘛 不要总是抱怨时间太少了 都是自己不努力>_< 好啦 看 ...

  5. WCF第一个Demo

    参考文献:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 自己学习的Demo 第一个是控制台宿主服务,第二个是Windows服 ...

  6. cocos2d-x游戏开发系列教程-中国象棋05-开始游戏

    前情回顾 通过CCMainMenu的init函数,已经把所有的按钮,棋子都摆放完毕了,但是这个时候,棋子是不能走动的,只有在开始游戏之后才能移动棋子. 点击

  7. Navicat连接oracle数据出现的oci问题

    为了用navicat操作数据库,我安装了navicat,安装完后可以连接oracle,mysql,sql service,sqlite,所以这个工具非常好用. 但是在连接数据库的时候报错了:" ...

  8. js学习笔记(延时器)

    //setTimeout()   //功能:设置一个延时器   //语法:var timer = window.setTimeout(code,millisec);   //参数: code:是任何合 ...

  9. bash与ksh数组使用

    区别: bash与ksh在数组的使用中,最大的不同在于数组的定义. bash: declare -a arrayname ksh:set -A arrayname 其实,数组不用非要定义,在赋值的时候 ...

  10. windows 比较文件命令--fc

    dos环境下的比较文件命令 win7帮助 D:\test>fc /? 比较两个文件或两个文件集并显示它们之间 的不同 FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LI ...