oracle sql 高级编程学习笔记(一)

前言

作为一个java开发员,可能都会认为数据库没有必要过于精通,只需能写出满足业务的crud(增删改查)的sql语句即可,殊不知就像开车一样,我们不能只仅仅满足于开车,而对车子原理不屑。那样我们真的只能仅仅停留在java开发上,技术是永远都不嫌多的,去年我也是抱着我是一个java开发员,数据库的东西根本不必做深入的了解,直到今年由于发展需要,转而做报表开发,才深刻意识到自已在数据库上的欠缺,方又重新拾起一年前只翻了几页的oracle sql高级编程。

一、数据库内存结构

通常我们所说的‘Oracle数据库’既用来指存储在硬盘上内部存有数据的数据库文件,也指用来管理这些文件的内存结构。数据库归属于数据文件,
而实例归属于内存结构。一个实例由系统全局内存区域(SGA)以及一系列后台进程组成。每一个连接到数据的用户都是通过一个客户端进程来进行管理,客户端进程是与服务器进程相联结,每一个服务器进程都会被分配一块私有的内存区域,称为程序共享内存区域(PGA)。oracle实例结构图如下

这里写图片描述

1.系统全局区(SGA)

SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信息。如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享, 当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。 SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。

1.1 共享池
共享池是内存中最关键的部分之一,非常的繁忙和重要。
SQL共享池包含数据字典缓存区(data dictionary cache)及库缓存区(librarycache),即对数据库进行操作的语句信息。当数据块缓冲区和字典缓存区能够共享数据库用户间的结构及数据信息时,库缓存区允许共享常用的SQL语句。
SQL共享池包括执行计划及运行数据库的SQL语句的语法分析树。在第二次运行(由任何用户)相同的SQL语句时,可以利用SQL共享池中可用的语法分析信息来加快执行速度。
SQL共享池通过LRU算法来管理。当SQL共享池填满时,将从库缓存区中删掉最近最少使用的执行路径和语法分析树,以便为新的条目腾出空间。如果SQL共享池太小,语句将被连续不断地再装入到库缓存区,从而影响操作性能。
所以sql语句要考虑共享性,唯一性的sql愈多,性能就越差,语句共享性能差,响应的时间也就越大。
SQL共享池的大小(以字节为单位)由init.ora文件参数SHARED_POOL_SIZE决定。
1)字典缓存区 (data dictionary cache)
数据库对象的信息存储在数据字典表中,这些信息包括用户帐号数据、数据文件名、段名、盘区位置、表说明和权限,当数据库需要这些信息(如检查用户查询一个表的授权)时,将读取数据字典表并且将返回的数据存储在字典缓存区的SGA中
数据字典缓存区通过最近最少使用(LRU)算法来管理,字典缓存区是SQL共享池的一部分,共享池的大小由数据库文件init.ora中的SHARED_POOL_SIZE参数来设置。
如果字典缓存区太小,数据库就不得不反复查询数据字典表以访问数据库所需的信息,这些查询称为循环调用(recuesivecall),这时的查询速度相对字典缓存区独立完成查询时要低。
2)库高速缓存区(library cache)
执行过的每一个sql语句在共享池都存有解析后的内容。储存这些的数据的地方称为库高速缓存区(library cache),执行每个sql前,oracle都会检查在库高速缓冲区是否已经存在同样的语句,如果存在,会直接从缓存区读取,而不是再去解析一遍,运行方法,存储过程等也是一样。解析包括验证语法,检验提及的对象,以及确认用户的权限。这些通过后,检查是不是已经执行过,如果是,直接取回解析信息重用,这种类型解析为软解析,如果不存在,需执行所有的工作,并存到高速缓冲区以便将来重用。这类解析为硬解析。
硬解析比软解析需要做的工作多得多。

2).1 、完全相同的语句
为确定一个sql语句是否执行过,可以通过v$sql 来查看。这个视图提供了共享区sql的统计信息。
1)、小写与大写字母不同,语句添加注释也不同
2)、sql常量不同也不同,绑定变量,无论变量值是否一样,都是相同。
2、 缓冲区缓存
缓冲区缓存是SGA最大的部份之一。在数据块从硬盘中读取处理来或者写入硬盘之前,用与存储数据块。块orale操作数据的最小数据单位,块包含数据表的行和索引条目,需要注意的是oracle必须读取块来获取sql需要的数据行。

在缓冲区缓存为每个块维护了接触计数器,接触计数越高在缓冲区缓存保存的时间就越久。
这里还需要理解的东西是锁存器,锁存器是oracle为了读取高速缓冲或者其他内存结构的信息时必须获得的一种锁,锁存器可以保存高速缓冲区以及其他内存结构避免同时被两个会话进行修改。
提高效率,减少锁存器,sql语句解析,以及验证块、更新LRU信息以及接触计数的时候都需要获取锁存器。所以提高效率的方法是在满足数据需求的同时访问尽可能少的数据块。
当Oracle确定数据块已经出现在缓冲区缓存的时候,这样的访问为逻辑访问,如果该块必须从硬盘中取出,则称为物理访问,很明显逻辑访问比物理访问的效率更高。
总结:重用高速缓存区以及缓冲区缓存中的信息代码,尽可能少的访问数据块

备注:文章主要参考oralce sql高级编程

英文版:Pro Oracle SQL 内容简介 《Oracle SQL高级编程》主要内容简介:作者以精炼、风趣的语言揭开了Oracle SQL高级编程的神秘面纱。书中所涵盖的内容涉及SQL核心、SQL执行、分析函数、联结、测试与质量保证等,并提供大量实用性建议,且总结出方方面面的“技巧”帮助读者在阅读过程中快速消化所看内容。《Oracle SQL高级编程》适合软件研发专业人士阅读,对软件项目管理感兴趣的社会各界人士也能从中获益。 编辑推荐 《Oracle SQL高级编程》:资深Oracle专家力作,OakTable团队推荐,全面、独到、翔实,题材丰富,Oracle开发人员和DBA必备。 作者简介 作者:莫顿(Karen Morton) (美国)Kerry Osborne (美国)Robyn Sands 等 译者:朱浩波 莫顿,Karen Morton,研究人员、教育家及顾问,Fidelity信息服务公司的资深数据库管理员和性能调优专家。她从20世纪90年代初就开始使用Oracle,从事 Oracle的教学工作也已经超过10年的时间。她是Oracle ACE,也是OakTable(Oracle社区中著名的“Oracle科学家”的非正式组织)的成员,经常在技术会议上演讲。她的著作还包括 Expert Oracle Practices和Beginning Oracle SQL。 Kerry Osborne,专注于Oracle咨询的Enkitec公司的创始人之一。从1982年开始使用Oracle(第2版)。他当过开发人员,也做过DBA,目前是 Oracle ACE总监和OakTable成员。最近几年,他专注于研究Oracle内部原理以及解决性能问题。 Robyn Sands,思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用Oracle,在应用开发、大型系统实现以及性能评估方面具有丰富的经验。她是OakTable的成员,同时是Expert Oracle Practices (2010年 Apress出版)一书的合著者。 RIYAJ SHAMSUDEEN 专注于性能/数据恢复/电子商务的咨询公司OraInternals的首席数据库管理员和董事长。有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。 JARED STILL,从1994年就开始使用Oracle。他认为对于SQL学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。
相关推荐
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Oracle SQL高级编程》的源代码 对应的书籍资料见: Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐) 基本信息 原书名: Pro Oracle SQL 原出版社: Apress 作者: (美)Karen Morton    Kerry Osborne    Robyn Sands    Riyaj Shamsudeen    Jared Still    译者: 朱浩波 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115266149 上架时间:2011-11-9 出版日期:2011 年11月 开本:16开 页码:502 版次:1-1 主编推荐     资深Oracle专家力作,OakTable团队推荐     全面、独到、翔实,题材丰富     Oracle开发人员和DBA必备 内容简介     Oracle 数据库中的SQL是当今市场上功能最强大的SQL实现之一,而本书全面展示了这一工具的威力。如何才能让更多人有效地学习和掌握SQL呢?Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:     掌握Oracle数据库中独有的SQL强大特征;     读取并理解SQL执行计划;     快速分析并改进表现欠佳的SQL;     通过提示及配置文件等来控制执行计划;     在程序中优化查询而无需改动代码。     作为Oracle SQL经典著作之一,本书为SQL开发人员指明了前行的方向,赋予了他们不断开拓的动力。 作者简介     KAREN MORTON 研究人员、教育家及顾问,Fidelity信息服务公司的资深数据库管理员和性能调优专家。她从20世纪90年代初就开始使用Oracle,从事 Oracle的教学工作也已经超过10年的时间。她是Oracle ACE,也是OakTable(Oracle社区中著名的“Oracle科学家”的非正式组织)的成员,经常在技术会议上演讲。她的著作还包括 Expert Oracle Practices和Beginning Oracle SQL,博客主页是karenmorton.blogspot.com。     KERRY OSBORNE  专注于Oracle咨询的Enkitec公司的创始人之一。从1982年开始使用Oracle(第2版)。他当过开发人员,也做过DBA,目前是 Oracle ACE总监和OakTable成员。最近几年,他专注于研究Oracle内部原理以及解决性能问题。他的博客主页是 kerryosborne.oracle-guy.com。     ROBYN SANDS 思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用Oracle,在应用开发、大型系统实现以及性能评估方面具有丰富的经验。她是OakTable的成员,同时是Expert Oracle Practices (2010年 Apress出版)一书的合著者。     RIYAJ SHAMSUDEEN 专注于性能/数据恢复/电子商务的咨询公司OraInternals的首席数据库管理员和董事长。有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。     JARED STILL 从1994年就开始使用Oracle。他认为对于SQL学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7 致谢 -6 目录 -5 第1章 SQL核心 1 1.1 SQL语言 1 1.2 数据库的接口 2 1.3 SQL*Plus 回顾 3 1.3.1 连接到数据库 3 1.3.2 配置SQL*Plus环境 4 1.3.3 执行命令 6 1.4 5 个核心的SQL语句 8 1.5 SELECT语句 8
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页