多线程能提高Oracle的入库速度吗

最近常常和同事们讨论“系统架构”,其中有不免提到如何使用“多线程”来改善系统性能。有些同事普遍有一种“认为”:他们认为“多线程”是改善系统性能的“灵丹妙药”,他们简单的认为,“多线程”导致“并发”,而并发显然是改善性能的好途径。

在讨论这个问题前,我们还是复习一下基本概念。我们从“进程”、“多进程”、“线程”、“多线程”说起。

进程 :进程就是已执行程式的实体(参见:wiki)。简单点说就是:运行着的程序(好像和上句差不多:) )。

“多进程”其实就是“多任务”:进程是现今“分时系统”以及“多任务操作系统”的基本运作单位。操作系统在同一段时间内加载多个程式和行程到内存中,并分时间片完成(或称多任务),以在一个CPU上表现出同时执行的感觉。Unix, Windows XP, Linux都可以称为多任务操作系统;XP也可以勉强称为“分时系统”;Unix和Linux当然可以被称为“分时系统”)。当我们执行DOS(DOS是单任务OS,虽然它有所谓的TSR技术),必须把上一个程序退出来,才能执行下面的程序。而在Windows环境下,我们可以一边“下载电影”,一边“听 mp3”,同时还可以“上网”。这就是多任务带给我们的好处。

线程 :具体概念参见wiki。线程和进程的核心区别就是“是否存在独立的地址空间”。每一个进程都有自己的“地址空间”,而线程是共享“地址空间”的。这带来的好处就是:线程间的切换成本要显著小于进程间的切换成本。我们举一个通俗(是不是庸俗?)例子来说明进程和线程的区别。有一个花心的男孩,同时和两个女孩谈恋爱,但由于这个“恋爱过程”始终在空间上是不能够交叉的,也就是说这两个女孩始终碰不到面,这对于这个男孩来说这就是“多任务”。如果象韦小宝一样,他的大小老婆都住在一起,他可以和他的七个老婆打情骂俏,由于他们在同一个“地址空间”因此这就是“多线程”。显然花心男的“任务(进程)”的切换需要改变“地址空间”--跑来跑去,还需要分别记住对不同“女友”的不同许诺,以及不同的“誓言”----保存环境变量,这个明显要比韦小宝“多进程”的切换要辛苦的多。

多线程能够为我们带来什么好处呢?我们从“下载电影”说起,比如,我可以“多任务”的起N个ftp程序,分别从不同的地址下载N部电影。你可以通过定时查看每小时你的磁盘减少了多少空间,来判断你每小时下载了多少内容(这称为吞吐量)。虽然这种方法,可能我们有很高的吞吐量,但也显然存在不少缺点,比如,无法加快单一电影的下载速度(十个妈妈不可能在一个月生出一个宝宝来)。具有“多线程”的功能的“迅雷”就有许多优点了,它可以把同一部电影分解成N部分,分别从不同的网址下载,当某一个网址下载链接不可用时,它有可以自动切换到其他网址上(线程间的切换成本是很小的)。但这里有些前提,常常被我们忽略:

1、我们的CPU有足够的能力起多个线程(在配置不高的机器上,会感到迅雷很占资源);

2、我们的硬盘读写速度要远高于“下载速度”。

3、下载电影的网站的网速并不高。这点特别重要,如果我们是1Mbit的带宽,而ftp下载某电影已经能够稳定在1Mbit(256K字节),我们换用迅雷除了让我们的机器慢下来,是不能够改善下载速度的。

4、起N个ftp客户端程序下载的吞吐量,不比迅雷差。只是你下载的电影都只是开头部分。

关于“多线程”技术能否给系统提速,核心的问题在于找到系统的“性能瓶颈”。

再看看我们正在开发的系统存在的问题吧。我们正在开发的系统是一个网管系统,它需要大量的采集网络设备数据到数据库中,同时提供用户界面给网络运维人员查看是否存在网络告警、网络性能数据、以及网络的拓扑情况。

1、多线程采集数据入库(数据库)能改善系统性能吗?

显然不能!由于有大量的采集数据等待进入数据库,以及存在大量的Oracle后台运算,使得当前的系统瓶颈在Oracle上,而Oracle的性能瓶颈在磁盘I/O上(有大量的全表扫描SQL以及大量的写入操作)。这里的情况和上面迅雷利用“多线程”改善性能的情况一点也不同,因此改善 Oracle的磁盘I/O才是正道。

2、Java连接池技术能够改善入库速度吗?

我们为了改善采集速度,采用了多台采集机并发采集网络数据,这些采集机都需要把采集的数据入库到Oracle。Java连接池技术主要是为了解决DB连接过程的成本问题,对于存在大量短时连接的Web应用,就凸显起好处了(参见:Java jdbc数据库连接池总结)。而我们的采集过程本来就是一个连续的不间断过程。其实这里每个采集机只需要抓住一个Oracle连接不放手就可以了,完全没有必要每5分钟一次的采集过程完成后就释放连接,随后再重新建立Oracle连接。更加让人无法理解的是每一个采集机的连接池竟然高达10个连接,这有什么用?

总而言之,我们需要改善Oracle的整体入库“吞吐量”,线程在里显然无用武之处。

oracle入库的速度能到多少_多线程能提高Oracle的入库速度吗相关推荐

  1. oracle 查看表被谁删了_【分享】Oracle 常用运维命令大全

    一.oracle建库与删库命令 (1)oracle11g建库(一般习惯配置gdbname与sid名一样,sys密码与system密码一样,以方便记忆) [oracledb@ ~]$ dbca -sil ...

  2. oracle使用 union all 用自增序列_值得收藏的Oracle数据库性能优化

    值得收藏的Oracle数据库性能优化 年尾了,新的一波面试军又要开始了,被问到最多的可能就是性能优化,尤其是数据库性能优化,这个面试题不管是初中高级工程师都会被问到.因此我觉得下面31点ORACLE优 ...

  3. 网页速度很慢优化方案:如何提高网页加载速度,提升网站加载速度

    网站加载速度的快慢,直接影响用户的去留.这里为大家持续更新我的经验,帮你解决网页速度很慢,慢在哪里,该怎么优化的问题.希望对你有所帮助! 1.  网站空间要好:网站需要一个稳定的服务器或者虚拟机,可以 ...

  4. oracle 外键约束不检查历史数据_如何一键禁用Oracle所有外键约束?

    概述 最近在转移数据库,进行数据导入的时候,遇到一件麻烦事,就是表间外键约束的存在,导致insert频频报错,批量执行sql语句又是顺序执行,手动输入的工作量又太大.所以这里考虑是不是可以把外键约束全 ...

  5. oracle 一个实例创建多个数据库_创建多个Oracle数据库及相应的实例

    转 http://blog.csdn.net/luiseradl/article/details/6972217 对于使用过SQL Server数据库的用户可以会对Oracle中的数据库的实例的概念理 ...

  6. oracle时间去掉时分秒的时间_超详细的oracle修改AWR采样时间间隔和快照保留时间教程...

    概述 10g版本中默认是保留7天,11g版本中默认保留8天,采集间隔是1小时,这个信息可以从DBA_HIST_WR_CONTROL视图中获得.如果要修改AWR采样时间间隔和快照保留时间应该怎么改呢?下 ...

  7. 如何提高页面加载速度 || 前端的性能优化 || 浏览器渲染页面的过程是什么

    1.降低请求量 ​ ① 合并资源,减少http请求数量. ​② lazyLoad,如图片懒加载.分批加载,每次只加载一部分. ​ ③ 使用字体图标或CSS绘制,来代替部分图片. 2.加快请求速度 ​ ...

  8. oracle存储查询出来的值_技术分享|浅析ORACLE数据库物理体系结构及其对应优化策略...

    张志国 合肥科技研发中心 Oracle数据库服务器有两个主要的组成部分:数据库和实例(instance).Oracle数据库用于存储和检索信息,是数据的集合.Oracle实例是指数据库服务器的内存及相 ...

  9. mysql500万数据查询速度_是什么影响了数据库查询速度

    一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查 ...

最新文章

  1. 为什么有些xpath绝对路径拿不到数据_Python爬虫,登陆神器Selenium之xpath的使用
  2. javascript事件详细说明
  3. 1个多月就能看到效果的减肥大法 - 健康程序员,至尚生活!
  4. 洛谷 P4012 深海机器人问题【费用流】
  5. 摄像头又换位置了!最新iPhone XI 渲染图曝光
  6. 840万应届生创历史新高,企业大规模缩招,互联网行业首次出现需求负增长
  7. 【写作技巧】毕业论文写作资料--刊物搜索
  8. Halcon PDF文档(hdevelop_users_guide)学习总结之五——关于图形窗口
  9. 测试Join(插队)
  10. android多版本打包,Android的持续化集成及多版本打包
  11. Android 如何全局获取Context
  12. 三维全景融合拼接技术
  13. RK3288 开发板 排插物理引脚对应图以及如何进入android6.0.1内核终端、uboot终端
  14. SOHO中国高管建“老鼠仓”吸钱 大企成空壳谁之责?
  15. 想和应用宝sig签名谈谈
  16. java制作SM2证书
  17. 二十一世纪大学英语读写基础教程学习笔记(原文)——8 - Young and in Love(超年轻恋人)
  18. 【RMAN】RMAN跨版本恢复(中)
  19. 计算机组成原理第三章例题解析(关于存储器容量扩充)
  20. 蓝桥杯-阶乘运算和高精度加法(Java)

热门文章

  1. 在ubuntu中为程序添加图标快捷键
  2. struts 2 配置通配符
  3. js和jquery书籍
  4. linux下安装oracle 11g R2
  5. 固定宽度弹性布局(以适应各种各辨率)
  6. C语言里最基础的关键字
  7. 28--仅仅反转字母
  8. Python 第三方模块之 PDFMiner(pdf信息提取)
  9. models.ForeignKey( ,on_delete=models.CASCADE)    # 关联外键
  10. Storm的通信机制