• 1. RAC物理结构RAC ,是Oracle的并行集群,位于不同服务器系统的Oracle实例同时访问同一个Oracle数据库,节点之间通过私有网络进行通信,所有的控制文件、联机日志和数据文件存放在共享的设备上,能够被集群中的所有节点同时读写,RAC是一种并行模式,并不是传统的主备模式。也就是说,RAC集群的所有成员都可以同时接收客户端的请求 存储设备向数据库集群提供了统一的访问接口 数据库集群向上对应用集群提供统一接口服务 应用集群向上对用户提供统一的服务 RAC存储结构使用的方式必须是集群中所有节点都能同时并发访问相同设备 (共享存储)。 在实际的生产环境中,大多数使用SAN来构建服务器共享存储。 SAN是存储区域网络,用于数据库服务器和存储设备交换数据, SAN使用TCP/IP协议作为传输协议
  • 2. RAC逻辑层次结构在同一个节点层与层之间有非常紧密的关系,同时在不同的节点之间,相同层之间也存在紧密的关系。它们之间相互支持,每个相同的逻辑层都可以说是一个集群,共同构成了RAC集群高可用性环境
  • 3. RAC优缺点优点: 1、高可用性。RAC是Oracle数据库产品高可用性的解决方案,能够保证在集群中只要有一个节点存活,就能正常对外提供服务。 2、易伸缩性。RAC可以非常容易地添加、删除节点,以满足系统自身的调整。 3、低成本。能使用较低廉的服务器来实现高可用性、高吞吐量的集群环境,这要比通过对某台高端服务器增加硬件实现高可用性、高吞吐量花费的成本低很多。  4、高吞吐量。随着节点数的增加,整个RAC的吞吐量也在不断增长 缺点: 一、稳定性   数据库的稳定运行是系统稳定运行的基础和前提,数据库的运行依赖于操作系统、服务器、存储设备等软硬件设备的运行情况。   由于各种硬件设备、操作系统的厂商不同,有时候在兼容性上会存在问题,同时,由于RAC本身也存在不少bug,很多部署的RAC环境缺乏在上线前对环境的检查和测试,导致在运行过程中出现一系列不稳定的情况,这样高可用性并没有得到充分的体现。  二、高性能   RAC并不是高性能的解决方案。在目前普遍使用千兆网 络的硬件环境中,很多时候系统的数据库从原来的单机迁移至RAC环境,系统的性能反而下降。在这种情况下,数据库管理员应该根据RAC的特点对系统调整提 出合理的建议,经过合理的设计、开发,使用RAC是能够提高系统的处理性能的。   以上两个问题是需要特别注意的。另外,与硬件工程师、系统开发人员进行良好的沟通,以及对系统合理的设计是保证RAC稳定运行和高性能运行的前提。
  • 4. 表空间在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,表空间下还有段、区、块等逻辑结构。从物理结构上看是放在数据文件中。一个表空间可由多个数据文件组成。 如图所示,一个数据库由对应一个或多个表空间,表空间逻辑上有一个或多个段(Segment)组成,物理上由一个或多个os file组成。表空间的分类   永久表空间                存放永久性数据,如表,索引等。 临时表空间                不能存放永久性对象,用于保存数据库排序,分组时产生的临时数据。 UNDO表空间             保存数据修改前的镜象
  • 5. 表分区原因:当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。 优点:     1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。     2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;     3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;     4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。     缺点:     分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。    
  • 6. 表分区Oracle分区表分为四类:范围分区表;列表分区表;哈希分区表;组合分区表范围分区:     范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。举个例子:你可能会将销售数据按照月份进行分区。 列表分区:     该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。如根据删除状态0/1来分区 散列分区:     这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。     散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。  hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀 组合范围散列分区     这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。 复合范围散列分区:     这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。
  • 7. SQL优化1、FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表 2、ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾 3、SELECT子句中避免使用 ‘ * ‘,在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间. 4、避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销. 5、使用表的别名(Alias) ,并把别名前缀于每个Column上 6、用EXISTS替代IN 7、用表连接替换EXISTS 8、避免在索引列上使用计算. 9、 用>=替代> 10、避免在索引列上使用IS NULL和IS NOT NULL 12、如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 这也是一条简单而重要的规则,当仅引用索引的第二个列时,优化器使用了全表扫描而忽略了索引 13、 用UNION-ALL 替换UNION ( 如果有可能的话),当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序 14、避免改变索引列的类型 15、避免使用耗费资源的操作: 带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 
  • 8. SQL优化1.说一下RAC和单节点数据库的区别有哪些?你认为RAC最有用的功能是说什么? 区别 (1)RAC有2个以上的实例,单节点只有1个实例 (2)RAC具有实例级别的高可用 (3)实例与实例之间通过内联网络交换数据,单节点不可 (4)RAC每个节点都有自己套SGA、后台进程、redo log、undo file (5)RAC可以增减节点 RAC最有用的功能 答:我认为RAC最有用的功能就是实例级的failover,它可以保证在其中有节点crash的时候,其他节点可以迅速接管。保证系统持续可用。往往人们会认为RAC有2个节点性能就会提升2倍,这是一个误区,由于要保证数据的一致性往往性能会消耗在内存间的数据块相互拷贝和交叉上,因此不一定性能会好于单节点,而且节点越多性能曲线就会下降越快。
  • 9. 感谢大家的聆听!