sqlldr加载性能问题的排查

最近根据业务需要加载一批数据,在生产环境中不到半个小时就完了,可是到了测试环境,竟然跑了6个多小时,另外测试环境和生产环境的数据情况都基本差不多,主机配置也基本类似。
大家的注意力都集中到了sqlldr的加载性能上。等到他们找到我时,已经讨论了不少关于direct,convention加载的各种情况了,看似工作也做了不少了。

然后我通过邮件历史记录看到大家还讨论了可能是index导致的结果。
等到邮件转到我这的时候,已经问题算升了一个等级了。我首先要确定的就是具体的环境,在那台服务器上跑sqlldr,要把数据加载到哪个库。如果在生产上半个小时,可能在环境的某些地方还是有一些差别。
首先和开发协调了下,要到了他们使用的control file和sqlldr的命令。

首先查看control file,可以看到字段并不多,结构也不复杂。

load data
 discardmax 999
 into table GD1_SUBSCR_KEY
 fields terminated by "!"
 TRAILING NULLCOLS
 ( RESOURCE_VALUE ,RESOURCE_TYPE,EFFECTIVE_DATE DATE(19) "YYYY-MM-DD HH24:MI:SS",EXPIRATION_DATE  DATE(19) "YYYY-MM-DD HH24:MI:SS" ,SUBSCRIBER_NO,SUB_STATUS,CUSTOMER_ID,ACTV_CODE_IND,BE,LANGUAGE CHAR TERMINATED BY '!!',ROUTING_POLICY_ID, L9_PORT_IND,L9_SPLIT_PERIOD ) 

查看要加载的数据文件,内容如下,数据信息也没有什么特别的地方。
520002055869828!I!2014-05-06 12:19:42!4700-12-31 00:00:00!1003500!A!493053!!0!TH!!0!!NONE!
520002055869828!I!2014-05-02 14:46:11!2014-05-06 12:19:42!1003500!A!493053!!0!TH!!0!!NONE!
520002055869828!I!2014-05-02 12:46:07!2014-05-02 14:46:11!1003500!U!493053!!0!TH!!0!!NONE!
520002055869828!I!2014-05-02 08:41:12!2014-05-02 12:46:07!1003500!U!493053!!0!TH!!0!!NONE!
520002055869828!I!2014-05-02 08:31:28!2014-05-02 08:41:12!1003500!A!493053!!0!TH!!0!!NONE!
520002055869828!I!2014-02-08 19:39:55!2014-05-02 08:31:28!1003500!A!493053!!0!TH!!0!!NONE!
520002055869828!I!2014-02-08 19:39:52!2014-02-08 19:39:55!1003500!A!493053!!0!TH!!0!!NONE!
520002055869828!I!2014-02-08 19:35:49!2014-02-08 19:39:52!1003500!A!493053!!0!TH!!0!!NONE!

查看sqlldr的命令,和开发确认过,和生产使用的是同一套。所以基本的配置都有。没有太大问题。
sqlldr /@ DATA= DISCARD=GD1_XXXX.dsc  SILENT=FEEDBACK ERRORS=499 LOG=log_GDY_XXXX.log BAD=bad_ORA_FULL_GDY_XXXX_..dat rows=1000

有了以上的信息,就可以从cpu,io等方面来排查了。
首先是cpu,在目标的服务器上面有10台db instances,其中大部分都是在特定的应用中才用到,所以服务器上的cpu消耗并不高。
在生产系统中,只有4台db instances,把其它的库都分离到别的服务器上了。查看cpu的负载情况,没有太大的出入。当然了,我查看的时候数据已经加载完成了,也不能确定当时的cpu负载情况,这个时候可以从sqlldr日志中得到印证。加载了6个小时,cpu时间其实就是半个小时左右。这样来说cpu导致的可能性很小。

4096786 Rows successfully loaded.

Run began on Wed Jun 11 08:52:55 2014

Run ended on Wed Jun 11 14:57:40 2014

Elapsed time was:     06:04:44.05

CPU time was:         00:00:38.18

其次从io的角度来看。可能测试环境的Io负载要略微大一些,因为有两套环境在上面,都是使用,但是数据库这边来说测试环境的使用也不是很频繁,只是例行做一些测试而已。而在生产上可能要很多在线业务需要跑一些比较大的查询,从某种角度来说,尽管测试环境的数据库实例多一些,但是负载还要比生产环境小一些。

关于这个可以使用sar,iostat等命令来查看。

cpu,io都没有问题。

看看缓存,有个做性能的哥们查看了一下缓存的情况,说测试环境的paging情况比较多,建议停掉一些其他的库来释放掉一些缓存,提高数据加载的速度,我马上就表示反对,因为这台服务器有180G内存,每个库的sga都基本在8G左右,所以10个库,总共占用的缓存也在100G左右,加上一些额外的paging,因为测试环境的使用频率不是很高。所以在缓存上可能会相比生产环境要差一些,但是缓存还是相对ijiao充足的。

以上的情况都排除,我来看看网络情况,因为个人也对网络不是很在手。不过可以做一些简单的测试来印证。
首先在生产环境中做了一个scp的操作。把一个100m的文件传送到另一个客户端。每秒传送速度在50M左右,很快就完了。
然后我在测试环境做了类似的操作,把文件从客户端传送到测试数据库端。发现网络相比而言,慢了很多。
测试2个文件,开始在150KB/秒的样子,过了一会速度就降下来了。最低的时候再20kb左右的样子。

test.data                                                                                                                 0%  288KB 153.3KB/s   0.0KB/s   22:10 ETA^

test.data1                                                                                                 0% 1232KB  22.4KB/s  32.0KB/s 4:35:24 ETA

有了这些信息,之前的纷争一下子就清晰了很多。测试环境在基本类似的情况下,速度那么慢,根源就在于网络。
尽管服务端,客户端的cpu,io,缓存等配置都类似,但是速度就卡在了网络了。想想也是,可能有些复杂的问题的原因其实很简单。

时间: 2024-09-19 19:17:08

sqlldr加载性能问题的排查的相关文章

生产环境sqlldr加载性能问题及分析之一

在测试环境中进行了多轮测试,使用sqlldr批量加载数据,csv文件大概有120G左右,在一致的数据量的情况下,测试环境都在一个小时左右,但是在生产环境中竟然跑了将近2个小时,性能差了一倍.而且生产环境的服务器配置还要好一些.对于这个奇怪的问题,尽管说数据第一轮数据迁移已经完成了,对于之后的数据迁移还是很好的参考和经验借鉴. 今天对生产环境和测试环境中的信息进行了比对.先拿到对应的awr报告. 测试环境的数据库情况如下. Host Name Platform CPUs Cores Sockets

使用 React.js 的渐进式 Web 应用程序:第 2 部分 - 页面加载性能

本文讲的是使用 React.js 的渐进式 Web 应用程序:第 2 部分 - 页面加载性能, 系列第二篇,来看看基于 React 路由分块的页面加载优化. 原文地址:Progressive Web Apps with React.js: Part 2 - Page Load Performance 原文作者:Addy Osmani 译文出自:掘金翻译计划 译者:markzhai 校对者:Romeo0906,AceLeeWinnie 使用 React.js 的渐进式 Web 应用程序:第 2 部

js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)_javascript技巧

问题缘由:负责公司的开发平台研发工作,考虑的知识产权的保护工作,必须要考虑java的加密技术和js脚本的加密技术.在目前java加密很容易破解的情况下,还是先搞定js的加密和压缩,一方面可以提高页面加载性能,另外一方面也希望辛苦研发出来的成果得到一定的保护. 研究过程: 1.先强烈鄙视一下哪些随便转载文章的家伙,给我制造了很大的麻烦!!网上很多帖子都不靠谱.. 2.首先想了解jquery使用什么压缩的, 网上找了半天,说法不一样,后来还是在jquery官网的最频繁问题中找到了答案,但这已经是绕了

Listview的异步加载性能优化_Android

 Android中ListView是使用平率最高的控件之一(GridView跟ListView是兄弟,都是继承AbsListView),ListView优化最有效的无非就是采用ViewHolder来减少频繁的对view查询和更新,缓存图片加快解码,减小图片尺寸. 关于listview的异步加载,网上其实很多示例了,中心思想都差不多,不过很多版本或是有bug,或是有性能问题有待优化,下面就让在下阐述其原理以探索个中奥秘在APP应用中,listview的异步加载图片方式能够带来很好的用户体验,同时也

HTTP 推送,显著提升加载性能

上周我在斯达哥尔摩住了几天,出席了 HTTP 研讨会,参与了不少吸引人的讨论.其中一次是关于 HTTP 推送及其优缺点.早期实验结果的. 由于早期实验部署结果不那么理想,人们对 HTTP 推送大体持着怀疑态度,不过我想分享下自己更乐观一些的观点. HTTP 推送能做哪些预加载不能做的事? 从怀疑者那里一再听到的观点是,"推送相对于预加载来说,只不过节省了一次 RTT(Round Trip Time)而已".在实践中,这并非总是对的,有一个使用案例,推送可以完成,但预加载无法做到. 利用

Listview的异步加载性能优化

Android中ListView是使用平率最高的控件之一(GridView跟ListView是兄弟,都是继承AbsListView),ListView优化最有效的无非就是采用ViewHolder来减少频繁的对view查询和更新,缓存图片加快解码,减小图片尺寸. 关于listview的异步加载,网上其实很多示例了,中心思想都差不多,不过很多版本或是有bug,或是有性能问题有待优化,下面就让在下阐述其原理以探索个中奥秘在APP应用中,listview的异步加载图片方式能够带来很好的用户体验,同时也是

React Native JS Module 加载性能优化

关于React Native 性能 React Native 在手淘中已开始逐步推广, 在拍立淘首页的使用场景中,我们发现React Native并没有想 象中的那么快,实测效果在离线状态下性能甚至比不过H5 WindVane,React Native的UI会出现延迟渲 染存在视觉差,经过具体的代码性能测试,整个过程平均在300 ms (IPhone 5S机型下,整个JS文件 400K), 然后其核心系统调用代码加载解析整个JS (JSEvaluateScript)耗时在220 ms左右,在目前

JavaScript中的无阻塞加载性能优化方案_javascript技巧

Javascript在浏览器中的性能,可以说是前端开发者所要面对的最重要的可用性问题. 在Yahoo的Yslow23条规则当中,其中一条是将JS放在底部 .原因是,事实上,大多数浏览器使用单进程处理UI和更新Javascript运行等多个任务,而同一时间只能有一个任务被执行.Javascript运行了多长时间,那么在浏览器空闲下来响应用户交互之前的等待时间就有多长. 从基本层面说,这意味着<script>标签的出现使整个页面因脚本解析.运行而出现等待.不论实际的 JavaScript 代码是内

Listview加载的性能优化是如何实现的_Android

在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建. listview加载的核心是其adapter,本文针对listview加载的性能优化就是对adpter的优化,总共分四个层次: 0.最原始的加载 1.利用convertView 2.利用ViewHolder 3.实现