生产环境sql语句调优实战第六篇
生产环境中有大量的sql语句在运行,尽管有awr,ash做数据的收集统计,但是dba的调优工作大多数情况都是在问题已经发生后做排查的,有些sql语句可能执行的时间有1,2分钟左右,但是sql语句本身有潜在的性能问题,通过awr是定位不到的,ash尽管能够查到,但是我们在未知的情况下怎么知道问题发生的精确时间点,通过sql monito...
批量转换分区表为普通表
今天数据迁移的小组找到我,希望我能够重新构建一些测试环境,其中测试环境中的一些分区表都需要去掉分区,转换成普通表的形式,因为他们在做一些工作的时候碰到了问题,而且希望必要的约束等都保留,这个需求听起来倒不复杂,很清晰,我看了下需要转换的表,一看有将近100多个,而且重构好几套环境,想想都头疼。这个需求...
海量数据迁移之通过shell估算数据量
在数据迁移的时候,需要根据用户量来评估需要在表空间理添加的空间大小。比如迁移5百万的用户和迁移200万,两者需要添加的数据量差别很大,在资源有限的情况下,需要一些比较合理的估算,毕竟在生产环境中做数据加载的时候报了空间不足的问题就是准备太不充分了,稍后的数据修复任务就难上加难。比如我们现在客户提供了如...
使用Linux命令发送邮件
在平时的工作中,可能很多环境都有自己的内网环境,如果发生一些问题的时候,可以通过内网环境发送邮件到指定的邮箱中。这种略显智能的方式可能在很多工作场景中使用,一般都需要设置对应的网络配置,邮件设置等等,本文仅通过简单的Linux命令来发送一些比较简单的邮件。环境目前经过测试,仅适用用redhat,centos环境。...
使用utl_file做选择性数据导出
在平时的数据导出中使用exp/expdp能够满足绝大部分的数据导出任务。如果有一些表的数据不多,但是查询条件要复杂一些,使用exp/expdp就很吃力了。或者在和外部系统的交互中,使用xml或者文本文件是一个很兼容的选择,这个时候使用exp/expdp也满足不了要求。这个时候可以考虑使用utl_file的提供的一些功能来做选择性的数据...
关于oracle session的简单测试
平时查看v$session的时候要定位一个session,需要sid,serial#这个两个值,其实更多时候我们关注更多的是sid,对于serial#却不太了解。 至少从v$mystat中,可以看到,是只能定位到sid的,对于serial#的值还需要借助v$session来查找。 SQL> desc v$mystat Name ...
使用dbms_metadata生成建表语句
有时候在工作中,可以使用exp/imp得到表的创建语句。如果想得到关于table,index,constraint的语句,可以考虑使用dbms_metadata来实现。我们可以使用如下的脚本来得到建表语句,对应的索引语句,和ref_constraint语句。建表语句就不多说了,关于索引的部分,过滤了主键和唯一性索引的部分,这些语句会和建表语句中的cons...
一个普通数据库用户所能查到的"意料之外"的信息
有时候限于工作环境的情况,大多数开发人员只得到了一个权限收到限制的数据库用户。可能你都不知道你所拥有的数据库用户都能查到哪些你想象不到的数据库信息,其实你知道还是不知道,哪些东西就在那儿:)假定现在给你一台机器,让你在一个已经登录的sqlplus环境下自己探索一把,在短时间内完成下面的工作,你心里有底吗?...
生产环境sql语句调优实战第七篇
在数据迁移完成之后,开始了例行的后期数据库维护,早上一来就发现了一个sql执行时间很长了。达到了37279秒。最后在改进调优之后执行速度在1分钟以内。这个速度是毫无疑问的性能问题,但是是否是因为数据迁移直接导致的呢,通过简单的脚本分析,得出了如下的图表。显示了同样的sql语句在7月份至今的执行情况,还真是奇怪...
使用dbms_parallel_execute来完成DML的并行
在工作中使用并行可以极大的提高工作效率。可以Object,session.hint级别引入并行。可以使大量的数据处理更加高效。比如现在有一个表 t 有1000万行,如果想以这个表为基础,把数据选择性的插入另外一个表t2,使用Insert into t2 select *from t;使用并行来处理也没有问题,但是如果使用dbms_parallel_execute也是一种...
查看空间使用情况的脚本
在数据库中,我们可以使用如下的3个脚本来查看表空间的使用情况,表空间的增长情况,表未使用的空间情况等等。showunused.sh 可以查看未使用的空间情况sqlplus -s n1/n1 <<EOFprompt ------- $1.$2 prompt .set serveroutput onset feedback offvariable total_blocks number; variable total_bytes num...
关于ORA-00020问题的反思
今天在生产环境中查看alert日志,发现了如下的一段错误。这个错误确实没有太多需要解释的。很明显就是因为session leak的经典问题。ORA-00020: maximum number of processes 5000 exceededORA-20 errors will not be written to the alert log for the next minute. Please look at trace files to see all ...
融会贯通学习trigger
很多的东西在工作中用到的时候才能理解深刻,有些东西停留在理论层面而不去实践,就不会真正理解。昨天写了一个很简单的trigger,但是中间也费了一些周折。系统中碰到一个很严重的问题,一个数据处理引擎是基于表驱动设计的,里面的一个表中已经pending了很多的事务信息,对系统造成了严重的影响,为了第一时间排查这个问...
关于纠结的recycle pool的设置
现在生产环境中目前有一个很大的中继表,作为多个流程的数据流动所用,数据量很大。里面有clob字段,加上庞大的数据量,表就显得很臃肿了。目前在做大批量的数据处理的时候发现了一些问题,事物数在不断增加的情况下,数据的处理速度也在不断的降低。最后出现了一些资源的问题。在抓取了awr和同事的分析之后,产品部门...
关于查看文件的几个小命令
关于分页查询的优化思路
目前在生产环境中有一个sql语句执行时间长达7分钟,而且执行频率极高。其中PROC_INST中有将近6千万的数据。其中STEP_INST是一个物化视图,里面还有5千多条数据。可以看到这个语句已经有了一些调优的痕迹,可以从里面的子查询和hint能够看出一些信息。SELECT PROC_INST.OBJID, PROC_INST.CREATION_TIME FROM PROC_...
关于抓取session信息的一个脚本
关于session的诊断,可以基于动态性能视图,ash,awr..自己也写过一些简单的脚本,在平时的工作中也能够完成一些基本的工作。今天在看taner分享的脚本snapper的时候,让自己眼前一亮,也发现自己存在着很多的不足的地方。可以从脚本中看到他孜孜不倦的分享着自己的心得,而且自己也写了一些更加深入的一些工具集来解析orac...
性能下降的不定时炸弹_过旧的sql_profile
最近这一周以来,生产环境像是得了重病的病人一样,小问题没有修好,大问题不断。IO的等待极为严重。数据库的负载达到了几十倍,上百倍。weblogic和tuxedo在很大程度上都受到了影响,导致业务响应极为缓慢。在排查了中间件部门,数据库,存储,网络,操作系统等各个层面,也发现了存储的一些小问题,问题比较大的就是数...
一条执行4秒的sql语句导致的系统问题
一般来说一条sql语句执行个4秒钟是可以接受的,没有什么问题,但是如果应该执行1秒,却执行了4秒,问题就挺大的了。今天查看数据库负载,发现在中午12:00 到1点之间,数据库的负载急剧增加,负载达到了百倍。Snap IdSnap TimeSessionsCursors/Session...
关于评审开发人员的sql语句
在平时的工作中,经常会有一些开发人员提出一些数据库相关的一些问题。可能问的最多的就是sql语句了。按照一个标准的流程,开发提交的sql语句在完成一系列测试之后,在生产部署前,还需要dba来进行审核。如果是紧急的补丁,也一定不要漏了这个问题。有时候是开发嫌麻烦,要不是开发嫌dba麻烦,这个review的过程还是很必要...