关于索引扫描的极速调优实战(第二篇)
在上一篇http://blog.itpub.net/23718752/viewspace-1364914/ 中我们大体介绍了下问题的情况,已经初步根据awr能够抓取到存在问题的sql语句。这条sql语句执行很频繁,目前平均执行时间在0.5秒。开发部门希望我们能不能做点优化,他们也在同时想办法从业务上来优化这个问题。从0.5秒的情况下,能够再提高很多,是得费很大力...
关于索引的内部信息
在oracle中对于索引的存储都是采用B树索引来实现。B树索引是比较成熟的一种数据存储结构,在很多的软件中都有大量的应用,oracle中也不例外。因为B树索引是树形结构。存储的时候也是带枝带叶的。简单来说,索引就像文章里的目录,字典中的词条检索项。索引分为根节点,分支节点和叶子节点。这种结构对应生活中的树来说明就...
关于long类型的转换
在oracle中对于long类型的处理时很纠结的。最开始引入这个数据类型的时候是对原有数据类型的补充,但是后面发现还是碰到了一些问题,使用Lob类型代替了。但是long类型从兼容性上来说还得支持,而且从数据库的数据字典中还是能够看到Long类型的影子。比如我们想查看一个表中某个列的默认值情况,可以查询user_tab_cols,或者...
关于reset sequence
sequence在工作中使用比较频繁,对于Insert中插入的值,如果只需要它能够自动递增,这个时候sequence就派上用场了。但是既然sequence的值需要递增就有可能会达到最大值。比如sequence从1开始递增,递增幅度为1,最大值为100,那么很快就会达到最大值。我们可以指定sequence的值。这个时候可以使用删除,重建的方式,但是这种...
MySQL数据类型
今天在本地装了一个MySQL的学习环境,简单的熟悉了一下。准备开始好好学习MySQL了。学习编程语言我都是从数据类型入手。每种编程语言的数据类型都有自己的特点,有点简单,有的种类丰富。总体感觉而言,MySQL的数据类型要比oracle丰富的多。用惯了oracle中的数据类型,一般number,varchar2,date就足够了,最常用的这3个数...
使用shell定制addm脚本
在10g开始推出的addm对于工作中的调优能够提供很多的帮助,而且建议也更加客观和全面。但是使用addmrpt.sql的时候还是有些慢,可以使用如下的脚本来定制addm,能够根据快照生成指定的addm报告。脚本的内容如下:相比于定制awr,ash要略微有一些难度。对于addm目前只提供了文本格式的内容,所以格式的处理上没什么特别的地...
关于等待事件"read by other session"
在查看数据库负载的时候,发现早上10点开始到12点的这两个钟头,系统负载异常的高。于是抓取了一个awr报告。Snap IdSnap TimeSessionsCursors/SessionBegin Snap:2402718-Dec-14 10:00:433065...
聚簇因子和执行计划的联系
SQL> select *from t1 where rownum
通过sql语句分析足彩(第三篇)
在之前写过两片关于sql语句分析足彩的。都从不同的角度提供了一些思路,之前是基于500场比赛的数据分析,为了数据分析的更加有说服性,我抽取了7000多场比赛的数据来作为分析的基础。自己是在世界杯的时候开始买的,发现真是期望越大,失望越大.。来看看总体的比赛情况。从1月份开始到10月份,有大概7000多场比赛。我们...
探究AWR 第二篇
在探究awr第一篇中介绍了awr的一些基本操作 http://blog.itpub.net/23718752/viewspace-1123134/在这一篇中,我们来分析几个awr报告来探究一下awr的一些信息,其实在报告中有很多的信息是互相印证的。对于我们深入理解awr报告还是很哟帮助的。首先来看看CPU负载的分析,这个也是理解awr的一个切入点。CPU资源的考虑...
关于导入dump
在工作中,dump文件对于dba而言是再平常不过的文件了。 不过在导入dump文件的时候还是有很多的细节可以注意,可以避免一些不必要的问题。 exp/imp是比较经典的数据导出导入工具,不过自expdp/impdp推出以来,exp/imp还是受到了不少的冷落,在新的版本中,支持力度都集中在了expdp/impdp上面。不过不管怎样,exp/imp还...
一次数据库无法登陆的问题及排查
今天在中午的时候,收到客户的邮件,说数据库访问有问题了,赶紧连到生产环境查看。结果在尝试登录的时候报了listener的错误,感觉像是listener停了一样。> sqlplus n1/n1@xxxxSQL*Plus: Release 11.2.0.2.0 Production on Mon Dec 29 12:33:23 2014Copyright (c) 1982, 2010, Oracle. All rights reserved.ERRO...
crontab导致CPU异常的问题分析及处理
今天查看数据库负载没有发现问题,但是当我使用top命令的时候,发现有一个进程占用了大量的cpu资源而且已经执行很长时间了。这一下子引起了我的注意。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ...
几个行列转换的实用小例子
create table session_test as select *from v$session;select count(*)cnt,status from session_test group by status;STATUSVARCHAR2(8)Status of the session:ACTIVE - Session currently executing SQL...
分析函数之窗口子句
关于分析函数,可能大家基本都是从row_number()开始了解到的。分析函数的使用在某种程度上可以避免自连接,使得原本较为繁琐复杂的查询一下子变得精简起来。分析函数分为分区子句,排序子句,和窗口子句,对于窗口子句来说,可能开始比较难懂,这部分的使用也尤为重要。还是先举个例子,然后基于例子再来简单分析一下分...
通过java程序抽取日志中的sql语句
今天在翻看以前的笔记时,发现自己在很早之前写过一个java程序,能够解析日志中的sql语句。当时使用的环境是weblogic,日志目录下总是有几十上百个日志文件,有时候排查问题的时候只需要找到对应的DML语句即可。使用linux命令固然也可以,但是解析的时候还是比较被动,不能够正确地解析出sql语句来。比如日志中出现inser...
关于order by中的数据排序
今天开发的一个同事找到我,说碰到一个比较奇怪的问题,说两个等价的查询类似下面的形式。select *from test where account_id=xxxxxx order by creation_dateselect *from test where account_id=xxxxxx and entity_id=xxxxx order by creation_date两个查询都会返回4条结果,但是第一个查询和第二个查...
oracle中的数组(第一篇)
数组在各种编程语言中都是很重要的数据结构实现,在oracle中也有自己的一席之地。自己简单做了几个实验,发现很多东西还是眼高手低,真实去做的时候,里面还是有不少的细节的。首先数组大体可以有以下几种。固定长度的数组变长数组多维数组如果说实现方式,就有varray,嵌套表,record等等。我们从varray来开始。比如实...
巧用分析函数循序渐进解决实际问题
今天同事问我一个问题,他说问题的逻辑很清晰,但是感觉无心下起。问题的逻辑大体是这样的。有一个表,存在着大量的数据,比如account_id为1代表account的编号,可以把这个account做暂停操作,相当于把账户冻结,然后在一定的时候后做恢复操作,相当于把账户解冻。就对应ACTIVITY_CODE的 SUSPEND,RESUMEACCOUNT_ID ACTIVI...
关于导入导出sequence
sequence在平时的工作中是一个默默无闻的角色。可能创建好之后很少会去修改它,它就在默默地自增长。直到一些特殊的原因导致sequence出现问题,比如提供了一个脚本,需要使用insert语句修复一些问题,修复的语句类似insert into test values(100,xxxxxx,xxxx);正确的写法应该是insert into test values(test_seq.nextval,...