由一条日志警告所做的调优分析
这个案例发生有段时间了,但是今天无意中看到当时的邮件,感觉还是收益匪浅,看来还是细节决定成败啊。从一些日志或trace 文件中的警告信息中我们可以发掘出潜在的问题。当时系统中的用户数很小,所以每天都能抽时间看看日志记录,看有没有明显的问题。结果在grep的时候发现trace文件中有一些警告记录。当时的库是10gR2的库...
使用strace分析exp的奇怪问题
exp算是一个经典的数据导出工具了。对于小数量的表来说,个人还是比较钟爱exp。毕竟expdp还需要配置directory而且还在服务端。exp在数据量小的情况下速度还是很理想的。关于exp导出的这个问题,已经拖了很久了,自己也排查了各种方法。通过查看wait event,查看exp的debug日志,都没有得出一些很有说服力的内容,今天下定...
awr性能问题排查第一篇
对于awr,里面涵盖的内容比较杂,有时候看报告的时候总是不知道该怎么下手。时间长了,可能会有一些阅读习惯或者心得。今天在看大师chris lawson的一篇博文对于awr的一些心得(http://www.oraclemagician.com/white_papers/10awr.pdf ),还是蛮有收获,赶紧按照这个方子来细细品味一番。首先是查看等待事件,这个也是...
联系生活来简化sql语句
目前生产环境中有一条sql语句的CPU消耗很高。执行时间比较长。从awr中抓到的sql语句如下:SELECT run_request.run_mode, cycle_groups.flow_id, cycle_groups.request_id, cycle_groups.dynamic_attributes, &nb...
胖客户端程序总结
这周基本功能都花在了胖客户端程序上,自己考虑做一个应用,个人比较倾向于胖客户端程序,主要考虑了一下几种。spring richclient开源的,自己之前的工作做了大量的应用,之前的公司也花了很多的精力和资源在这上面做了很多的客户化工作和优化功能,richclient已经很多年都不更新了,但是感觉还是亲切一些,所以自己也首...
走索引扫描的慢查询
今天查看awr报告的时候,发现一条sql语句异常。Elapsed Time (s)Executions Elapsed Time per Exec (s) %Total%CPU%IOSQL Id...
简单分析shared pool(一)
oracle中的shared pool很重要,但是感觉知之甚少。今天想在原来的认识上能够有一点更深入的了解。简单做了一个总结。首先是转储一下shared pool共享内存的内容。SQL> alter session set events 'immediate trace name heapdump level 2';Session altered.这个步骤会得到一个trace文件。简单的换算一下,就得到了trac...
关于降低高水位线的尝试
在前一段时间,生产环境中有几个很大的分区表,由于存在太多的碎片,导致表里的数据就几十条,但是查询的时候特别慢。很明显是高水位线导致的问题。一般来说这类问题,使用备份->truncate->insert的方式比较保守,不适用于在线操作。而在10g开始的一个新特性shrink算是一个比较理想的方案,按照新特性的预期,速度也是很快...
简单分析shared pool(二)
对于shared pool的学习,发现越尝试去了解,发现自己对它越不了解。里面的东西很杂。自己想用几个问题来作为引子来说明更加会有条理一些。shared pool的大小设置对于shared pool的大小设置,从早期版本到现在一直都带有争论。从操作上来说,需要设置shared_pool_size就可以了,如果启用了sga_target或者11g里的memory...
和Null有关的函数
关于null相关的函数在日常的工作中还有比较实用的,可能会碰到各种和Null校验相关的情况,大体有以下几种。case whendecodenvlnvl2lnnvlnullifcoalsce-->case whencase when算是这个比较通用的方法,可以支持各种复杂的逻辑判断,对于Null的校验也不在话下,可能相对来说程序会略显臃肿。在性能方面还没有...
通过shell脚本监控sql执行频率
在生产环境中,可能会存在各种潜在的sql问题,比如由于硬件资源导致,如果影响到了IO,CPU,就会导致一些本来运行很快的sql语句变慢或者系统响应严重减缓。比如由于数据库的一些设置导致执行计划的问题,sql_profile导致的执行计划稳定带来的性能不稳定,表中统计信息的变更导致的执行计划的变化等等。有时候等到问题发生...
外部表简单总结
对于外部表的使用而言,可能是既陌生又熟悉的感觉,说陌生可能自己真正的使用机会要少一些,而熟悉可能是大家比较常用的通过外部表来查看数据库日志,其实外部表还有更丰富的内容。当然了外部表的使用都是基于目录来实现的。外部表调用的引擎有两个,一个oracle_datapump引擎,一个是oracle_loader引擎,在使用中和datapump...
关于正则表达式第四篇
正则表达式,林林总总说了几篇,还是有不少的内容需要补充。-->星号字符出现0次或者多次$ echo "ik"|sed -n '/e*/p'ik$ echo "ieek"|sed -n '/e*/p'ieek$ echo "This is a color TV"|sed -n '/colou*r/p' --colour中的u可以出现0次或者多次。出现0次的时候color就符合条件This is a color TV$ echo "This ...
实用的top命令
对于系统级的监控来说,top命令是实用而高效的瑞士军刀。相比vmstat,sar来说提供的是实时的进程信息,对于监控性能,排查问题是很高效的。而且提供了交互式的命令模式,能够灵活的对输出结果进行组合。如果数据库系统中存在着cpu或者内存的过度使用,或者说IO等待较高,都可以通过top命令进行一个快速的定位到系统进程信...
关于oracle中的半连接
表的连接在sql语句中尤为重要。外连接,内连接,半连接,反连接等等各种连接,看似简单的一个连接里面还是有不少的细节的。对于sql调优来说也是很重要的。像下面的形式的sql就属于半连接,使用了in子句,对于exists的实现也是属于半连接。--in半连接SQL> select dname from dept dept where deptno in (select dept...
关于索引的使用模式
索引的使用对于一些庞大的sql语句来说,大多数的调优场景中有种雪中送炭的感觉,如果几百万,几千万的数据筛查,全表扫描将会是一个极度消耗资源的过程,但是如果走了索引扫描,可能性能会提升成百上千倍。索引的访问模式有以下几种,其实有些时候对有些细节还是不太注意。对不同的使用场景可以有一定的针对性,效率也许更...
关于表联结方法(一)
在sql语句中,如果from后面有多个表时,关于表的联结方法是很重要的一个环节。大体有nested loop join,hash join,merge join-->nested loop join这种场景一般适用于大表和小表的关联,一般来说小表适用做为驱动表,对于小表中的匹配记录和大表做关联,这个时候小表是在外部循环,大表在内部循环,小表中的匹配记录都和...
数据库静默安装总结
在学习数据库的时候,不知道dbca的命令用了多少遍,但是越是安装也是觉得自己会的越少,因为图形界面的清晰直白反而不知道哪些准备工作是需要特别准备的,如果在远程支持的环境中,图形界面就会受到网络带宽的影响,如果在本地的环境中学习的时候,总是提示少这个包,那个包的。其实有很多的安装包如果不使用图形界面都不...
关于oracle中的sql数据类型
数据类型对于每一种编程语言而言都是数据存储的基础,对于编程语言的实现功能而言也是一个标尺,有些编程语言可能数据类型很丰富,比如java,c,在数据计算方面的支持很全面,有些编程比较精简,更侧重于实现特定的功能,数据类型也就简单得多。比如说shell。对于oracle中的sql来说,数据类型的支持非常全面,无论是数据计算...
关于dual表的破坏性测试
关于dual表的破坏性测试,既然是破坏性测试,就需要确定这个测试仅限于测试或者个人学习所用,可能有些sql看似极为简单,但是一旦运行就会导致整个业务系统崩溃。比如说我们拿dual表开刀,这个表是一个dummy表,里面的内容没有特定的意义,就是为了存在而存在。但是一旦这个表出现问题,所有相关的基础操作都会受到影响,...