文档库 最新最全的文档下载
当前位置:文档库 › oracle 大页内存官方blog

oracle 大页内存官方blog

oracle 大页内存官方blog
oracle 大页内存官方blog

在Linux 64位系统下使用hugepage

By Feng on 二月 25, 2013

首先,为什么要介绍/使用HugePage?

在步入正题之前,先讲一个非常普遍的数据库性能问题。

众所周知,Oracle数据库使用共享内存(SGA)来管理可以共享的一些资源;比如shared pool中存储了共享的SQL语句及执行计划,buffer pool中存储了数据块。对这些资源的访问,其实就是Oracle使用OS的API来访问内存资源的过程。内存操作理应/通常意义上都是很快的,这时候Oracle数据库可以很正常的工作。

但是

a)如果SGA内的某一部分被swap到硬盘上,那么再次访问它,就需要花非常多的时间

b)如果OS本身的内存非常的大,那么管理/访问到我们需要的内存的过程就需要更长时间。

在这些情况下,我们往往会碰到诸如latch/mutex/library cache

lock[pin]/row cache lock的问题.

Linux下HugePage 可以解决由以上两种问题引发的性能波动。

我们知道,在Linux 64位系统里面,默认内存是以4K的页面(Page)来管理的,当系统有非常多的内存的时候,管理这些内存的消耗就比较大;而HugePage使用2M大小的页面来减小管理开销。HugePage管理的内存并不能被Swap,这就避免了swap引发的数据库性能问题。所以,如果您的系统经常碰到因为swap引发的性能问题的系统毫无疑问需要启用HugePage。另外,OS内存非常大的系统也需要启用HugePage。但是具体多大就一定需要使用HugePage?这并没有定论,有些文档曾经提到12G以上就推荐开启,我们强烈建议您在测试环境进行了充分的测试之后,再决定是否在生产环境应用HugePage。

当然,任何事情都是有两面性的,HugePage也有些小缺点。第一个缺点是它需要额外配置,但是这完全是可以忽略的。另外,如果使用了HugePage,11g新特性 AMM(Automatic Memory Management)就不能使用了,但是ASMM(Automatic Shared Memory Management)仍然可以继续使用。

接下来,我们对配置HugePage需要完成的步骤进行介绍。以下步骤以RHEL5为例。

a)设置memlock的限制,更改/etc/security/limits.conf加入下面的行

注意上面的数字是以 K 为单位的,可以让它的值稍微比系统的物理内存小就可以了

b)检查memlock是否生效,要使用oracle的用户执行下面的操作,如果没有生

效尝试重新登陆系统

c)如果使用11g数据库,确认参数MEMORY_TARGET和MEMORY_MAX_TARGET已经

设为0

d)启动数据库,并运行Document

401749.1提供的脚本来计算应该分配多少HugePage页面。例如:

e)更改/etc/sysctl.conf,把上一步得到的值指定给vm.nr_hugepages参数

f)重启数据库和OS。

g)验证HugePage是否已启用

如下图,HugePage一共分配了1496个页面,其中有6个页面为Free,那么使用了1490个页面,每个页面为2048K.

最后,如果您想了解更多的和HugePage相关的问题,请参考以下的note。

Note 361323.1 : HugePages on Linux: What It

Is... and What It Is Not...

Note 361468.1 : HugePages on Oracle Linux

64-bit

关于这个主题,如果有后续的问题欢迎点击链接参与我们在中文社区的讨论。

oracle实例内存解析

一、名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 (2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)。共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。 (3)缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。 (4)大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。 (5)Java池:Java Pool为Java命令的语法分析提供服务。 (6)PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存。 二、分析与调整 (1)系统全局域: SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/3到1/2。 a.共享池Shared Pool: 查看共享池大小Sql代码 SQL>show parameter shared_pool_size 查看共享SQL区的使用率: Sql代码 select(sum(pins-reloads))/sum(pins)"Library cache"from v$librarycache; --动态性能表 LIBRARY命中率应该在90%以上,否则需要增加共享池的大小。

基于Oracle的OLTP与OLAP数据库优化差异之内存设计

基于Oracle的OLTP与OLAP数据库优化差异之内存设计要进行数据库优化,首先应该弄清数据库类型及其特点。从数据处理角度分类,数据库可分为两大类:联机事务处理OLTP(on-line transaction processing)和联机分析处理OLAP(On-Line Analytical Processing),OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易,电信业务等。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 两类系统处理的数据量不同,技术的使用也是不一样的,在OLTP系统中,oracle、db2等是主流数据库产品,数据量在几个TB甚至更小。在OLAP系统中,除了传统的数据库外,有越来越多的其他数据库产品出现,如sysbase IQ,GP,国产数据库GBase 8a,达梦7等,数据量大多在几十TB甚至更高,数据处理主要集中在查询统计分析、大数据量的导入导出等。在这里,我们主要讨论的还是最通用的ORACLE数据库的两类系统的优化思路和方式的差异。 数据库具体是OLTP还是OLAP取决于你的业务类型。OLTP和OLAP两类系统对数据库要求截然不同。除了系统本身自有的特点之外,在技术方面也存在巨大的差别,所带来的优化技术和理念也不太一样。 OLTP主要是交易型数据库,其事务特征为高并发而数据量小,大部分情况都要求瞬间出结果,系统要求的实时性、稳定性、安全性较高。这类数据库的系统瓶颈主要在CPU和内存上,在优化思路上,更加关注CPU的利用率;各种命中率指标,譬如SHARED POOL, BUFFER CACHE的命中率;SQL语句绑定变量等。由于数据量相对比较小,因此OLTP大部分都是集中式的。 OLAP主要是分析型数据库,并发量比较小,但单个sql消耗巨大,大部分查询需要处理海量数据,用户对响应时间的要求远不如OLTP用户。由于数据量巨大,这类数据库的系统瓶颈主要在磁盘io上,一些传统的优化指标和手段,如SHARED POOL, BUFFER CACHE 的命中率等对OLAP型数据库意义不大,而分区,并行操作,压缩,物化视图,全文索引等技术可能都会在OLAP中体现。OLAP库基本都是上TB的,有的是几百TB,甚至PB,因此很多OLAP库可能都分成了N个库,以便于分布式处理。OLAP一般都是采用星星模式或者雪花模式的。 下面从内存设计的优化角度具体分析一下这两类系统优化手段的差异: 内存设计通常是通过调整ORACLE内存参数来实现的。oracle的内存可分为SGA(shared global area)共享全局区和PGA(program global area)进程全局区两部分。OLTP系统由于处理的事务为高并发且数据量小,SGA比PGA更为重要;OLAP系统处理的事务数据量大且并发量比较小,大部分查询可能运行一次可能很久不会在运行,SQL的重用意义不大,很多命中率指标对于OLAP也影响较小处理,因此SGA相对次要,而较多大数据的排序,HASH操作都需要在PGA完成,PGA大小直接决定了处理效率。 尽管从oracle 10g开始,oracle已经减少了对内存命中率的关注,转而通过工作时间(CPU时间或服务时间)和等待工作时所消耗的时间(等待时间)来分析系统的性能,但对一个OLTP库来说,库缓存命中率(Library hit)和数据缓冲区命中率(buffer hit)仍是极重要的指标。OLTP系统是一个SQL执行非常密集的系统,Library hit命中率低说明共享池里很多SQL不能重用,需要重新解析,这会大大增加CPU负荷,降低系统性能,影响SQL 执行效率。使用绑定变量是减少硬解析,提高库缓存命中率的有效手段。

Oracle数据库实例及其相关概念

Oracle数据库实例及其相关概念2010-11-24 00:00 出处:中国IT实验室作者:佚名 完整的Oracle数据库通常由两部分组成:Oracle数据库实例和数据库。 用数据库安全策略防止权限升级攻击 C++虚函数的显式声明 完整的Oracle数据库通常由两部分组成:Oracle数据库实例和数据库。 1)数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等); 2)Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区。 在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这个Oracle数据库实例来访问和控制磁盘中的数据文件。Oracle有一个很大的内存快,成为全局区(SGA)。 一、数据库、表空间、数据文件 1.数据库 数据库是数据集合。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。 通常情况了我们称的“数据库”,并不仅指物理的数据集合,他包含物理数据、数据库管理系统。也即物理数据、内存、操作系统进程的组合体。 数据库的数据存储在表中。数据的关系由列来定义,即通常我们讲的字段,每个列都有一个列名。数据以行(我们通常称为记录)的方式存储在表中。表之间可以相互关联。以上就是关系模型数据库的一个最简单的描述。

当然,Oracle也是提供对面象对象型的结构数据库的最强大支持,对象既可以与其它对象建立关系,也可以包含其它对象。关于OO型数据库,以后利用专门的篇幅来讨论。一般情况下我们的讨论都基于关系模型。 2.表空间、文件 无论关系结构还是OO结构,Oracle数据库都将其数据存储在文件中。数据库结构提供对数据文件的逻辑映射,允许不同类型的数据分开存储。这些逻辑划分称作表空间。 表空间(tablespace)是数据库的逻辑划分,每个数据库至少有一个表空间(称作SYSTEM表空间)。为了便于管理和提高运行效率,可以使用一些附加表空间来划分用户和应用程序。例如:USER表空间供一般用户使用,RBS表空间供回滚段使用。一个表空间只能属于一个数据库。 每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。在Oracle7.2以后,数据文件创建可以改变大小。创建新的表空间需要创建新的数据文件。数据文件一旦加入到表空间中,就不能从这个表空间中移走,也不能与其它表空间发生联系。 如果数据库存储在多个表空间中,可以将它们各自的数据文件存放在不同磁盘上来对其进行物理分割。在规划和协调数据库I/O请求的方法中,上述的数据分割是一种很重要的方法。 3.Oracle数据库的存储结构分为逻辑存储结构和物理存储结构: 1)逻辑存储结构:用于描述Oracle内部组织和管理数据的方式; 2)物理存储结构:用于描述Oracle外部即操作系统中组织和管理数据的方式。 二、Oracle数据库实例

2020年(Oracle管理)Oracle SQL性能优化方法

(Oracle管理)Oracle SQL性能优化方法

OracleSQL性能优化方法探讨 Oracle性能优化方法(SQL篇)1 1综述2 2表分区的应用2 3访问Table的方式3 4共享SQL语句3 5选择最有效率的表名顺序5 6WHERE子句中的连接顺序.6 7SELECT子句中避免使用’*’6 8减少访问数据库的次数6 9使用DECODE函数来减少处理时间7 10整合简单,无关联的数据库访问8 11删除重复记录8 12用TRUNCATE替代DELETE9 13尽量多使用COMMIT9 14计算记录条数9 15用Where子句替换HAVING子句9 16减少对表的查询10 17通过内部函数提高SQL效率.11 18使用表的别名(Alias)12 19用EXISTS替代IN12 20用NOT EXISTS替代NOT IN13 21识别低效执行的SQL语句13

22使用TKPROF 工具来查询SQL性能状态14 23用EXPLAIN PLAN 分析SQL语句14 24实时批量的处理16

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要经过反反复复的过程。在数据库建立时,就能根据应用的需要合理设计分配表空间以及存储参数、内存使用初始化参数,对以后的数据库性能有很大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积累经验,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用问题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来说明对数据库性能如何进行优化。 2表分区的应用 对于海量数据的表,可以考虑建立分区以提高操作效率。建立分区一般以关键字为分区的标志,也可以以其他字段作为分区的标志,但效率不如关键字高。建立分区的语句在建表时可以进行说明: createtableTABLENAME() partitionbyrange(PutOutNo) (partitionPART1valueslessthan(200312319999) partitionPART2valueslessthan(200412319999)

Oracle内存全面分析

Oracle 内存内存全面全面全面分析分析 作者作者::fuyuncat 来源来源::https://www.wendangku.net/doc/7510332655.html, 作者简介 黄玮,男,99年开始从事DBA 工作,有多年的水利、军工、电信及航 运行业大型数据库Oracle 开发、设计和维护经验。 曾供职于南方某著名电信设备制造商——H 公司。期间,作为DB 组 长,负责设计、开发和维护彩铃业务的数据库系统。目前,H 公司的彩铃系 统是世界上终端用户最多的彩铃系统。最终用户数过亿。 目前供职于某世界著名物流公司,负责公司的电子物流系统的数据库开 发、维护工作。 msn: fuyuncat@https://www.wendangku.net/doc/7510332655.html, Email :fuyuncat@https://www.wendangku.net/doc/7510332655.html, Oracle 的内存配置与oracle 性能息息相关。而且关于内存的错误(如4030、4031错 误)都是十分令人头疼的问题。可以说,关于内存的配置,是最影响Oracle 性能的配 置。内存还直接影响到其他两个重要资源的消耗:CPU 和IO。 首先,看看Oracle 内存存储的主要内容是什么: ? 程序代码(PLSQL、Java); ? 关于已经连接的会话的信息,包括当前所有活动和非活动会话; ? 程序运行时必须的相关信息,例如查询计划; ? Oracle 进程之间共享的信息和相互交流的信息,例如锁; ? 那些被永久存储在外围存储介质上,被cache 在内存中的数据(如redo log 条 目,数据块)。 此外,需要记住的一点是,Oracle 的内存是与实例对应的。也就是说,一个实例就有 一个独立的内存结构。 先从Oracle 内存的组成架构介绍。 1. Oracle 的内存架构组成 Oracle 的内存,从总体上讲,可以分为两大块:共享部分(主要是SGA)和进程独享 部分(主要是PGA 和UGA)。而这两部分内存里面,根据功能不同,还分为不同内存池 (Pool)和内存区(Area)。下面就是Oracle 内存构成框架图:

oracle实例内存详解

一、名词解释 (1)SGA:SystemGlobal Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 (2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Librarycache(共享SQL区)和Datadictionarycache(数据字典缓冲区)。共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。 (3)缓冲区高速缓存:DatabaseBufferCache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。 (4)大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。 (5)Java池:Java Pool为Java命令的语法分析提供服务。 (6)PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存。 二、分析与调整 (1)系统全局域: SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/3到1/2。 a.共享池Shared Pool: 查看共享池大小Sql代码 SQL>show parameter shared_pool_size 查看共享SQL区的使用率: Sql代码 select(sum(pins-reloads))/sum(pins)"Library cache"from v$librarycache; --动态性能表 LIBRARY命中率应该在90%以上,否则需要增加共享池的大小。 查看数据字典缓冲区的使用率:

oracle内存pga+sga设置方法

11g 中新增MEMORY_MAX_TARGET 参数,此参数一出现就如在10g 中第一次出现SGA_MAX_SIZE 参数一样给人以耳目一新的感觉。memory_max_target 是设定Oracle能占OS多大的内存空间,一个是Oracle SGA 区最大能占多大内存空间。无疑在11g Oracle 又向自动管理内存更进一步。 10g 的sga_max_size 是动态分配 Shared Pool Size,database buffer cache,large pool,java pool,redo log buffer 大小的,只是根据Oracle 运行状况来重新分配SGA 各内存块的大小。PGA在10g 中需要单独设定. 11g MEMORY_MAX_TARGET 参数包含两部分内存,一个 System global area (SGA),另一个 system global area(PGA)。很显然在11g 中可已经将PGA 和SGA 一 起动态管理了。 下面来看看在11g 中Memory_target 设置和不设置对SGA/PGA 的影响: A:如果Memory_target 设置为非0 值 (下面有四种情况来对SGA 和PGA 的大小进行分配) 1:sga_target 和 pga_aggregate_target 已经设置大小如果Oracle 中已经设置了参数sga_target 和pga_aggregate_target,则这两个参数将各自被分配为最小值最为它们的目标值。 Memory_Target =SGA_TARGET+PGA_AGGREGATE_TARGET ,大小 和 memory_max_size 一致。 2:sga_target 设置大小, pga_aggregate_target 没有设置大小那么pga_aggregate_target初始化值=memory_target-sga_target 3:sga_target 没有设置大小, pga_aggregate_target 设置大小那么sga_target 初始化值=memory_target-pga_aggregate_target 4:sga_target 和 pga_aggregate_target 都没有设置大小 Oracle 11g 中对这种sga_target 和pga_aggregate_target 都没有设定大小的情况下,Oracle将对这两个值没有最小值和默认值。 Oracle 将根据数据库运行状况进行分配大小。 但在数据库启动是会有一个固定比例来分配: sga_target =memory_target *60% pga_aggregate_target=memory_target *40% B:如果Memory_target 没有设置或=0 (在11g 中默认为0) 11g 中默认为0 则初始状态下取消了Memory_target 的作用,完全和10g 在内存管理上一致,完全向下兼容。 (也有三种情况来对SGA 和PGA 的大小进行分配)

Oracle 内存分配与调整.

Oracle 内存分配与调整 一、前言 对于oracle 的内存的管理,截止到9iR2,都是相当重要的环节,管理不善,将可能给数据库带来严重的性能问题。下面我们将一步一步就内存管理的各个方面进行探讨。 二、概述 oracle 的内存可以按照共享和私有的角度分为系统全局区和进程全局区,也就是SGA 和PGA(process global area or private global area 。对于SGA 区域内的内存来说,是共享的全局的,在UNIX 上,必须为oracle 设置共享内存段(可以是一个或者多个,因为oracle 在UNIX 上是多进程;而在WINDOWS 上oracle 是单进程(多个线程,所以不用设置共享内存段。PGA 是属于进程(线程私有的区域。在oracle 使用共享服务器模式下(MTS,PGA 中的一部分,也就是UGA 会被放入共享内存 large_pool_size 中。对于SGA 部分,我们通过sqlplus 中查询可以看到: SQL> select * from v$sga; NAME V ALUE Fixed Size 454032 Variable Size 109051904 Database Buffers 385875968 Redo Buffers 667648 其中: Fixed 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 。在这里要额外说明一点的是,对于v$parameter 、 v$sgastat 、v$sga 查询值可能不一样。v$parameter 里面的值,是指用户在初始化参 数文件里面设置的值,v$sgastat 是oracle 实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以block 为最小单位进行分配的, v$sga 里面查询的值,是在oracle 分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小大约是11k(不同环境可能不一样。参考如下内容 SQL> select substr(name,1,10 name,substr(value,1,10 value 2 from v$parameter where name = 'log_buffer'; NAME V ALUE log_buffer 524288 SQL> select * from v$sgastat ; POOL NAME BYTES fixed_sga 454032

ORACLE内存调整建议

ABC公司Oracle数据库参数调整建议 1.Oracle参数initdb.ora (修改建议) 目前系统现在分析: (1)Windows 2003可以显示50G内存,但操作系统是32位,最多默认支持4G,用户进程支持2G,Oracle可能支持1.7G内存; (2)不清楚是否对操作系统做过支持大内存的调整;从下表的参数分析,可能没有修改; (3)不清楚此系统Windows是否允许在虚拟环境(Virtual Machine),故保守起见,我们的建议是:把内存往小里调整。 根据我们的经验,对Oracle数据库调整如下: 总内存控制在1.5G SGA控制在800M PGA使用700M testdb.__db_cache_size=469762048 testdb.__java_pool_size=8388608 testdb.__large_pool_size=8388608 testdb.__oracle_base='D:\app\Administrator'#ORACLE_BASE set from environment testdb.__pga_aggregate_target= 734003200 #700M #671088640 testdb.__sga_target=838860800 #800M #1249902592 testdb.__shared_io_pool_size=0 testdb.__shared_pool_size= 335544320 #320M #738197504 testdb.__streams_pool_size=8388608 *.audit_file_dest='D:\app\Administrator\admin\xbrldb\adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='E:\data\xbrldb\control01.ctl','D:\app\Administrator\flash_recovery_ area\xbrldb\control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='xbrldb' *.db_recovery_file_dest='D:\app\Administrator\flash_recovery_area' *.db_recovery_file_dest_size=21474836480 *.diagnostic_dest='D:\app\Administrator' *.dispatchers='(PROTOCOL=TCP) (SERVICE=xbrldbXDB)' *.fast_start_mttr_target=30 *.job_queue_processes=1000 testdb.local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(H OST=10.24.58.100)(PORT=1531))))' *.log_archive_format='ARC%S_%R.%T' *.memory_target= 1610612736 #1.5G#1916796928

一分钟查一个案例带你看看Oracle数据库到底有多牛逼性能难题

一分钟查一个案例带你看看Oracle数据库到底有多牛逼 性能难题 问题来了 电话响了,是一位证券客户 DBA 的来电,看来,问题没过两天,又出现了。 接起电话,果不其然。 “小y,前天那个问题又重现了。重启后恢复正常,这次抓到了hangAnalyze,不过领导在身后一直催,所以没来得及抓取 systemstate dump 就重启了。你尽快帮忙分析下吧,hanganalyze 的 trace 文件 已经转到你邮箱了。” 就在 2 天前,该客户找到小 y, 他们有一套比较重要的系统出现了数据库无法登陆的情况,导致业务中断,重启后业务恢复,但原因未明,搞的他们压力很大。 可惜的是,他们是事后找过来,由于客户现场保护意识不足,最后也只能是巧妇难为无米之炊了… 总的来说,小 y 还算是比较熟悉证券行业的。 毕竟,小 y 多年来一直在银行、证券、航空等客户提供数据库专家支持服务,这其中就包括了北京 排名前 6 的所有证券公司。 简而言之,证券行业的要求就是快速恢复,快速恢复业务大于一切。 原因很简单,股价瞬息万变,作为股民,如果当时无法出售或者购买股票,甚至可能引发官司。所以,证券核心交易系统如果中断时间超过 5 分钟,则可以算得上是严重故障了,一旦被投诉,则可能会 被证监会通报,届时业务可能被降级,影响到证券公司的经营和收益。 结合这个特点,小 y 为客户制定了应急预案,看来收集 systemstate dump 是来不及了,只能先 收集 hangAnalyze, 时间来得及的话则可以继续收集 systemstate dump。收集 hangAnalyze 的命令 很简单,照敲就是了,没什么技术含量。 $sqlplus –prelim “/as sysdba” SQL>oradebug setmypid SQL>oradebug hanganalyze 3 .. 此处等上一会 .. SQL>oradebug hanganalyze 3 SQL>oradebug tracefile_name

Oracle数据库实例的内存和进程结构

Oracle数据库实例的内存和进程结构 更新: 2010-04-27来源: 互联网字体:【大中小】 内存结构 在Oracle数据库系统中内存结构主要分为系统全局区(SGA)和程序全局区(PGA)。 SGA随着数据库实例的启动向操作系统申请分配一块内存结构,随着数据库实例的关闭释放,每一个Oracle数据库实例有且只有一个SGA。 PGA随着Oracle服务进程启动的时候申请分配的一块内存结构。如果在共享服务结构中PGA存在SGA 中。 下图展示Oracle的内存结构,在后面我们将用文字详细的表述各个部件。 系统全局区(SGA) 重要提示,提高SGA的大小可以在一定程度上提高Oracle数据库系统的性能,但你设置SGA的值如果不能锁定在内存物理页上,有些部分可能被交换到系统的交换文件中。这样你的Oracle数据库系统将变慢。 系统全局区是一组包含数据和控制信息的共享内存结构,允许Oracle服务的众多后台进程同时访问或修改其中的数据,所以有些时候也被称为―全局共享区‖,参数文件中的SGA_MAX_SIZE指定SGA动态大小。※共享池SharedPool ※数据高速缓存DatabaseBufferCache ※重做日志缓存RedoLogBufferCache ※ Java池(可选)JavaPool ※大缓冲池(可选)LagerPool 共享池 共享池存储了最近多数使用的执行SQL语句和最近使用的数据定义。它包含库高速缓存器和数据字典缓存器这两个与性能相关的内存结构。共享池的大小可以通过初始化参数文件(通常为init.ora)中的SHARED_POOL_SIZE决定。共享池是活动非常频繁的内存结构,会产生大量的内存碎片,所以你要确保它尽可能足够大。 库高速缓存器,他又包含共享SQL区和共享PL/SQL区两个组件区。为了提高SQL语句的性能,在提交SQL语句或PL/SQL程序块时Oracle服务器将先利用最近最少使用(LRU)算法检查库高速缓存中是否存在相同的SQL语句或PL/SQL程序块,若有则使用原有的分析树和执行路径。 数据字典缓存器,它收集最近使用的数据库中的数据定义信息。它包含数据文件、表、索引、列、用户、访问权限、其他数据库对象等信息。在分析阶段决定数据库对象的可访问信息。利用数据字典缓存器有效的改善了响应时间。它的大小由共享池的大小决定。 数据高速缓存 它存储数据文件中数据块的拷贝。利用这种结构使数据的更新操作性能大大的提高。数据高速缓存中的数据交换同样采用最近最少使用算法(LRU)。它的大小主要受到DB_BLOCK_SIZE决定。数据高速缓存它由DB_CACHE_SIZE、DB_KEEP_CACHE_SIZE、 DB_RECYCLE_CACHE_SIZE这些独立的子缓存器构成,同时它能动态的增长或收缩。 重做日志缓存

修改Oracle 11g 内存

修改Oracle 11g 内存 分类:Oracle Database 2011-12-16 18:49 910人阅读评论(0) 收藏举报oracleintegersystemsqlbic https://www.wendangku.net/doc/7510332655.html,/tswisdom/article/details/7078477 [oracle@bi11g bin]$ ./sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on Fri Dec 1618:39:36 2011 Copyright (c) 1982, 2009, Oracle. All rights reserved. SQL> conn / as sysdba Connected. SQL> show parameter memory NAME TYPE VALUE ------------------------------------ ----------------------------------------- hi_shared_memory_address integer 0 memory_max_target big integer 1584M memory_target big integer 1584M shared_memory_address integer 0 SQL> alter system set memory_target = 512M scope=spfile 2 ; System altered. SQL> alter system set memory_max_target =1024Mscope=spfile 2 ; System altered. SQL> show parameter memory NAME TYPE VALUE ------------------------------------ ----------------------------------------- hi_shared_memory_address integer 0

oracle12c 内存数据库(IN-MEMORY)使用手册

启动Oracle数据库12c的第1版(12.1.0.2),在内存中的列存储(IM列存储)是存储表和分区的副本进行快速扫描优化的特殊柱状格式可选,静态SGA池。在IM列存储不更换缓存,但作为一个补充,使这两个存储区可存储不同格式相同的数据。默认情况下,仅使用DDL 对象指定的inmemory的候选人将填充在IM列存储。 柱状格式只存在于内存中。图14-8显示了存储在IM列存储SH模式三个表:客户,产品和销售。在IM列存储通过柱,而不是行存储数据。该数据库保持柱状数据缓冲区高速缓存事务一致性。 本节包含了以下主题: 在IM列存储的好处 双存储格式:纵栏和行 在内存中的列存储的人口 在内存列压缩 扫描优化的IM列存储 在IM列存储的好处 在IM列存储使得数据库进行扫描,联接和聚合时相比,它使用的磁盘格式完全快得多。特别是,对于IM列存储是很有用的: 扫描行数和应用使用运营商,如=过滤器,<,>,和IN 查询列的子集在表中,例如,选择5 100的列 加快加入通过将小维表谓词到过滤器上的一个大的事实表 业务应用,即席分析查询和数据仓库工作负载受益最大。执行使用索引查找短事务纯OLTP 数据库中受益较少. 在IM列存储还具有以下优点: 所有现有的数据库功能都支持,包括高可用性功能(参见“高可用性概述”)。 没有应用程序的改变是必需的。 优化器会自动柱状格式的优势。 配置简单。 该INMEMORY_SIZE初始化参数指定的内存预留供IM列存储的使用量。DDL语句指定表空间,表,分区或列被读入IM列存储。 压缩优化的查询性能。 这些压缩技术通过使会话读取更多的数据到内存中增加有效的内存带宽。 更少的索引,物化视图和OLAP多维数据集是必需的。

配置Oracle内存

对oracle的内存(SGA和PGA)进行调整,优化数据库性 一、示例: SGA: 共享池:200MB 缓冲区高速缓存:24MB 大型池:9MB Java池:32MB SAG总容量:264.933 SAG的最大大小:305.069 PGA: 总记PGA目标:240MB 分配的当前PGA:8914KB 分配的最大PGA(自启动以来)9081KB 高速缓存命中百分比:100% PGA和SGA的和应小于系统内存总量前去操作系统和其他应用程序所需内存后得到的值。 二、名词解释: SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配; 系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。 共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义, 主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区) 共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息 缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能 大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境

Java池:ava Pool为Java命令的语法分析提供服务 PGA:Program Global Area是为每个连接到Oracle database的用户进程保留的内存。 三、分析与调整: 1、系统全局域: SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/2到1/3,当然,如果服务器上只有oracle的话, 可以分配的更大一些,如果还有其他服务,如IIS等,那就要分的小一些。 1、共享池: 修改共享池的大小,ALTER SYSTEM SET SHARED_POOL_SIZE = 64M; 查看共享SQL区的使用率: select(sum(pins-reloads))/sum(pins) "Library cache" from v$librarycache;--动态性能表 这个使用率应该在90%以上,否则需要增加共享池的大小。 查看数据字典缓冲区的使用率: select (sum(gets-getmisses-usage-fixed))/sum(gets) "Data dictionary cache" from v$rowcache;--动态性能表 这个使用率也应该在90%以上,否则需要增加共享池的大小。 2、缓冲区高速缓存: 它的大小要根据数据量来决定: SGA=((db_block_buffers * block size)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB 查看数据库数据缓冲区的使用情况: SELECT name,value FROM v$sysstat order by name WHERE name IN(''DB BLOCK GETS'',''CONSISTENT GETS'',''PHYSICAL READS''); 计算出来数据缓冲区的使用命中率=1-(physical reads/(db block gets+consistent gets)),这个命中率应该在90%以上,否则需要 增加数据缓冲区的大小。

全面分析Oracle数据库的内存配置

Oracle内存全面分析(1) 作者:fuyuncat 来源:https://www.wendangku.net/doc/7510332655.html, Oracle的内存配置与oracle性能息息相关。而且关于内存的错误(如4030、4031错误)都是十分令人头疼的问题。可以说,关于内存的配置,是最影响Oracle性能的配置。内存还直接影响到其他两个重要资源的消耗:CPU 和IO。 首先,看看Oracle内存存储的主要内容是什么: ?程序代码(PLSQL、Java); ?关于已经连接的会话的信息,包括当前所有活动和非活动会话; ?程序运行时必须的相关信息,例如查询计划; ?Oracle进程之间共享的信息和相互交流的信息,例如锁; ?那些被永久存储在外围存储介质上,被cache在内存中的数据(如redo log条目,数据块)。 此外,需要记住的一点是,Oracle的内存是与实例对应的。也就是说,一个实例就有一个独立的内存结构。 先从Oracle内存的组成架构介绍。

1.Oracle的内存架构组成 Oracle的内存,从总体上讲,可以分为两大块:共享部分(主要是SGA)和进程独享部分(主要是PGA 和UGA)。而这两部分内存里面,根据功能不同,还分为不同内存池(Pool)和内存区(Area)。下面就是Oracle内存构成框架图: SGA Share Pool Buffer Cache Redo Log Buffer Java Pool Stream Pool(10g)Large Pool PGA*n Bitmap merge area Sort Area Hash Area UGA*n CUA*n 下面分别介绍这两块内存区。 1.1.SGA(System Global Area) SGA(System Global Area 系统全局区域)是一组包含一个Oracle实例的数据和控制信息的共享内存结构。这句话可以说是SGA的定义。虽然简单,但其中阐述了SGA几个很重要的特性:1、SGA的构成——数据和控制信息,我们下面会详细介绍;2、SGA是共享的,即当有多个用户同时登录了这个实例,SGA中的信息可以被它们同时访问(当涉及到互斥的问题时,由latch和enquence控制);3、一个SGA只服务于一个实例,也就是说,当一台机器上有多个实例运行时,每个实例都有一个自己的SGA,尽管SGA来自

ORACLE SID 实例名 数据库名 讲解

详解:oracle10G 数据库名、实例名、ORACLE_SID 【转载】 数据库名、实例名、数据库域名、全局数据库名、服务名, 这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。 一、数据库名 什么是数据库名? 数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下: DB_NAME=myorcl ... 在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME 的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。 数据库名的作用 数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。 有很多Oracle安装文件目录是与数据库名相关的,如: winnt: d:\oracle\product\10.1.0\oradata\DB_NAME\... Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/... pfile: winnt: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\ini.ora Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora 跟踪文件目录: winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/... 另外,在创建数据时,careate database命令中的数据库名也要与参数文件中DB_NAME参数的值一致,否则将产生错误。 同样,修改数据库结构的语句alter database,当然也要指出要修改的数据库的名称。 如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount 方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指DB_NAME。 还有在备份或恢复数据库时,都需要用到数据库名。 总之,数据库名很重要,要准确理解它的作用。 查询当前数据名 方法一:select name from v$database; 方法二:show parameter db 方法三:查看参数文件。 修改数据库名 前面建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名是一件比较复杂的事情。那么现在就来说明一下,如何在已创建数据之后,修改数据库名。步骤如下:

oracle 11g数据库ASM磁盘组存储空间扩容实施

oracle 11g数据库ASM磁盘组存储空间扩容实施任务概述 XX系统存放oracle数据文件的DATA磁盘组空间因为开发方新上线业务,造成原有数据库表空间较为紧张,应业务开发方要求,为了适应未来的数据增长 要求,需要扩容。 此方案为数据库扩容常规标准步骤,无需专门测试,但是,在数据库存储扩容前,为防止变更操作带来的风险,需要对数据库数据作备份,以防万一出现问题时做回退恢复。 在实施存储扩容变更操作时,由于是底层磁盘阵列和操作系统的标准化操作,为了防止操作失误,必须一人操作,另一人在旁监督检查,并且分步确认,步 步把关,确保万无一失。 1.1. 实施任务 DATA磁盘组扩容: 在DS5300存储RAID10组中划分新的2个300G的LUN并添加到DATA 磁盘组给XX集群数据库使用,RAID10组剩余的空间可以留给以后扩容或其他用途使用。 1.2. 环境简介 系统名称:XX系统;主机:两台IBM P750小型机;操作系统:AIX 6.1; 存储:1套IBM DS5300;数据库:ORACLE RAC 11.2.0.3.0; 1.3. 实施时间 2014年11月。 1.4. 实施人员 略 2. 实施方案 2.1. 实施内容 原有数据库需要作数据作RMAN备份; 连接到存储DS5300划分LUN,并加载到主机; 主机扫描识别,修改属性及权限;

ASM存储DATA磁盘组增加disk扩容; 检查数据库和应用。 2.2. 实施步骤 2.3. 实施风险控制 在数据库存储扩容前,为防止变更操作风险,需要对数据库数据作备份,以防万一。 在实施存储扩容变更操作时,由于是底层磁盘阵列和操作系统的标准化操作,为了防止操作失误,必须一人操作,另一人在旁监督检查,并且分步确认,步 步把关,确保万无一失。 3. 详细实施步骤 3.1. RMAN备份 在数据库服务器节点2上通过RMAN对数据库做全备份,历时约60分钟。 具体步骤如下: 以root用户创建备份用的目录,并更改所有者等; #mkdir -p /backup/20131122 #chown -R oracle:dba /backup/ 以oracle用户创建rman备份用的脚本,并赋权限: #su - oracle $cd /backup/20131122

相关文档
相关文档 最新文档