oracle执行计划

深入理解oracle的事务隔离性

我与影子孤独终老i 提交于 2020-01-08 17:54:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在Oracle关系数据库中,我们先来看下面这个问题: A事务:select <cols> from T where id > 10 and id < 10000; B事务:update T set id = 45000 where id = 4501 两个事务按下面的顺序执行: A事务:|--------------------------------|commit B事务: |-------------|commit 也就是A事务先开始执行,过一段时间B事务再开始执行,但是B事务先执行完并commit提交了,A事务又过了一段时间才完成。那么问题来了,在这种情况下,问A事务能不能取得正确的结果,两个事务之间会不会有干扰,怎么干扰? 这是一个典型的关系型数据库事务的隔离性问题,而且,针对不同的数据库(存储引擎),可能会有不同的表现。 根据上面的描述,以oracle为例,它的缺省数据库隔离级别是读已提交(read-committed),事务A持有一个读锁(瞬间共享读锁),B持有一个排它写锁。 Read Committed读已提交的官方定义是,通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。 按照读已提交的定义,似乎按上题的条件,A

Oracle数据库的体系结构和用户管理

。_饼干妹妹 提交于 2020-01-08 07:44:38
一、Oracle体系结构 数据库的体系结构是指数据库的组成、工作过程、以及数据库中数据的组织与管理机制,要了解Oracle数据库的体系结构,必须理解Oracle系统的主要组件和重要概念。 1、Oracle体系结构概述 Oracle体系结构包含一系列组件,如下图所示,图中显示了Oracle体系结构中的主要组件,包括实例、用户进程、服务器进程、数据文件及其他文件,如参数文件、口令文件和归档日志文件等。从图中可以看出,实例和数据库是Oracle数据库体系结构的核心组成部分,也是最重要的两个概念;DBA一个很重要的工作就是维护实例和数据库本身的正常工作。 1)实例 Oracle实例是后台进程和内存结构的集合,必须启动实例才能访问数据库中的数据。Oracle实例启动时,将分配一个系统全局区(SGA)并启动一系列Oracle后台进程。Oracle实例有两种类型:单进程实例和多进程实例,单进程Oracle实例使用一个进程执行Oracle的全部操作,在单进程环境下的Oracle实例仅允许一个用户可存取;多进程Oracle实例(又称多用户Oracle)使用多个进程来执行Oracle的不同部分,对于每个连接的用户都有一个进程。 2)数据库 数据库是数据的集合,物理上指存储数据库信息的一组操作系统文件,每个数据库有一个逻辑结构和物理结构。物理结构是指构成数据库的一组操作系统文件,主要由三种类型文件组成

CentOS 7部署Oracle 12c企业版数据库

自闭症网瘾萝莉.ら 提交于 2020-01-07 13:52:15
一、安装Oracle 12c 1、安装CentOS 7操作系统的注意事项 由于本次安装Oracle 12c软件是在CentOS 7系统上实现的,那么首先安装CentOS 7操作系统,安装要求如下: 防火墙的配置选项设置为禁用; SELinux设置为禁用; 默认安装设置为软件开发; 内核选择3.10.0-862.el7.x86_64及以上版本; 2、前置条件的准备 Oracle数据库是一个相对庞大的应用软件,对服务器的系统类型、内存和交换分区、硬盘空阿金、内核参数、软件环境、用户环境等都有相应的要求。只要满足了这些必备的条件,才能确保Oracle 12c安装成功、稳定运行。 1)系统及配置要求 Oracle 12c明确支持的Linux操作系统包括Oracle Linux 7、Oracle Linux 6、Oracle Linux 5、Red Hat Enterprise Linux 7、Red Hat Enterprise Linux 6、Red Hat Enterprise Linux 5等,因为Red Hat Enterprise 和CentOS属于同步并行的操作系统,所以Oracle 12 c同样支持CentOS 7、CentOS 6、CentOS 5操作系统。在其他Linux系统中安装时,个别软件或配置文件可能需要进行适当的调整。通过以下命令查看系统版本: [root

oracle创建分区表

走远了吗. 提交于 2020-01-01 12:59:39
实验3:创建分区表 实验目的: 掌握分区表的创建方法,掌握各种分区方式的使用场景。 实验内容: 本实验使用3个表空间:USERS,USERS02,USERS03。在表空间中创建两张表:订单表(orders)与订单详表(order_details)。 使用你自己的账号创建本实验的表,表创建在上述3个分区,自定义分区策略。 你需要使用system用户给你自己的账号分配上述分区的使用权限。你需要使用system用户给你的用户分配可以查询执行计划的权限。 表创建成功后,插入数据,数据能并平均分布到各个分区。每个表的数据都应该大于1万行,对表进行联合查询。 写出插入数据的语句和查询数据的语句,并分析语句的执行计划。 进行分区与不分区的对比实验。 在用户名shuijingyelong_1下建立orders表和order_details表并分区。 在用户名shuijingyelong_1下建立orders_nospace表和order_details_space表不分区。 分区表建立sql 分区策略: orders表按范围分区,通过订单日期进行分区。 orders与order_details表主外键关联,所以在order_details表使用引用分区进行存储。 #建立ORDERS表并分区 CREATE TABLE ORDERS ( ORDER_ID NUMBER ( 10 , 0 ) NOT

oracle之索引

泪湿孤枕 提交于 2020-01-01 05:03:37
索引 11.1 索引结构及特点 两大类:B树索引,2)位图索引 11.1.1 B树索引结构(图),介绍根节点,分支节点,叶子节点,以及表行,rowid,键值,双向链等概念。 考点: 1)叶块之间使用双向链连接, 2)删除表行时索引叶块也会更新,但只是逻辑更改,并不做物理的删除叶块。 3)索引叶块中不保存表行键值的null信息。 11.1.2 位图索引结构: 位图索引适用于离散度较低的列,它的叶块中存放key, start rowid-end rowid,并应用一个函数把位图中相应key值置1,位图索引在逻辑or时效率最高。 SQL>create bitmap index job_bitmap on emp1(job); 值/行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 --------------------------------------------------------------- ANALYST 0 0 0 0 0 0 0 1 0 0 0 0 1 0 CLERK 1 0 0 0 0 0 0 0 0 0 1 1 0 1 MANAGER 0 0 0 1 0 1 1 0 0 0 0 0 0 0 PRESIDENT 0 0 0 0 0 0 0 0 1 0 0 0 0 0 SALESMAN 0 1 1 0 1 0 0 0 0 0 0 0 0 0 SQL

Oracle索引梳理系列(二)- Oracle索引种类及B树索引

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-30 04:23:02
版权声明 :本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载。转载时,请在文章明显位置注明原文链接。若在未经作者同意的情况下,将本文内容用于商业用途,将保留追究其法律责任的权利。如果有问题,请以邮箱方式联系作者(793113046@qq.com)。 Oracle索引种类 一 Oracle索引类型概述 oracle索引的种类主要有以下几种: B树索引 :oracle默认的索引类型,内部采用二叉树结构,根据rowid实现访问行的快速定位。 反向索引 :反转B树索引的索引列的键值字节,尤其是索引列值递增且批量插入数据时,使索引分布均匀。 位图索引 :通过使用位图,标识被索引的列值,进而管理与数据行的对应关系。主要用于OLAP的系统。 表簇索引 :使用表簇索引必须要使用表簇(cluster)。 函数索引 :通过函数将数据列计算的返回值作为索引键值建立的索引结构。 二 B树索引 2.1 B树索引结构图说明 该结构图源自于网络,从图中不难看出,B树索引结构主要由三部分组成:根节点、分支节点、叶子节点。 对于oracle而言,索引的层级号采用倒序的方式,既对于层级数为N的索引,根节点的层级号为N,其下一层的分支节点为N-1,类推。 需要注意的是,oracle会自动为表的主键列创建索引。 需要注意的是

二十、oracle通过复合索引优化查询及不走索引的8种情况

此生再无相见时 提交于 2019-12-30 04:18:16
1. 理解ROWID   ROWID是由Oracle自动加在表中每行最后的一列伪列,既然是伪列,就说明表中并不会物理存储ROWID的值;你可以像使用其它列一样使用它,只是不能对该列的值进行增、删、改操作;一旦一行数据插入后,则其对应的ROWID在该行的生命周期内是唯一的,即使发生行迁移,该行的ROWID值也不变。 SELECT t.rowid,t.* FROM DM_COMM_PREM_LIST t where LIST_ID= '3106355531'; 2. SQL优化器优化方式 1)基于规则的优化器RBO(Rule-Based Optimization)   RBO有严格的使用规则,只要按照这套规则去写SQL语句,无论数据表中的内容怎样,也不会影响到你的执行计划;换句话说,RBO对数据“不敏感”,它要求SQL编写人员必须要了解各项细则;RBO一直沿用至ORACLE 9i,从ORACLE 10g开始,RBO已经彻底被抛弃。 2)基于成本的优化器CBO(Cost-Based Optimization) CBO是一种比RBO更加合理、可靠的优化器,在ORACLE 10g中完全取代RBO;CBO通过计算各种可能的执行计划的“代价”,即COST,从中选用COST最低的执行方案作为实际运行方案;它依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择,也就是对数据“敏感”

【Oracle】DBMS_STATS.GATHER_SCHEMA_STATS详解

╄→гoц情女王★ 提交于 2019-12-29 11:37:15
【Oracle】DBMS_STATS.GATHER_SCHEMA_STATS详解 dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划。 exec dbms_stats.gather_schema_stats (  ownname => 'SCOTT',   options => 'GATHER AUTO',   estimate_percent => dbms_stats.auto_sample_size,   method_opt => 'for all columns size repeat',   degree => 15 ) 为了充分认识dbms_stats的好处,需要仔细体会每一条主要的预编译指令(directive)。下面让我们研究每一条指令,并体会如何用它为基于代价的SQL优化器收集最高质量的统计数据。 options参数 使用4个预设的方法之一,这个选项能控制Oracle统计的刷新方式: gather——重新分析整个架构(Schema)。 gather empty——只分析目前还没有统计的表。 gather stale——只重新分析修改量超过10%的表(这些修改包括插入、更新和删除)。 gather auto——重新分析当前没有统计的对象,以及统计数据过期(变脏)的对象。注意

oracle awr报告生成和分析

旧巷老猫 提交于 2019-12-25 20:16:05
  最近由于数据库cpu占用非常高,导致VCS常常自动切换,引起很多问题。 最近学习一下数据库awr分析数据库sql执行性能的分析报告。下面将初步讲解一下: 1、先登陆数据库,生成awr报告 。 linux:~ # su - oracle oracle@linux:~> sqlplus '/as sysdba' SQL*Plus: Release 11.1.0.6.0 - Production on Sun Apr 7 14:02:38 2013 Copyright (c) 1982, 2007, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 2、输入分析命令 SQL> @?/rdbms/admin/awrrpt Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance ----------- ------------ -------- ------------

使用AWR报告诊断Oracle性能问题

人走茶凉 提交于 2019-12-25 20:15:00
在做单交易负载测试时,有的交易响应时间超出了指标值,在排除完测试环境等可能造成交易超时的原因后,去分析数据库问题。数据库用的是Oracle,对于Oracle数据库整体的性能问题, awr的报告是一个非常有用的诊断工具,于是采用Oracle自带的性能分析工具awr进行监控分析。 生成awr报告 1、 以sysdba登录数据库:sqlplus / as sysdba,如下图所示: 2、 在负载测试执行前后分别取一个快照:exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT,如下图所示: 3、 压力测试执行完后,执行awrrpt命令(@?/rdbms/admin/awrrpt)获取awr报告,并且输入报告类型为HTML(awr报告类型有html和txt两种),如下图所示: 4、 列出awr报告生成的时间段(1表示1天内的),如下图所示: 5、 输入开始和结束的snap id。如果不指定什么时候生成快照,则默认每隔1个小时生成一次。前面输入的时间段为1天,则会从当天0点开始,每隔1个小时生成一个快照,如下图示: 6、 接下来提示输入awr报告的名称,输入完名称之后,点击“file-Log Session”将报告保存到本地,再回车,就会生成相应的报告,如下图所示: 7、 awr报告生成完成后,双击打开即可查看awr报告记录的详细信息。 一、 awr