使用shell脚本查看数据库负载情况(第二篇)
在之前写了一个shell脚本,能够得到一个基于时间点的数据库负载报告。使用shell脚本查看数据库负载情况 http://blog.itpub.net/23718752/viewspace-1168027/在生产环境中快照的生成频率可能10分钟或者半个小时就会生成,频率要快些,使用原先的脚本执行起来会有一定的延时。想查看在快照的时间间隔内数据库的负载...
探究AWR 第二篇
在探究awr第一篇中介绍了awr的一些基本操作 http://blog.itpub.net/23718752/viewspace-1123134/在这一篇中,我们来分析几个awr报告来探究一下awr的一些信息,其实在报告中有很多的信息是互相印证的。对于我们深入理解awr报告还是很哟帮助的。首先来看看CPU负载的分析,这个也是理解awr的一个切入点。CPU资源的考虑...
通过shell绑定系统进程调优
数据库的性能调优,需要基于操作系统的性能指标,如果操作系统级发生了一些状况,那么会潜移默化的影响到数据库层面。而数据库中对应的进程和操作系统级也有一定的映射关系,在专有服务器模式下大体如此。有时候如果你注意到操作系统级有一些进程消耗资源高,那么很可能这个进程对应的数据库进程存在潜在的问题,这种方法...
通过shell脚本来得到不稳定的执行计划
生产系统中总是可能碰到各种各样的sql问题,其中大部分问题都和执行计划有关,执行计划出现问题有很多原因导致,比如统计信息过旧,比如数据的分布极不均匀等等都会导致执行计划出现很大的偏差。可能有的sql语句在一周时间内,有一天执行只需要5秒,过了几天之后却需要几个小时,这种执行计划时需要格外重视的,这种问题目...
delete相关的pl/sql调优
今天开发找到我,说有个问题想征求一下我的意见。问题的大体意思是,对目前环境中的两个表,我们就叫做表a,表b吧,他说根据一个时间字段去判断是否为5天前的记录,但是这个字段不是索引列字段。想问我是否需要添加索引会能极大地提高性能。对于这个问题没有肯定的回答,还是取决于数据和表的特性,首先我看了下...
通过shell脚本来统计段大小
今天到公司之后,就收到客户的邮件,他们提供了一个列表,希望我们能够们配合提供一份比较详细的报告,得到某个表在生产环境中所占的空间大小,他们需要根据这些信息来分析一个需求做相应的处理,这个问题处理起来还是很容易的,感觉分分钟搞定,但是自己去查看的时候,发现还是要考虑一些细节,比如这个表如果是分区表,s...
浅谈exp/imp(上)
作为DBA,经常需要在不同数据库环境间做数据的导入导出,exp/imp就是这样的轻便快捷的客户端工具,可以很方便的在不同数据库之间转移数据对象,即使数据库位于不同的硬件或者软件平台上。exp会转储产生对应的二进制文件,里面包含数据的定义信息,数据内容等,也就是我们通常所说的dump文件。exp/imp是比较经典的数据...
简单分析shared pool(三)
提到shared pool,都会不由得和sql语句的解析过程联系起来,因为shared pool所做的主要工作就是解析sql语句,生成执行计划,在之前的两篇中对于shared pool的存储进行了简单的分析,在10g,11g都是保留了255个bucket,可见这个值还是一个最优的默认值了。在第二篇中分析了一些关于绑定变量的内容,一般一提到sql语句的解析...
基于DB time的调优分析
继昨天使用DB time能够快速灵活的定位sql语句之后,发现分析问题更快捷,高效了。今天就牛刀小试,把一个数据库从500%的负载调到不到100%的负载。前提是确实有可提升可改进的空间。首先查看了在快照57611的时间段里DB time很快,也收到了zabbix的邮件通知,
查询表的高水位,并手动降低表的高水位以释放表占用的空间
---很多时候,当表进行了频繁的操作以后,特别是当表中的大量数据被delete掉以后,表的高水位并不会降低,表空间自然也下不来,有的时候我们可能需要手工的去处理以释放表空间,这样也有助于提高性能。下面通过一个例子来说明:[@more@]SQL> create table tyy as select * from dba_objects;Table created.SQL> insert into tyy select * from tyy;71800 rows created.SQL> /143600 rows created.SQL> commit;Commit complete.SQL> insert into tyy select * from tyy;287200 rows created.SQL> commit;Commit complete
浅谈Oracle的undo管理
1、什么是undo 当我们对数据执行修改操作时,数据库会生成undo 信息,这样一旦执行的事务或语句由于某种原因失败,或者发出一条ROLLBACK 语句请求回滚,就可以利用这些undo信息将数据放回到修改前的样子。undo 信息存储在一组特殊的段中,这称为undo 段(undo segment)。select segment_name,tablespa...
Redo Log之一:理解Oracle redo log
1. 什么是Redo logRedo log包含所有的数据库变化历史,数据库的所有操作变化,均按照写入重做日志缓冲区先于数据块缓冲区、写入重做日志文件先于写入数据文件;当发生提交动作时,将重做日志缓冲区变化刷到重做日志文件。重做日志文件一般用于数据库恢复(实例恢复和介质恢复)、Log Min...
oracle使用profiler分析语句执行效率
profiler 从时间上分析sql语句,寻找效率较差的地方,便于优化
ORACLE 11g Result cache使用指南
何为result cache?result cache,结果缓存,当表的访问方式以读为主前提下,从一张大表中过滤出少量的记录作为结果集的查询语句适合把查询结果集放入result cache,后续相同的查询语句可以直接从result cache里获取想要的结果,省去了CPU、I/O上的开销,result cache位于shared pool里的某一块区域中,其大小可以通过resul...
Oracle的pipelined函数实现高性能大数据处理
原文地址:http://mikixiyou.iteye.com/blog/1673672 在plsql开发中,会涉及到一些大数据量表的数据处理,如将某记录数超亿的表的记录经过处理转换插入到另外一张或几张表。 常规的操作方法固然可以实现,但时间、磁盘IO、redo日志等等都非常大。Oracle 提供了一种高级函数,可以将这种数据处理的性能提升到极限。这种函...
[Logmnr]使用logminer找回被误删的数据
LogMiner日志挖掘技术在有些时候可以被比作是命悬一线的救命稻草,比方说误删除数据(如delete执行不当),可以通过LogMiner挖掘日志文件将这些数据补插回来使用LogMiner预览: LogMiner的原理就是找出日志文件(redo file),所对应的undo.如你新增1W行数据,在redo里以insert形式体现,对应的undo即为delete...
Oracle官方文档下载与旧版本下载
非常著名的Oracle官方文档汇总的下载地址:http://tahiti.oracle.com/另外,对于10g以前的若干安装版本当前官网已经没有提供下载地址了,但可以通过提交一个SR来寻求帮助。...
相同更改数据量的前提下,单次COMMIT和多次COMMIT对日志空间浪费的影响对比
LGWR进程按照顺序写在线日志,中间不会跳跃,而且LGWR进程不会在同一个日志快写2次,即使一次写入的日志快只占几个字节,下次不会再用了,这就造成日志空间的浪费。Oracle做一次Commit,就会触发LGWR进程进行日志缓冲到日志文件的写入操作,因此可以说更改相同数据量的前提下,如果提交过于频繁,产生的日志可能就会越多...
alter table新增字段操作究竟有何影响?(上篇)
很久以前就有个疑问,见过一些表设计时会留出几个reverse的字段,目的是为了以后扩展,但此时设计的字段类型、长度等都是预计的,未来是否可用,不好说,那为什么会这么做呢?可能的原因是:“我现在设定好字段,需要的时候直接用就行了,不需要新增字段的操作”。那么,问题就是,新增字段的操作究竟有什么影响...
记录Record、PL/SQL表和二维数组
一、什么是记录Record和PL/SQL表?记录Record:由单行多列的标量类型构成的临时记录对象类型。类似于多维数组。PL/SQL表:由多行单列的索引列和可用列构成的临时索引表对象类型。类似于一维数组和键值对。两者都属于用户自定义数据类型。二、Record + PL/SQL表 用途是什么?Record + PL/SQL表可以进行数据的多行多列存储。这样我们就可使用Record + PL/SQL表在需要时封装一个临时的表对象,进行传递和操作。通过Record自定义表结构,封装一条记录。PL/SQL表声明 可用列 类型为Record类型(将可用列指向Record类型变量),每个索引对应一个Re