搜索
首页数据库mysql教程Oracle 体系结构笔记整理

一直以来都想好好研究下oracle,刚好,现在的项是关于oracle安全的,所以,抽个时间,把它整理一下,虽然不可能完全理解oracle,

一直以来都想好好研究下Oracle,刚好,现在的项是关于oracle安全的,所以,抽个时间,把它整理一下,虽然不可能完全理解oracle,但做了总比不做要好。

一、ORACLE实例
  
  1、ORACLE 实例
  
  System Global Area(SGA) 和 Background Process 称为数据库的实例。
  
  2、ORACLE 数据库
  
  一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等)
  
  3、系统全局共享区System Global Area(SGA)
  
  System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。其大小可以通过如下语句查看:
  SQL> select * from v$sga;
  NAME VALUE
  -------------------- ---------
  Fixed Size 39816
  Variable Size 259812784
  Database Buffers 1.049E+09
  Redo Buffers 327680

  更详细的信息可以参考V$sgastat、V$buffer_pool
  
  主要包括以下几个部分:
  
  a、 共享池(Shared pool)
  
  共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:
  
  SQL语句缓冲(Library Cache)
  
  当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Shared pool的Library Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL 比第二次运行的SQL要慢一点的原因。
  
  下面举例说明parse的时间
  SQL> select count(*) fromscpass ;
  COUNT(*)
  ----------
  243
  Elapsed: 00:00:00.08
  
  这是在Share_pool 和Data buffer 都没有数据缓冲区的情况下所用的时间
  SQL> alter system flush SHARED_POOL;
  System altered.
  
  清空Share_pool,保留Data buffer
  SQL> select count(*) from scpass ;
  COUNT(*)
  ----------
  243
  Elapsed: 00:00:00.02
  SQL> select count(*) from scpass ;
  COUNT(*)
  ----------
  243
  Elapsed: 00:00:00.00
  
  从两句SQL 的时间差上可以看出该SQL 的Parse 时间约为00:00:00.02
  
  对于保存在共享池中的SQL语句,可以从V$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的Share pool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。
  
  数据字典缓冲区(Data Dictionary Cache)
  
  显而易见,数据字典缓冲区是ORACLE特地为数据字典准备的一块缓冲池,供ORACLE内部使用,没有什么可以说的。
  
  b、块缓冲区高速缓存(Database Buffer Cache)
  
  这些缓冲是对应所有数据文件中的一些被使用到的数据块。让他们能够在内存中进行操作。在这个级别里没有系统文件,,户数据文件,临时数据文件,回滚段文件之分。也就是任何文件的数据块都有可能被缓冲。数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。
  
  这个缓冲区的块基本上在两个不同的列表中管理。一个是块的“脏”表(Dirty List),需要用数据库块的
  
  书写器(DBWR)来写入,另外一个是不脏的块的列表(Free List),一般的情况下,是使用最近最少使用 (Least Recently Used,LRU)算法来管理。块缓冲区高速缓存又可以细分为以下三个部分(Default pool,Keep pool,Recycle pool)。如果不是人为设置初始化参数(Init.ora),ORACLE将默认为Default pool。由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7G,在64位系统上,块缓冲区高速缓存最大可以达到10G。
  
  c、重做日志缓冲区(Redo log buffer)
  
  重做日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。这些修改信息可能是DML语句,如(Insert,Update,Delete),或DDL语句,如(Create,Alter,Drop等)。 重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。所以重作日志缓冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。
  
  d、Java程序缓冲区(Java Pool)
  
  Java 的程序区,Oracle 8I 以后,Oracle 在内核中加入了对Java的支持。该程序缓冲区就是为Java 程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小。
  
  e、大池(Large Pool)
  
  大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。
  
  下面对象使用大池:
  
  MTS——在SGA的Large Pool中分配UGA
  
  语句的并行查询(Parallel Executeion of Statements)——允许进程间消息缓冲区的分配,用来协调 并行查询服务器
  
  备份(Backup)——用于RMAN磁盘I/O缓存
  
  4、后台进程(Background process)
  
  后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Windows机器上, Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。
  
  在Unix上可以通过如下方法查看后台进程:
  
  ps –ef | grep ora_
  # ps -ef | grep ora_ | grep XCLUAT
  oracle 29431 1 0 Sep 02 2:02 ora_dbwr_SID
  oracle 29444 1 0 Sep 02 0:03 ora_ckpt_SID
  oracle 29448 1 0 Sep 02 2:42 ora_smon_SID
  oracle 29442 1 0 Sep 02 3:25 ora_lgwr_SID
  oracle 29427 1 0 Sep 02 0:01 ora_pmon_SID
  
  a、Oracle系统有5 个基本进程他们是
  DBWR(数据文件写入进程)
  LGWR(日志文件写入进程)
  SMON(系统监护进程)
  PMON(用户进程监护进程)
  CKPT(检查点进程,同步数据文件, 日志文件,控制文件)
  
  b、DBWR
  将修改过的数据缓冲区的数据写入对应数据文件
  维护系统内的空缓冲区
  这里指出几个容易错误的概念:
  当一个更新提交后,DBWR把数据写到磁盘并返回给用户提交完成.
  DBWR会触发CKPT 后台进程
  DBWR不会触发LGWR 进程
  上面的概念都是错误的.
  DBWR是一个很底层的工作进程,他批量的把缓冲区的数据写入磁盘。和任何前台用户的进程几乎没有什么关系,也不受他们的控制。至于DBWR会不会触发LGWR和CKPT进程,我们将在下面几节里讨论。
  DBWR工作的主要条件如下
  DBWR 超时
  系统中没有多的空缓冲区用来存放数据
  CKPT 进程触发DBWR 等
  
  c、LGWR
  将重做日志缓冲区的数据写入重做日志文件,LGWR是一个必须和前台用户进程通信的进程。当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内。这个重做日志可以类似的认为是以下的一个结构:
  SCN=000000001000
  数据块ID
  对象ID=0801
  数据行=02
  修改后的数据=0011
  提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。从这点可以看出LGWR承担了维护系统数据完整性的任务。
  LGWR 工作的主要条件如下
  用户提交
  有1/3 重做日志缓冲区未被写入磁盘
  有大于1M 重做日志缓冲区未被写入磁盘
  超时
  DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号,DBWR 触发LGWR写入
  
  d、SMON
  工作主要包含
  清除临时空间
  在系统启动时,完成系统实例恢复
  聚结空闲空间
  从不可用的文件中恢复事务的活动
  OPS中失败节点的实例恢复
  清除OBJ$表
  缩减回滚段
  使回滚段脱机
  
  e、PMON
  主要用于清除失效的用户进程,释放用户进程所用的资源。如PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。
  
  f、CKPT
  同步数据文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。
  CKPT工作的主要条件如下
  在日志切换的时候
  数据库用immediate ,transaction , normal 选项shutdown 数据库的时候
  根据初始话文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置的数值来确定
  用户触发
  以下进程的启动需要手工配置
  
  g、ARCH
  当数据库以归档方式运行的时候,Oracle会启动ARCH进程,当重做日志文件被写满时,日志文件进行切换,旧的重做日志文件就被ARCH进程复制到一个/多个特定的目录/远程机器。这些被复制的重做日志文件被叫做归档日志文件。
  
  h、RECO
  负责解决分布事物中的故障。Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。
  i、服务进程Server Process
  服务进程的分类
  专用服务进程(Dedicated Server Process)
  一个服务进程对应一个用户进程
  共享服务进程(MultiTreaded Server Process)
  一个服务进程对应多个用户进程,轮流为用户进程服务。
  PGA & UGA
  PGA = Process Global Area
  UGA = User Global Area
  他保存了用户的变量、权限、堆栈、排序空间等用户信息,对于专用服务器进程,UGA在PGA中分配。对于多线程进程,UGA在Large pool中分配。
  
  j、用户进程User Process
  在客户端,将用户的SQL 语句传递给服务进程
  
  5、一个贯穿数据库全局的概念----系统改变号SCN(System Change Number)
  系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。
  
  a. 查询语句不会使SCN增加,,就算是同时发生的更新,数据库内部对应的SCN也是不同的。这样一来就保证了数据恢复时候的顺序。
  
  b. 维持数据的一致性,当一

linux

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL索引基数如何影响查询性能?MySQL索引基数如何影响查询性能?Apr 14, 2025 am 12:18 AM

MySQL索引基数对查询性能有显着影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL:新用户的资源和教程MySQL:新用户的资源和教程Apr 14, 2025 am 12:16 AM

MySQL学习路径包括基础知识、核心概念、使用示例和优化技巧。1)了解表、行、列、SQL查询等基础概念。2)学习MySQL的定义、工作原理和优势。3)掌握基本CRUD操作和高级用法,如索引和存储过程。4)熟悉常见错误调试和性能优化建议,如合理使用索引和优化查询。通过这些步骤,你将全面掌握MySQL的使用和优化。

现实世界Mysql:示例和用例现实世界Mysql:示例和用例Apr 14, 2025 am 12:15 AM

MySQL在现实世界的应用包括基础数据库设计和复杂查询优化。1)基本用法:用于存储和管理用户数据,如插入、查询、更新和删除用户信息。2)高级用法:处理复杂业务逻辑,如电子商务平台的订单和库存管理。3)性能优化:通过合理使用索引、分区表和查询缓存来提升性能。

MySQL中的SQL命令:实践示例MySQL中的SQL命令:实践示例Apr 14, 2025 am 12:09 AM

MySQL中的SQL命令可以分为DDL、DML、DQL、DCL等类别,用于创建、修改、删除数据库和表,插入、更新、删除数据,以及执行复杂的查询操作。1.基本用法包括CREATETABLE创建表、INSERTINTO插入数据和SELECT查询数据。2.高级用法涉及JOIN进行表联接、子查询和GROUPBY进行数据聚合。3.常见错误如语法错误、数据类型不匹配和权限问题可以通过语法检查、数据类型转换和权限管理来调试。4.性能优化建议包括使用索引、避免全表扫描、优化JOIN操作和使用事务来保证数据一致性

InnoDB如何处理酸合规性?InnoDB如何处理酸合规性?Apr 14, 2025 am 12:03 AM

InnoDB通过undolog实现原子性,通过锁机制和MVCC实现一致性和隔离性,通过redolog实现持久性。1)原子性:使用undolog记录原始数据,确保事务可回滚。2)一致性:通过行级锁和MVCC确保数据一致。3)隔离性:支持多种隔离级别,默认使用REPEATABLEREAD。4)持久性:使用redolog记录修改,确保数据持久保存。

MySQL的位置:数据库和编程MySQL的位置:数据库和编程Apr 13, 2025 am 12:18 AM

MySQL在数据库和编程中的地位非常重要,它是一个开源的关系型数据库管理系统,广泛应用于各种应用场景。1)MySQL提供高效的数据存储、组织和检索功能,支持Web、移动和企业级系统。2)它使用客户端-服务器架构,支持多种存储引擎和索引优化。3)基本用法包括创建表和插入数据,高级用法涉及多表JOIN和复杂查询。4)常见问题如SQL语法错误和性能问题可以通过EXPLAIN命令和慢查询日志调试。5)性能优化方法包括合理使用索引、优化查询和使用缓存,最佳实践包括使用事务和PreparedStatemen

MySQL:从小型企业到大型企业MySQL:从小型企业到大型企业Apr 13, 2025 am 12:17 AM

MySQL适合小型和大型企业。1)小型企业可使用MySQL进行基本数据管理,如存储客户信息。2)大型企业可利用MySQL处理海量数据和复杂业务逻辑,优化查询性能和事务处理。

幻影是什么读取的,InnoDB如何阻止它们(下一个键锁定)?幻影是什么读取的,InnoDB如何阻止它们(下一个键锁定)?Apr 13, 2025 am 12:16 AM

InnoDB通过Next-KeyLocking机制有效防止幻读。1)Next-KeyLocking结合行锁和间隙锁,锁定记录及其间隙,防止新记录插入。2)在实际应用中,通过优化查询和调整隔离级别,可以减少锁竞争,提高并发性能。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境