对分区表导入导出的水平,垂直切分
在工作中有时候碰到一些分区表,业务数据量很大,可能几百G,上T的规模,而且做数据的导入导出的时候,会感觉到exp/expdp的时候生成的dump文件太大了,做导入的时候也是很重的负担。比如500G的dump,你在使用imp做导入的时候,别无选择,只能看着日志里partition里的数据一个一个被导入。impdp可能稍微好点,还能指定个并...
循序渐进调优union相关的sql
今天在生产中发现一条sql语句消耗了大量的cpu资源。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND &...
关于sequence问题的紧急处理
今天早上收到邮件,说有一个很紧急的问题,是关于sequence的。错误日志里面还有ORA的错误----- ... 7 more Causedby: java.sql.SQLException: ORA-08004: sequence TRX_1SQ.NEXTVAL exceedsMAXVALUE and cannot be instantiated 猛一看就是sequence的值越界了。导致这个问题的原因主要...
关于权限设置的一个小把戏
现在有一个需求,需要开放一些"特殊“的权限给开发组。具体的背景是这样的:有三个数据库用户,tabowner, tabconn, tab_temp三个用户tableowner是owner用户,里面存放着表,索引,序列,存储过程等。tabconn是一个连接用户,在这个用户里面建立了一些同义词,可以直接通过这个用户来进行数据的增删改查。tab_temp是一...
sql_profile的使用(一)
SQL> create table t1 as select object_id,object_name from dba_objects where rownum create table t2 as select * from dba_objects; Table created.SQL> create index t2_idx on t2(object_id);Index created.SQL> exec dbms_stats.gather_tabl...
sql monitor的使用(一)
在sql调优中,对于sql语句的实时监控显得尤为重要,如果某条sql语句的性能比较差。可能从前端的直观感觉就是执行时间比较长。对于dba来说,可能关注的相关因素需要多一些.1)可以通过top命令来监控sql的性能情况,查看cpu使用率较高的oracle process,然后通过查看session和process得绑定得到对应的session,然后得到对应的...
生产环境大型sql语句调优实战第一篇(一)
SELECT DISTINCT CA.L9_CONVERGENCE_CODE AS ATB2, CU.CUST_SUB_TYPE AS ACCOUNT_TYPE, CST.DESCRIPTION AS ACCOUNT_TYPE_DESC, SS....
生产环境大型sql语句调优实战第一篇(二)
继续昨天的部分,上一篇的链接为:http://blog.itpub.net/23718752/viewspace-1217012/对这条大sql的性能瓶颈进行了分析。主要瓶颈在于一个很大的业务表,数据量在亿级。如果通过时间条件来过滤,会有5%以内的数据被过滤出来。但是没有时间相关的索引字段,所以会走全表扫描,在目前的产品线中,这个大分区表的索引时严...
巧用xmltype解析clob数据
对于clob的数据,很多场合中都使用xml的格式,但是对于数据的查取和处理总是感觉力不从心。在条件允许的情况下,如果能够巧妙的使用xmltype来做数据处理,无意中是对于clob的一个处理利器。简单说下需求。数据库里存放的clob类似下面的格式<ObjectInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://...
创建用户时的密码校验问题
今天需要在测试环境中做一些性能测试,为了不影响原有的数据,准备创建一个临时的schema。但是创建的时候报了如下的错误。SQL> create user mig_perf identified by mig_perf;create user mig_perf identified by mig_perf*ERROR at line 1:ORA-28003: password verification for the specified password failedORA-2...
sqlldr和oracle_datapump性能比较
针对之前在生产环境中使用sql*loader的性能问题,最近一直在想使用外部表的oracle_datapump来替代它。昨天下午做了大量数据的测试,比较了这两种方案。最后发现在一定的限定条件下,从很多细节来看 oracle_datapump要更胜一筹。首先使用sql*loader对于clob,blob的数据相比普通表的处理要一些额外的工作,但是这些限制或者...
通过图表分析oracle的parallel性能
并行特性在数据库里对于性能的提升很有帮助,尤其是大批量的数据处理。今天对于并行的性能情况进行了简单的图表分析。为了能够比较合理的比较数据,对数据库里的2张大表进行了比对分析。测试的场景有以下两个。1.并行生成dump文件,比如一个大表有100G,使用并行,并行度为50 ,那么很可能会生成50个dump文件,每个dump...
生产环境sql语句调优实战第二篇
全表扫描 vs 索引
生产环境sql语句调优实战第三篇
生产环境有一条sql语句执行比较频繁,占用了大量的cpu资源。在一次排查中引起了我的注意,决定看看cpu消耗到底在哪儿?sql语句是比较简单的,通过查询SUBSCRIBER_FA_V是一个视图。在视图中关联了几个和业务核心表。SELECT TO_CHAR(SUBSCRIBER_NO) SUBSCRIBER_ID, SUB_STATUS, ...
shell脚本自动化采集性能sql
通过v$sql_monitor能够实时采集可能存在的sql性能问题,但是每次问题发生的时候采取采取措施就有点“晚”了,我们需要防患于未然,把一些潜在问题提前发现,并加以解决。如果有些sql执行很频繁,我们需要得到一个执行的报告,但是因为sql执行很频繁,每次都生成一个报告就显得有些过于消耗资源了。现在想达到的目标就是...
生产环境sql语句调优实战第五篇
今天在生产环境中发现一条sql语句尽管走了主键索引,但是查询还是很慢。sql语句类似下面的形式:SELECT /*+ index (bl1_cyc_payer_pop BL1_CYC_PAYER_POP_PK) */ T_TAX.BA_NO, T_TAX.TOTAL_TAX_AMT, T_TAX.TAX_RELATION, T_TAX_ITEM.TAX_ITEM_SEQ_NO, T_TAX_ITEM.TAX_SEQ_NO, T_TAX_...
使用闪回查询备份数据
今天在生产环境中,开发人员提交了一个脚本,是做update操作的,但是update操作的时候过滤条件有些大,本来预计修改的数据只有5000条,结果这个语句运行下来更改了500万条数据。对生产系统来说算是一个数据灾难,赶紧和开发确认了问题发生的时间,结果说是在半夜11点多,刚好在后半夜才开始做数据备份,这样这个变更也同时影...
生产系统中只读表的实现思路
在生产系统中有些时候需要保证一些表的只读特性,不允许表的数据被轻易修改。可能有一下的场景比较适用。1) 一些系统中有一些类似数据字典信息的表。这些表的信息基本都是稳定的,不会轻易的改变。2) 可能需要从一些外部系统中拷贝一些数据做比对和参考,不希望这些“临时”表的数据被认为修改。3) 系统的核心表...
oracle并行的小细节
今天在从生产环境中做一个数据抽取,为了提高效率,加了并行。发现了一些小的细节。首先,抽取数据时,对于并行度的指定我是设定200M为一个单位,如果表有1G,那么就需要启5个并行,结果有一个表有40G,按照这个单位,需要200个并行。但是在实际中,ddl的执行并行度,数据库不一定会买账,首先从数据库实例层面有一些参数...
巧用rowid简化sql查询
生产系统中有一条sql语句,目前执行的时间有点长了,SELECT COUNT(1) FROM ( SELECT /*+ leading (payment_temp_table payment PAYMENT_DETAILS account memo) use_nl (payment_temp_table ar1_payment PAYMENT_DETAILS account memo) index (payment payment_pk) index (P...