




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、修改oracle系统参数建库时选择手工建库,设置db_block_size=16k (一旦建库,无法修改)alter system set sga_max_size=1640M scope=spfile;(Total physical RAM *80%*50%)alter system set sga_target=1640M scope=spfile;alter system set pga_aggregate_target=650M scope=spfile;(Total physical RAM *80%*20%)alter system set pre_page_sga=true scope=spfile;alter system set shared_pool_size=128M scope=spfile;alter system set open_cursors=2000 scope=spfile;alter system set session_cached_cursors=50 scope=spfile;alter system set cursor_sharing=exact scope=spfile;alter system set cursor_space_for_time=true scope=spfile;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 data segment size for 64_bitMaxssiz 加大最大堆栈段的大小。(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。lB、表格中chained rows的出现意味着pctfree太低或者是db_block_size太少。在很多情况下,RAW和LONG RAW列都很巨大,以至超过了Oracle的最大块的大小,这时chained rows是不可以避免的。lC、如果一个表有同时插入的SQL语句,那么它需要有同时删除的语句。运行单一个一个清除的工作将会把全部的空闲块放到一个freelist中,而没有其它包含有任何空闲块的freelists出现。lD、freelist参数应该设置为表格同时更新的最大值。例如,如果在任何时候,某个表最多有20个用户执行插入的操作,那么该表的参数应该设置为freelists=20。l应记住的是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 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 filesl对于Oracle来说至少需要有三份Control Files。分布在物理分离的磁盘上。B、Redo logslESRI要求Oracle数据库至少有3份redo logs。ESRI 建议不要使用 NONARCHIVELOG作为默认的log类别.C、SYSTEM tablespacel把system表空间存储在一个低-中等活动的磁盘上。不要用System表空间作为数据存储空间,同时也不要用SDE表空间存储空间数据。D、Undo tablespacel对于多版本地理数据库来说,需要增大undo_pool的大小;或者新建一个独立的roolback tablespace。E、Temp tablespacel把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 pooll 一般设置16Mb 可以适应大多数的应用。esri 推荐设置成128MB 或 200MB. Buffer cachelSGA_memory RAM *0.66Buffer_cache (SGA_memory-(share_pool size +log_buffer size)*0.9Db_block_buffer = Buffer_cache/ Db_block_size;Esri 推荐至少是16kb 设置PGA空间l设置 workarea_size_policy =autoPga_aggregate_target = RAM *0.16 如果数据库服务器只运行一个instance 设置 pre_sage_pga= true;l 可选择:安装oracle startup triggerl$SDEHOME/tools/oracle arcsde_database_startup.sql 清除由于系统 创建ArcSDE数据库时一定要用OLTP 模板,不能使用数据仓库模板。l8、更新 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 修改成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 readonly mode 。图层不再可读。通过ArcCatalog可以修改Grid Size 的大小。在arcsde configuration guide for oracle 中详细介绍了 grid size的设置和调整。另外,The Role of Grid Size Optimization in ArcSDE Performance Tuning/library/userconf/proc05/papers/pap1858.pdf也会有所帮助。完。ps。说起来简单,做起来很难。我做过的尝试有:1、由RAID代替服务器硬盘;2、设置LDAP、dbblocksize 等esri推荐的oracle参数;3、分离table 和index 表空间;4、重新设置grid size。另外,如果使用ArcIMS的话,可以用application server 集群和 多spatial server 来提高性能。北方数慧系统技术有限公司 杜海军概述:基于ArcSDE+Oracle的GIS系统,有的时候硬件配置很高档,系统运行依然效率低下。本文主要讨论如何调整系统架构、数据库、ArcSDE来发挥出硬件的性能,提高应用开发程序的运行效率。 系统环境:ArcSDE9.1 for Oracle10g + Oracle10gXEOracle参数设置Oracle块大小数据库块大小(db_block_size)16K 32K,Windows下的32位oracle只允许最大16K。SGA大小数据缓冲池(db_cache_size),尽量大,最好能加载所有数据,减少磁盘IO,不过不能完全依赖该参数,尽量通过优化SQL语句解决问题,大约使用服务器物理内存的1/2左右,arcsde官方推荐至少512M。如果需要oracle的建议,参看v$db_cache_advice视图,或者使用oem的可视化界面。一般认为至少要保证数据访问的90%的命中率。将SGA预装到物理内存中,即设置PRE_PAGE_SGA=yes。共享池(shared_pool_size)至少128M,如果程序中使用大量存储过程需要适当调大,推荐到达200M。Shared_pool_reserved默认的共享池的5%可能需要调整,200M*5%=5M太大了。java池和大型池针对arcsde的oltp(联机事务处理)型系统来说不需要。Redo日志缓冲区大小512K或者128K*cpu数目。这些参数的大小,根据oracle的v$视图去调整。对于oracle10g最好使用自动内存管理,简化对内存参数的配置。PGA大小大小可以设置为(物理内存-操作系统占用内存-其他应用占用的内存)*20%。设置PGA_AGGREGATE_TARGET的大小为PGA的80%,WORKSPACE_POLICY参数为AUTO,Oracle自动分配客户连接内存,不使用SORT_AREA_SIZE,HASH_AREA_SIZE参数设置的大小。表空间使用本地表空间管理。数据表表空间和索引表空间的分离。临时表空间不要太小,至少500M左右。表空间使用自动空间管理,消除了自由空间列表的需求,可以减少数据库的竞争。数据库控制文件、日志文件、归档文件、数据文件、临时文件、索引等最好放在不同的硬盘,减少io消耗。游标参数Open_cursors尽量设置大些,例如2000+。Session_cached_cursors设置为50+。cursor_space_for_time设置为TRUE。cursor_sharing设置为exact。优化器参数optimizer_modefirst_rows (1 or 10) or all_rows,OLTP系统为获取最佳响应时间可以使用fist_rows,需要大量数据汇总等批量操作的话可以设置为all_rows。该参数可以根据系统当前的主要工作情况来决定。优化查询必须修改的两个参数,使用如下两个参数的数据库默认数值一定有问题。Optimizer_index_cost_adj=20 ,设置索引的成本和全表扫描的成本比为1:5。optimizer_index_caching=80,设置索引数据的缓存命中率为80%。这两个参数需要根据系统运行情况分析设置,以上设置适合大部分的OLTP系统。把程序包固定到共享池,不交换保留大的对象在shared pool中。大的对象是造成内存碎片的主要原因,为了腾出空间许多小对象需要移出内存,从而影响了用户的性能。因此需要将一些常用的大的对象保留在shared pool中。需要把SDE模式下的arcsde自身的plsql程序包固定到共享池,我们开发的程序包也要固定到共享池。管理序列修改序列的缓存数值。并把序列固定到共享池。索引和统计量监视索引新增、删除、更新等操作导致索引产生碎片,需要定期重建索引。如果需要创建位图索引的话,需要根据需要设置create_bitmap_area_size的大小,其中oracle标准版不支持位图索引的功能。如果在sql查询中使用了upper、length、substr等oracle内置或者我们写的函数,需要在相关字段建立函数索引,其他的索引无效,并把QUERY_REWRITE_ENABLED设置为true。尽量减少不必要的索引,有些多字段都需要的索引,根据需要尽量使用组合索引。索引越多,数据库更新操作越慢。删除未使用过的索引,可以降低DML操作的成本,从而提升系统性能。统计量基于成本的优化器在生成执行计划的时候需要表和索引的统计量信息,否则生成的执行计划不是最优的。使用ANALYZE命令或者DBMS_STATS包,Oracle推荐使用DBMS_STATS包,该包能获取的统计信息全面。监视全表扫描尽量减少全表扫描。使用V$视图监视全表扫描的发生。合理的DB_FILE_MULTIBLOCK_READ_COUNT能减少table scan需要调用的IO次数,提高性能(与OS相关),但是可能增加全表扫描发生的概率。可以设置oracle一次IO读取的块数为32,该参数比较适合普通的OLTP和OLAP系统,需要注意的是本参数设置的越大,优化器越倾向于使用全部表扫描。监视排序操作避免发生在临时表空间的排序操作,否则需要提高sort_area_size的数值。如果使用了自动内存分配的话,需要增加Pga_aggregate_target的数值。版本管理版本资料库表arcsde使用STATES 和 STATE_LINEAGES 表记录版本状态和父子关系信息。A和D表记录要素的变化信息。我们需要通过Oracle任务定期更新这两个表的统计信息和定期重建索引。state_lineages是Index Organized Table (IOT)。定期压缩版本压缩可以提高查询的速度,减少逻辑IO,最好每天晚上执行压缩版本的操作,sdeversion o compress -N。dbtune参数中的compress_rollback_segment设置为最大表的10%+。如果使用了undo表空间的话,需要删除此参数,否则会出现错误,arcsde9屏蔽了该错误,并可以继续进行。压缩之前获取B,A, D, states, state_lineages 这些表的统计信息,加快压缩速度。数据压缩后可以truncate 增量表,重新设置表的高水位标记,优化更新操作。压缩后如果数据发生移动,重建索引和统计信息。应用程序优化应用系统结构主要优化SQL语句的编写和系统结构设计,其中SQL语句导致系统性能问题的可能性比较大。绑定变量Arcsde9.2自动绑定变量。在我们系统使用的sql语句中最好使用绑定变量。如果我们写的存储过程使用了动态SQL语句,则需要使用绑定变量,静态SQL语句自动绑定变量。当前被执行的语句和共享池中的语句必须完全相同,包括字符、大小写、空格,否则不能使用共享池中的SQL语句。性能故障检查Oracle的Trace文件阅读trace文件使用tkprof命令。SQL trace 工具收集正在执行的SQL的性能状态数据并记录到一个跟踪文件中. 这个跟踪文件提供了许多有用的信息,例如解析次数.执行次数,CPU使用时间等.这些数据将可以用来优化系统。Statspack收集系统运行的快照,分析系统的缺点。通过系统快照,可以获取oracle实例信息、实例的效率百分比、前五个等待事件的详细信息、所有等待事件的列表、当前共享池中的SQL语句信息、实例的活动统计信息、表空间信息和文件IO信息、缓冲池的统计信息、回滚和撤消段信息、数据库锁信息、字典和库缓存信息、SGA分配状况、实例init.ora参数信息、Top Sql排序。需要设置timed_statistics=true,获取实例的时时统计信息。oracle事件 通过V$Event_name视图来查看数据库事件信息。v$system_event所有的连接的等待事件。v$session_eventv$session_wait常用语句调整视图v$sgastatv$librarycachev$sqlv$sqlareav$sqltextv$db_object_cachev$sql_plan显示sql语句的执行计划和成本。需要运行/ORACLE_HOME/rdbms/admin/utlxplan.sql,在当前用户SQL下运行,它创建一个plan_table,用来存储分析SQL语句的结果。在SQL/PLUS的窗口运行以下命令 set autotrace 接下来可运行测试SQL语句,看到其分析统计结果了。Arcsde技巧DBTUNE参数修改ArcSDE缓冲参数MINBUFSIZE MAXBUFSIZE,例如MINBUFSIZE 409600 # minimum buffer size 4096MAXBUFSIZE 819200 # maximum buffer size MINBUFSIZEArcgis9.1需要修改系统表server_config,其中arcsde许可文件信息也是从该表读取。空间索引对于数据不规则的应用,建立3级空间索引提高空间查询的效率。格网大小为要素平均范围大小的3倍,具体的数值需要在实践中调整。空间数据存储方式长二进制字段(默认)BLOBOracleSpatial的SDE_GEOMETRY总结尽可能多的分析表、获取统计量,建立相应的oracle任务。经常重建索引,尤其是states, state_lineages, delta tables这些表,因为在压缩版本之前,主要是这些表发生变化,并建立相应的任务。数据库表结构尽可能简单,减少表之间连接查询的频率。监视你的系统,调整那些消耗大量资源、长时间操作的进程。尽可能频繁的压缩数据库版本,减少逻辑IO。Oracle Tuning (Oracle 性能调整)的一些总结 1关于Oracle的性能调整,一般包括两个方面,一是指Oracle数据库本身的调整,比如SGA、PGA的优化设置,二是连接Oracle的应用程序以及SQL语句的优化。做好这两个方面的优化,就可以使一套完整的Oracle应用系统处于良好的运行状态。 本文主要是把一些Oracle Tuning的文章作了一个简单的总结,力求以实际可操作为目的,配合讲解部分理论知识,使大部分具有一般Oracle知识的使用者能够对Oracle Tuning有所了解,并且能够根据实际情况对某些参数进行调整。关于更加详细的知识,请参见本文结束部分所提及的推荐书籍,同时由于该话题内容太多且复 杂,本文必定有失之偏颇甚至错误的地方,请不吝赐教,并共同进步。1. SGA的设置 在Oracle Tuning中,对SGA的设置是关键。SGA,是指Shared Global Area , 或者是 System Global Area , 称为共享全局区或者系统全局区,结构如下图所示。 对于SGA区域内的内存来说,是共享的、全局的,在UNIX 上,必须为oracle 设置共享内存段(可以是一个或者多个),因为oracle 在UNIX上是多进程;而在WINDOWS上oracle是单进程(多个线程),所以不用设置共享内存段。1.1 SGA的各个组成部分下面用 sqlplus 查询举例看一下 SGA 各个组成部分的情况:SQL select * from vsga;NAME VALUE- -Fixed Size 104936Variable Size 823164928Database Buffers 1073741824Redo Buffers 172032或者SQL show sgaTotal System Global Area 1897183720 bytesFixed Size 104936 bytesVariable Size 823164928 bytesDatabase Buffers 1073741824 bytesRedo Buffers 172032 bytesFixed Size oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了SGA 各部分组件的信息,可以看作引导建立SGA的区域。Variable Size 包含了shared_pool_size、java_pool_size、large_pool_size 等内存设置Database Buffers 指数据缓冲区,在8i 中包含db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三部分内存。在9i 中包含db_cache_size、db_keep_cache_size、db_recycle_cache_size、 db_nk_cache_size。Redo Buffers 指日志缓冲区,log_buffer。在这里要额外说明一点的是,对于vparameter、vsgastat、vsga查询值可能不一样。v parameter 里面的值,是指用户在初始化参数文件里面设置的值,vsgastat是oracle 实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以block 为最小单位进行分配的),vsga 里面查询的值,是在oracle 分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小是8k(不同环境可能不一样)。参考如下内容SQL select substr(name,1,10) name,substr(value,1,10) value 2 from vparameter where name = log_buffer;NAME VALUE- -log_buffer 163840SQL select * from vsgastat where pool is null;POOL NAME BYTES- - - fixed_sga 104936 db_block_buffers 1073741824 log_buffer 163840SQL select * from vsga;NAME VALUE- -Fixed Size 104936Variable Size 823164928Database Buffers 1073741824Redo Buffers 172032172032 163840 = 8192(以上试验数据是在 HP B.11.11 + Oracle 环境下得到的)1.2 SGA的大小设置 在对SGA的结构进行简单分析以后,下面是关于如何根据系统的情况正确设置SGA大小的问题。SGA是一块内存区域,占用的是系统物理内存,因此对于一个Oracle应用系统来说,SGA决不是越大越好,这就需要寻找一个系统优化的平衡点。1.2.1 设置参数前的准备在设置SGA的内存参数之前,我们首先要问自己几个问题一:物理内存多大二:操作系统估计需要使用多少内存三:数据库是使用文件系统还是裸设备四:有多少并发连接五:应用是OLTP 类型还是OLAP 类型根据这几个问题的答案,我们可以粗略地为系统估计一下内存设置。那我们现在来逐个问题地讨论,首先物理内存多大是最容易回答的一个问题,然后操作系统估计使用多少内存呢?从经验上看,不会太多,通常应该在200M 以内(不包含大量进程PCB)。接 下来我们要探讨一个重要的问题,那就是关于文件系统和裸设备的问题,这往往容易被我们所忽略。操作系统对于文件系统,使用了大量的buffer 来缓存操作系统块。这样当数据库获取数据块的时候,虽然SGA 中没有命中,但却实际上可能是从操作系统的文件缓存中获取的。而假如数据库和操作系统支持异步IO,则实际上当数据库写进程DBWR写磁盘时,操作系统在 文件缓存中标记该块为延迟写,等到真正地写入磁盘之后,操作系统才通知DBWR写磁盘完成。对于这部分文件缓存,所需要的内存可能比较大,作为保守的估 计,我们应该考虑在 0.20.3 倍内存大小。但是如果我们使用的是裸设备,则不考虑这部分缓存的问题。这样的情况下SGA就有调大的机会。关 于数据库有多少并发连接,这实际上关系到PGA 的大小(MTS 下还有large_pool_size)。事实上这个问题应该说还跟OLTP 类型或者OLAP 类型相关。对于OLTP类型oracle 倾向于可使用MTS,对于OLAP 类型使用独立模式,同时OLAP 还可能涉及到大量的排序操作的查询,这些都影响到我们内存的使用。那么所有的问题综合起来,实际上主要反映在UGA的大小上。UGA主要包含以下部分内存 设置SQL show parameters area_sizeNAME TYPE VALUE- - -bitmap_merge_area_size integer 1048576create_bitmap_area_size integer 8388608hash_area_size integer 131072sort_area_size integer 65536SQL在这部分内存中我们最关注的通常是sort_area_size,这是当查询需要排序的时候,数据库会话将使用这部分内存进行排序,当内存大小不足的时候,使用临时表空间进行磁盘排序。由于磁盘排序效率和内存排序效率相差好几个数量级,所以这个参数的设置很重要。当 出现大量排序时的磁盘I/O操作时,可以考虑增加sort_area_size的值。sort_area_size是Oracle用于一次排序所需的最大 内存数,在排序结束但是结果列返回之前,Oracle会释放sort_area_size大小的内存,但是会保留 sort_area_retained_size大小的内存,知道最后一行结果列返回以后,才释放所有的内存。会导致排序的语句有 SELECT DISTINCT , MINUS , INTERSECT , UNION 和 min()、max()、count() 操作;而不会导致排序的语句有 UPDATE , 带BETWEEN子句的SELECT 等等。这 四个参数都是针对会话进行设置的,是单个会话使用的内存的大小,而不是整个数据库使用的。偶尔会看见有人误解了这个参数以为是整个数据库使用的大小,这是 极其严重的错误。假如设置了MTS,则UGA被分配在large_pool_size,也就是说放在了共享内存里面,不同进程(线程)之间可以共享这部分 内存。在这个基础上,我们假设数据库存在并发执行server process 为100 个,根据上面我们4 个参数在oracle8.1.7 下的默认值,我们来计算独立模式下PGA 的大致大小。由于会话并不会经常使用create_bitmap_area_size 、bitmap_merge_area_size,所以我们通常不对四个参数求和。在考虑到除这四个参数外会话所保存的变量、堆栈等信息,我们估计为 2M,则200 个进程最大可能使用200M 的PGA。1.2.2 一个经验公式 现在,根据上面这些假定,我们来看SGA 实际能达到多少内存。在1G 的内存的服务器上,我们能分配给SGA 的内存大约为400500M。若是2G 的内存,大约可以分到1G的内存给SGA,8G 的内存可以分到5G的内存给SGA。当然我们这里是以默认的排序部分内存sort_area_size=64k进行衡量的,假如我们需要调大该参数和 hash_area_size等参数,然后我们应该根据并发的进程的数量,来衡量考虑这个问题。事实上,通常我们更习惯通过直观的公式化来表达这样的问题:OS 使用内存+SGA+并发执行进程数*(sort_area_size+hash_ara_size+2M) 0.7*总内存(公式是死的,系统是活的,实际应用的调整不必框公式,这不过是一个参考建议)在我们的实际应用中,假如采用的是裸设备,我们可适当的增大SGA(如果需要的话)。由于目前几乎所有的操作系统都使用虚拟缓存,所以实际上如果就 算SGA 设置的比较大也不会导致错误,而是可能出现频繁的内存页的换入与换出(page in/out)。在操作系统一级如果观察到这个现象,那么我们就需要调整内存的设置。1.2.3 各个参数的设置那么SGA中的各个参数具体应该按照什么样的原则来设置呢,下面进行讨论:log_buffer对于日志缓冲区的大小设置,通常我觉得没有过多的建议,因为参考LGWR写的触发条件之后,我们会发现通常超过3M意义不是很大。作为一个正式系统,可能考虑先设置这部分为log_buffer=13M 大小,然后针对具体情况再调整。large_pool_size对 于大缓冲池的设置,假如不使用MTS,建议在2030M 足够了。这部分主要用来保存并行查询时候的一些信息,还有就是RMAN 在备份的时候可能会使用到。如果设置了MTS,则由于UGA部分要移入这里,则需要具体根据session最大数量和 sort_ares_size 等相关会话内存参数的设置来综合考虑这部分大小的设置,一般可以考虑为 session * (sort_area_size + 2M)。这里要提醒一点,不是必须使用MTS,我们都不主张使用MTS,尤其同时在线用户数小于500的情况下。java_pool_size假如数据库没有使用JAVA,我们通常认为保留1020M大小足够了。事实上可以更少,甚至最少只需要32k,但具体跟安装数据库的时候的组件相关(比如http server)。shared_pool_size这 是迄今为止最具有争议的一部分内存设置。按照很多文档的描述,这部分内容应该几乎和数据缓冲区差不多大小。但实际上情况却不是这样的。首先我们要考究一个 问题,那就是这部分内存的作用,它是为了缓存已经被解析过的SQL,而使其能被重用,不再解析。这样做的原因是因为,对于一个新的SQL (shared_pool 里面不存在已经解析的可用的相同的SQL),数据库将执行硬解析,这是一个很消耗资源的过程。而若已经存在,则进行的仅仅是软分析(在共享池中寻找相同 SQL),这样消耗的资源大大减少。所以我们期望能多共享一些SQL,并且如果该参数设置不够大,经常会出现ora-04031错误,表示为了解析新的 SQL,没有可用的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云梯车安全施工方案范文
- 轻质隔音墙施工方案
- 内蒙古乌兰察布市2025年-2026年小学六年级数学课后作业(下学期)试卷及答案
- 江西省抚州市2025年-2026年小学六年级数学课后作业(上学期)试卷及答案
- 2025年医疗技术研讨会试题及答案集
- 2025年制造业企业招聘生产管理人员面试模拟题集
- 安徽省黄山市2025年-2026年小学六年级数学期末考试(下学期)试卷及答案
- 河北省廊坊市2025年-2026年小学六年级数学期末考试(下学期)试卷及答案
- Unit 1 Understanding ideas 教学设计-2020年秋高中英语外研版(2019)必修一
- 第14课《诗词三首》说课稿 2024-2025学年统编版语文九年级上册
- 《少数民族地区易地扶贫搬迁的问题与优化策略》11000字(论文)
- 餐饮业食品安全管理操作规程
- 压疮的应急预案及流程
- 高效养殖技术推广方案
- 外包生产合同模板
- 高三英语一轮复习备考实践经验分享 课件
- 小学五年级体育教案全册(人教版)
- 【课件】开启科学探索之旅人教版物理八年级上学期
- 永州市2025年高考第一次模拟考试 化学试卷(含答案)
- 光伏发电项目运维合同
- 2024版劳务合同范本
评论
0/150
提交评论