oracle一条command命令的流程?
客户端发出一条command,通过网络的连接方式连入 Oracle 的listnener,
oracle 的listener 负责在内存中fork(产生一个)影子进程,由这个影子进程(又叫server进程)专门负责和客户端进行交互.
这个影子进程负责向oracle instance提交各种command。客户提交的语句分三种,dml,ddl,dcl语句。
拿普通的dml语句说,dml 语句发送过去,由影子进程接收到之后。
1、首先会在 数据库的内存区域中,具体的是sga的 share Pool里的dictionary cache中分析这个用户是否有权利执行这条语句。
(这个用户的相关的schema信息,这都可以从数据库的字典表中拿到。)
2、如果用户没有权利,影子进程将返回错误提交给客户。
如果用户有权利执行这条语句,Ok,这个时候,影子进程把sql语句提交到
share pool里的 library cache中。这个时候将发生针对这个dml语句的几个步骤。
3、正常的执行步骤分为 parse->execute->fetch
parse是十分消耗CPU资源的。具体我理解是CPU来对这个语句进行分析,并根据
分析的结果产生一个执行计划。
如果,之前有相同、相似的dml语句,可能会发生一次soft parse。直接利用老的执行计划来执行这条新语句。
如果之前没有相同相似的dml语句。将完全产生一个新的执行计划。这个叫hard parse,这是很消耗CPU资源的。(如果想让oracle采用相似的语句的执行计划,那么就涉及了那个cursor_share参数了,oracle建议不要设置为force,而是在编写程序的时候就尽量让语句符合可重用性的规范)
execute就是交给CPU来执行这个执行计划。
一般就设计了那些sort,union 等操作,这个操作是在内存的 pga的work station上执行的。新版本的oracle的 pga 默认是自动调整的。你也可以取消自动调整来设定pga 中的sort_area等参数。
4、fetch 操作是由oracle 进程从内存中(具体的是 buffer cache中)或者从磁盘中(如果buffer cache中找不到的话)抓数据再修改数据。
具体是从内存中的buffer cache中抓数据,buffer cache中有两个链表,一条是lru list,一个是 dirty list。
前一个链表有到所有cache block的指针,采用最近最少使用算法排序。
dirty list中则包含了所有buffer cache中被改动过但是还没有被写回磁盘的
数据。
5、最后由 oracle 影子进程把这些抓到的数据返回给用户。
2 oracle性能优化的方案?
性能优化,的确可以写一本书。
但是首先要搞清楚 oracle 性能优化的目的是什么?
我觉得性能优化的目的应该是再保持应用系统逻辑的情况下尽量减少磁盘的io。
性能优化的结果是什么?
更少的响应时间,更快的响应速度。
为了达到这个目的所采用的一切方法都可以归纳到性能优化上去。
那么性能优化包含了哪些呢?
我感觉分为
代码层的优化,中间件层的优化,数据库底层的优化。
代码层的优化就是设计的代码尽量科学,尽量可重用。比如说写identical的语句,这样,soft parse的概率仅可能高,
对数据库的CPU压力就更小。
java代码,c代码,或者plsql代码,都有自己的规范,可以保证语句怎么写更高效。
中间件层的优化
如果一个应用中有中间件的话,尽量把一些能本地拿到的信息都在本地拿了,
比如说,select sysdate from dual。这样的语句就不要再数据库上执行了,直接从中间件层抓取将大大减小损耗。
中间件层还可以多设置一些cache,来保存常从数据库抓取的信息。
还有就是,尽量维持一些和数据库后台的连接,因为中间件和数据库连接、断开操作
也是会有很大内存,cpu资源的损耗的。
后台的优化:
内存怎么设置更优(olap系统,dss决策系统,OLTP系统)
(sga,pga的分配,
sga 下面的share pool,buffer cache,分配。
pga 下面的 sort area size的分配。
Logbuffer怎么设置?
)
磁盘怎么规划更好
(底层的 盘阵层面Lun 打散
操作系统层面Lv是否要做strip?
on redo log 和 datafile是否要分开?
采用裸设备还是文件系统,或者ASM方式?
)
数据库的逻辑结构设计
( index 的建立方式?
表的建立方式?(pct free 设置多少最合理?常用的小表是否要放到keep池里?不常用的大表sort的时候再Lru list里的跟新方式?)
是否要采用物化视图?
top sql的调优?
top session的分析。
)
3,oracle函数与存储过程的区别?
4、是否会shell?是否会etl工具?
etl 是什么?
||||||||||||||||||
摘自 百度
作用 ETL负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。
ETL是数据仓库中的非常重要的一环。它是承前启后的必要的一步。相对于关系数据库,数据仓库技术没有严格的数学理论基础,它更面向实际工程应用。所以从工程应用的角度来考虑,按着物理数据模型的要求加载数据并对数据进行一些系列处理,处理过程与经验直接相关,同时这部分的工作直接关系数据仓库中数据的质量,从而影响到联机分析处理和数据挖掘的结果的质量。
数据仓库是一个独立的数据环境,需要通过抽取过程将数据从联机事务处理环境、外部数据源和脱机的数据存储介质导入到数据仓库中;在技术上,ETL主要涉及到关联、转换、增量、调度和监控等几个方面;数据仓库系统中数据不要求与联机事务处理系统中数据实时同步,所以ETL可以定时进行。但多个ETL的操作时间、顺序和成败对数据仓库中信息的有效性至关重要。
ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)作为BI/DW(Business Intelligence)的核心和灵魂,能够按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤。如果说数据仓库的模型设计是一座大厦的设计蓝图,数据是砖瓦的话,那么ETL就是建设大厦的过程。在整个项目中最难部分是用户需求分析和模型设计,而ETL规则设计和实施则是工作量最大的,约占整个项目的60%~80%,这是国内外从众多实践中得到的普遍共识。
ETL是数据抽取(Extract)、转换(Transform)、清洗(Cleansing)、装载(Load)的过程。是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。
信息是现代企业的重要资源,是企业运用科学管理、决策分析的基础。目前,大多数企业花费大量的资金和时间来构建联机事务处理OLTP的业务系统和办公自动化系统,用来记录事务处理的各种相关数据。据统计,数据量每2~3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占在总数据量的2%~4%左右。因此,企业仍然没有最大化地利用已存在的数据资源,以致于浪费了更多的时间和资金,也失去制定关键商业决策的最佳契机。于是,企业如何通过各种技术手段,并把数据转换为信息、知识,已经成了提高其核心竞争力的主要瓶颈。而ETL则是主要的一个技术手段。如何正确选择ETL工具?如何正确应用ETL?
目前,ETL工具的典型代表有:Informatica、Datastage、OWB、微软DTS……
开源的工具有eclips的etl插件。http://www.cloveretl.org/clover/
数据集成:快速实现ETL
ETL的质量问题具体表现为正确性、完整性、一致性、完备性、有效性、时效性和可获取性等几个特性。而影响质量问题的原因有很多,由系统集成和历史数据造成的原因主要包括:业务系统不同时期系统之间数据模型不一致;业务系统不同时期业务过程有变化;旧系统模块在运营、人事、财务、办公系统等相关信息的不一致;遗留系统和新业务、管理系统数据集成不完备带来的不一致性。
实现ETL,首先要实现ETL转换的过程。它可以集中地体现为以下几个方面:
空值处理 可捕获字段空值,进行加载或替换为其他含义数据,并可根据字段空值实现分流加载到不同目标库。
规范化数据格式 可实现字段格式约束定义,对于数据源中时间、数值、字符等数据,可自定义加载格式。
拆分数据 依据业务需求对字段可进行分解。例,主叫号 861084613409,可进行区域码和电话号码分解。
验证数据正确性 可利用Lookup及拆分功能进行数据验证。例如,主叫号861084613409,进行区域码和电话号码分解后,可利用Lookup返回主叫网关或交换机记载的主叫地区,进行数据验证。
数据替换 对于因业务因素,可实现无效数据、缺失数据的替换。
Lookup 查获丢失数据 Lookup实现子查询,并返回用其他手段获取的缺失字段,保证字段完整性。
建立ETL过程的主外键约束 对无依赖性的非法数据,可替换或导出到错误数据文件中,保证主键惟一记录的加载。
为了能更好地实现ETL,笔者建议用户在实施ETL过程中应注意以下几点:
第一,如果条件允许,可利用数据中转区对运营数据进行预处理,保证集成与加载的高效性;
第二,如果ETL的过程是主动“拉取”,而不是从内部“推送”,其可控性将大为增强;
第三,ETL之前应制定流程化的配置管理和标准协议;
第四,关键数据标准至关重要。目前,ETL面临的最大挑战是当接收数据时其各源数据的异构性和低质量。以电信为例,A系统按照统计代码管理数据,B系统按照账目数字管理,C系统按照语音ID管理。当ETL需要对这三个系统进行集成以获得对客户的全面视角时,这一过程需要复杂的匹配规则、名称/地址正常化与标准化。而ETL在处理过程中会定义一个关键数据标准,并在此基础上,制定相应的数据接口标准。
ETL过程在很大程度上受企业对源数据的理解程度的影响,也就是说从业务的角度看数据集成非常重要。一个优秀的ETL设计应该具有如下功能:
管理简单;采用元数据方法,集中进行管理;接口、数据格式、传输有严格的规范;尽量不在外部数据源安装软件;数据抽取系统流程自动化,并有自动调度功能;抽取的数据及时、准确、完整;可以提供同各种数据系统的接口,系统适应性强;提供软件框架系统,系统功能改变时,应用程序很少改变便可适应变化;可扩展性强。
数据模型:标准定义数据
合理的业务模型设计对ETL至关重要。数据仓库是企业惟一、真实、可靠的综合数据平台。数据仓库的设计建模一般都依照三范式、星型模型、雪花模型,无论哪种设计思想,都应该最大化地涵盖关键业务数据,把运营环境中杂乱无序的数据结构统一成为合理的、关联的、分析型的新结构,而ETL则会依照模型的定义去提取数据源,进行转换、清洗,并最终加载到目标数据仓库中。
模型的重要之处在于对数据做标准化定义,实现统一的编码、统一的分类和组织。标准化定义的内容包括:标准代码统一、业务术语统一。ETL依照模型进行初始加载、增量加载、缓慢增长维、慢速变化维、事实表加载等数据集成,并根据业务需求制定相应的加载策略、刷新策略、汇总策略、维护策略。
元数据:拓展新型应用
对业务数据本身及其运行环境的描述与定义的数据,称之为元数据(metadata)。元数据是描述数据的数据。从某种意义上说,业务数据主要用于支持业务系统应用的数据,而元数据则是企业信息门户、客户关系管理、数据仓库、决策支持和B2B等新型应用所不可或缺的内容。
元数据的典型表现为对象的描述,即对数据库、表、列、列属性(类型、格式、约束等)以及主键/外部键关联等等的描述。特别是现行应用的异构性与分布性越来越普遍的情况下,统一的元数据就愈发重要了。“信息孤岛”曾经是很多企业对其应用现状的一种抱怨和概括,而合理的元数据则会有效地描绘出信息的关联性。
而元数据对于ETL的集中表现为:定义数据源的位置及数据源的属性、确定从源数据到目标数据的对应规则、确定相关的业务逻辑、在数据实际加载前的其他必要的准备工作,等等,它一般贯穿整个数据仓库项目,而ETL的所有过程必须最大化地参照元数据,这样才能快速实现ETL。