执行计划的偏差导致的性能问题
在生产环境中哟一条sql语句,查看执行计划来看,效果还是可以接受的。sql语句类似下面的样子,可以看到里面还使用了比较纠结的外连接。从执行计划来说,默认是走nested loop join,数据的查取中会走索引,从oracle的分析来说这样的效果要好一些。 SELECT /*+ leading(cyc_cust,cyc_pay) */ CUST....
关于session leak的问题分析
在生产环境中,作为dba需要对系统的负载有一个很清晰的认识。能够在很快的时间内能够发现系统潜在的问题,并且及时定位问题,高效的响应和处理问题。比如说对于生产环境的session leak问题,这个部分是awr都很难捕捉到的信息,如果问题比较隐蔽,连ash也很难定位。比如说在早上9点的时候某个程序出现了session leak的问题...
浅谈pl/sql
关于pl/sql,可能大家熟悉而又陌生,熟悉是因为大家在工作中老是写sql,如果稍微改动一些,加入begin,end和控制结构,就是pl/sql了。:) 今天和大家简单讨论一下pl/sql。不谈技术细节,泛泛而谈。 我自己在以前的总结中提出了以下几个问题,自己来按照这个思路来解答一下,可能大家印象中的pl/sql和sql还是有很大的差...
pl/sql中错误的异常处理
pl/sql中对于错误的处理是很重要的一个部分,就跟写程序中对于异常的处理一样。可能程序中正常的流程实现部分不是很复杂,但是对于各种可能发生的异常情况都需要面面俱到的处理要占一半以上的代码量。首先Pl/sql中的异常处理需要重视,但是异常的处理绝大多数的人写pl/sql的时候都不够重视,通常在数据处理完之后对于异常...
多行数据的批处理之bulk collect
在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。类似下面的格式declarecursor xxxx is xxxxx;beginloop cur in xxxxx loopxxxxxend loop;end;/如果cursor中包含的数据太多的时候,可能会有性能问题,性能的考虑主要在于pl/sql引擎和sql引擎的切换,和编...
查看并行进程的一些简单信息
在使用并行的时候,总能看到进程中出现一些ora_p这样的进程。SQL> !ps -ef|grep ora_p|grep TESTDBtestdbuser 17422 1 0 Aug29 ? 00:04:56 ora_pmon_TESTDBtestdbuser 17425 1 0 Aug29 ? 00:01:12 ora_psp0_TESTDBtest...
关于修改数据库参数的测试
在性能调优的时候,会发现很多类型的问题,有些问题可能通过使用隐含参数就能够解决,不过这种变更需要特别注意,因为做隐含参数的变更无形中会影响到其它的sql语句运行。如果为了个别的问题而做了变更,导致了整个系统问题,那就得不偿失了,这中变更一定得经过测试,至少在测试环境中部署测试过,而且解决的问题可能是...
利用sql语句解决简单的数学题
今天在解决一个问题的时候,发现自己的数学水平严重下降,现在是光有思路没有答案,自己简单算了几个答案,还是不太满意。最后尝试写了一个简单的pl/sql就解决了。问题是这样的,一个系统的处理结果会提供两个参数,用这个参数来衡量系统的情况,一个我们设为pass_ratio,另一个设为fail_ratio. 我们假设需要投入时间分别...
关于dblink锁定带来的问题
可能在一些分布式环境中,有一些数据访问都需要用到db link。从某种程度上来说dblink是很方便,但是从性能上来说还是有一些的隐患。如果两个环境之间的网络情况不好,也会无形中给系统带来更多的等待。
海量数据迁移之一个误操作的问题总结
在生产环境中的数据迁移还是很惊心动魄的,毕竟生产的数据不容许有任何潜在的问题,很小的问题也可能导致业务的终端,这个时候dba的角色是很重要的,如果dba犯了一个很细小的问题,在海量数据迁移中可能会导致灾难性的结果,所以今天和大家讨论一下关于由vi误操作导致的问题及总结。结合今天早上的例子来说明。目前生产环...
海量数据迁移之误操作和防范建议
在生产环境的数据迁移中,发生误操作真是很不愿意看到,今天自己总结了一下,从个人的经验来看有以下的几种操作或者是失误导致的问题。有一些错误自己已经犯过。外键不管是使用imp/impdp,sqlldr还是使用Insert append的方式导入数据,如果存在外键的约束,在数据导入前最好都设置为disable,要不数据导入的时候很可能发生...
通过vmstat的简单分析数据库操作
vmstat一直以来就是linux/unix中进行性能监控的利器,相比top来说它的监控更加系统级,更侧重于系统整体的情况。今天在学习vmstat的时候,突然想看看数据库中的并行对于系统级的影响到底有多紧密,自己简单测试了一下。首先来看看vmstat的命令的解释。可能大家并不陌生,如果需要每隔2秒,生成3次报告,可以使用vmstat 2...
生产环境sql语句调优实战第八篇
生产环境中的sql语句执行时间是很关键的性能指标,如果某个sql语句执行几个小时,优化以后几分钟,几十秒的话。会有很大的成就感,同时如果某个sql语句执行10秒,能够优化到1秒,感觉提升的幅度不是很大,但是如果这条语句执行极为频繁的话,那这种调优还是更有成就感的。执行时间是sql调优的一把标尺,但是同时也需要考虑到...
一条"简单"的sql语句和小兔子买面包的故事
有时候开发人员写sql语句的时候,接触的性能问题越多,可能对sql语句的结构,性能考虑会多一些,这也是一件好事,不过如果考虑不当,本来原本想做的的一些优化却使得问题变得更加严重。在生产环境中我们对指定的客户端都有一定的监控,在下午的时候发现一个sql语句执行的时间太长了,抓到语句,一看倒不复杂,是一个开发人员...
关于修改分区表的准备和操作细则
在之前的博文中,讨论过一个根据分区键值发现性能问题的案例。90%以上的数据都分布在了一个分区上,其它的分区要么没有数据要么数据很少,这是很明显的分区问题。当然这个过程中也发现了分区的划分从开发角度和数据角度还是存在很大的差别,导致了分区的问题。通过分区键值发现性能问题 http://blog.itpub.net/237187...
oracle PL/SQL中的重载
在java中,有方法重写,方法重载,重载的一个典型例子就是类中的构造函数,可以根据自己的需求定义多个构造函数,默认是一个无参数的空函数。重写是基于父类子类之间的多态性体现上,父类的一个方法,在子类中可以重写.oracle中也可以有重载的实现。自己在总结的时候归纳了一下两种。一种是通过包来实现,一种是通过pl/s...
关于pl/sql的代码保护
在开始学习数据库的时候,总是尝试手动创建数据库,安装完成之后需要运行一些脚本,总是看到屏幕上闪个不停,可以看到大多数的存储过程代码都是一堆乱码,最开始还以为是乱码了。:)有时候心血来潮想看看里面的代码,但是基本上都是看到存储过程名或者函数名,再细节的代码都被屏蔽掉了。大家在运行awr,ash的时候,也看...
关于正则表达式第一篇
正则表达式在编程语言中,数据库中,linux中都有着广泛的应用,一说起正则表达式就有些高深晦涩的味道,正则表达式精炼而重要,在Linux中有着举足轻重的作用,也是学好sed,awk的一个基本门槛。正则表达式是基于正则表达式引擎来实现的,引擎主要有以下两类。可能大家对这个比较陌生。POSIX基本正则表达式引擎 BREP...
关于正则表达式第二篇
在第一篇中介绍了关于纯文本和特殊字符在正则表达式中的应用,来看看其它的一些相关的点。--关于锚定锚定就跟大家在开发网页的时候使用的锚定是一个意思,其实就是给一段字符做个标识。对于行首使用是^,对于行尾使用时$,可能大家并不陌生。锁定在行首$ echo "The book store" |sed -n '/^book/p' &...
由一条sql语句导致的系统IO问题
早上来到公司,照例进行了简单的检查,发现系统负载不高,就开始计划一些sql tuning的工作,但是过了一会,在通过shell命令查找一些sql信息的时候,发现系统的反应有些慢,当时也没在意,当我查看v$session都开始慢的时候,感觉哪里出了什么问题了,最直观的感受就是一些命令的运行都很缓慢了。首先查看了一下数据库的负载...