| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 第1章 oracle的体系结构(二) -> 正文阅读 |
|
[大数据]第1章 oracle的体系结构(二) |
11. Oracle执行SQL查询语句的主要步骤。????????SQL语句主要由用户进程和服务器进程完成。其他一些进程辅助完成。 ????????查询语句的处理主要包含3个阶段:编译(parse)、执行(execute)、提取数据(fetch)。 ????????1)编译:在进行编译时,服务器进程会将SQL语句的正文放入共享池(shared pool)的库高速缓存(library cache)中并将完成以下处理。
以上每一步操作都是在处理正确时才进行后续处理。如果不正确,就返回错误。 ????????2)执行(execute):Oracle服务器进行开始执行SQL语句。它已获得了执行SQL语句所需的全部资源和信息。 3)提取数据(fetch):Oracle服务器进程选择所需的数据行,并在需要时将其排序,最后将结果返回给用户(进程)。 12.Oracle实例的系统全局区(SGA)13.Oracle执行UPDATE语句的步骤。与执行查询语句有所不同,Oracle在执行DML语句时只有编译和执行两个阶段。步骤如下:
?Oracle处理insert或delete语句的步骤与处理update语句步骤大体相同。 14.怎么设置内存缓存区的大小?????????在Oracle 9i之前版本,SGA相关参数是静态的,即修改完初始化参数文件后,必须重新启动Oracle数据库才会生效。 ????????在Oracle 9以后的版本中,SGA为动态的。SGA中的database buffer cache和shared pool 等都可以动态地增加和减少。Oracle是通过黎勇所谓的区组(granule)来管理SGA的内存的。区组(granule)就是一片连续的虚拟内存区,是Oracle分配和回收内存区的基本单位。 ????????区组的大小取决于所估计的SGA的大小。如果SGA的尺寸大于或等于128MB,则区组的大小就为16MB。SGA至少包括3个区组:一个是SGA固定区(其中包含了重做日志缓冲区);一个是数据库高速缓冲区;一个是共享池。 ????????Oracle数据库管理员可以通过alter system set命令来分配和回收区组。但总的内存大小不能超过SGA_MAX_SIZE所设定的值。该参数的单位是字节。 ? ? ? ? 动态分配和回收最大的优点是调整后不需要重新启动数据库。 15.怎么获取内存缓冲区信息?1)使用命令 “show parameter ”获取参数SGA_MAX_SIZE的值。这个显示的信息太多了,不方便查看。 2)使用命令“show sga”查看。 ?3)使用数据字典v$parameter查看参数SGA_MAX_SIZE的值。 select name,type,value from?v$parameter where name='sga_max_size'; 16.重做日志写进程的工作原理。?????????重做日志写进程(LOG writer,LGWR)负责将重做日志缓冲区(内存)的记录顺序地写到重做日志文件(硬盘)中。上面说的是这个进程做了什么。那么具体是怎么做的呢? ????????Oracle服务器使用了一种称为快速提交(fast commit)的技术,该技术既能保证Oracle系统的效率又能保证在系统崩溃的情况下所有提交的数据可以得到恢复。为此Oracle系统引入了系统变化数(system change number,SCN)。无论任何时候只要某个事务(transaction)被提交,Oracle服务器都将产生一个SCN(号码)并将其赋予该事务的所有数据行。Oracle内部时间截作为SCN,保证其单调递增,且唯一。 ????????发送commit语句后,Oracle的内部操作步骤:
?此时可能这些数据并未被写到数据文件中,这些数据缓冲区被标位脏缓冲区,因为相同的数据在内存和外存中为不同的版本。数据库高速缓冲区中的数据是由DBWR写到数据库文件中的。 (我的理解:脏缓冲区在DBWR写入到数据库文件前,数据库文件(外存)中为旧版本,内存脏缓冲区的为新版本,此时要是系统崩溃了,内存中的新版本数据丢失了,需要SMON进程读取重做日志文件数据(新版本数据)来更新外存的旧版本数据。) 注意:只有在重做日志数据写到重做日志文件(磁盘)上时才能确定提交已经完成。即上面的第二步完成,才算事务提交完成。 LGWR要在下列情况下将重做日志缓冲区的记录(内存)顺序地写到重做日志文件(外存)中:
我的理解:上面这些情况应该只供参考,主要是为了最大限度的利用有限的资源。 日志挖掘工具:logminer? 和 日志挖掘浏览器(logminer viewer) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:41:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |