欢迎来到天天文库
浏览记录
ID:55149696
大小:28.00 KB
页数:5页
时间:2020-04-29
《浅谈数据库系统内存优化分配策略.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、浅谈数据库系统内存优化分配策略 [摘要]本文主要介绍Oracle数据库的内存组成,各部分内存如何分配与优化,包括SGA区、PGA区等。 [关键词]Oracle数据库;内存分配;内存优化 doi:10.3969/j.issn.1673-0194.2017.13.064 [中图分类号]TP311.13[文献标识码]A[文章编号]1673-019413-0152-03 1数据库系统介绍 数据库技术产生于20世纪60年代末70年代初,其主要目的是有效地管理和存取大量的数据资源,研究如何存储,使用和管理数据。数年来,
2、数据库技术发展迅速,应用广泛。数据库技术不仅应用于事务处理,并且进一步应用到情报检索、人工智能、专家系统、计算机辅助设计等领域。 Oracle数据库系统是Oracle公司于1979年发布的世界上第一个关系数据库管理系统。经过30多年的发展,Oracle公司也成为当今世界上最大的数据库厂商和最大的商用软件供应商,Oracle数据库系统已经应用于各个领域,是当前市场占有率最高的数据库产品,约为49%。在当今世界500强企业中,70%的企业使用的是Oracle数据库,世界十大B2C公司全部使用Oracle数据库,世界十大B
3、2B公司中有9家使用的是Oracle数据库。 2Oracle数据库内存基本组成 Oracle数据库系统的内存包括两部分:SGA和PGA。SGA即SystemGlobalArea系统全局区。一个数据库实例对应一个SGA,SGA在数据库实例启动的时候被分配。SGA作为数据库实例的基本组成,是一个非常大的内存空间,甚至可以占据物理内存的80%。PGA即ProgramGlobalArea程序全局区。一个服务进程启动的时候就会分配一个PGA。在OracleInstance中PGA可能会很多,例如启动10个ServerProc
4、ess就��有10个PGA。 Oracle数据库系统的使用场景一般为管理海量数据,而数据都是存储在磁盘上的,为了提高存储、访问的效率,那么Oracle必然会在内存中开辟一块很大的内存区域。因此,Oracle是一个比较耗费内存的软件,且大多消耗在SGA上。SGA的大小是可以配置的,随着数据库的负载加大,数据库实例对内存的需求加大,那么SGA也会扩张甚至会把整个内存都消耗掉。因此,如何科学的分配Oracle数据库系统的内存区对于数据库系统来说是一个至关重要的问题。 3Oracle数据库内存优化 3.1SGA区的内存分
5、配管理 SGA包含以下几大块的基本内存:SharedPool、DatabaseBufferCache、RedoLogBuffer、LargePool、JavaPool。其中SharedPool、DatabaseBufferCache、RedoLogBuffer是核心的内存区域,LargePool和JavaPool是可选的。 SharedPool的主要作用是存储SQL解析后的内容。例如:发出一个SQL语句或命令让数据库执行,SQL在数据库内部就需要被解析,建立执行计划,然后按照执行计划去执行,每个SQL语句都要被解析
6、成原始操作去执行,解析好的SQL语句都会存储在共享池中。在OracleInstance中SharedPool非常重要,它关系到数据库的性能,共享池包含两块共享内存,这两块共享内存关系到数据库的性能。 LibraryCache中存储的是经过编译解析后的SQL和PL/SQL语句的内容。如果下次在执行同样的SQL语句的时候,就不需要解析了,立即从LibraryCache中获取执行。LibraryCache的SIZE决定着编译解析SQL语句的频度,从而决定了性能。 DataDictionary就是存储着数据库的控制信息。为
7、了提高访问DataDictionary的速度,此时需要一个缓存,需要的时候访问内存即可。DataDictionaryCache里面的信息包含了databasefiles、tables、indexes、columns、users、privileges和其他的数据库对象。数据字典是使用最频繁的,几乎所有的操作都需要到数据字典去查询,它的大小是由SharedPool来决定的。 DatabaseBufferCache的任务主要是用于存储数据文件中的数据,在Oracle中数据是存储在磁盘上的,但访问磁盘中的数据速度又会很慢,那
8、么就需要将其中一部分的数据放入到内存中,提升访问的速度。例如一个用户去访问一个表里面的记录时,数据库接收到这个请求后,他首先会在这个缓存中查找是否存在该数据库表的记录,如果有,则直接从内存中读取该记录返回给用户,否则只能去磁盘上去读取。很显然,如果希望性能提高就需要提升Cache的命中率。DatabaseBufferCache中存
此文档下载收益归作者所有