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

多线程能提高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的整体入库“吞吐量”,线程在里显然无用武之处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-- 线性表之链式存储

https://www.cnblogs.com/ZWOLF/p/10604252.html

那些年,我和发哥在恒大的日子

在广州上班那会,我们在恒大中心旁边的利通大厦上班,我和薛总每天一起上下班,那时候宿舍还有盼盼,有时候玩开心的时候,我就会跟他们说,等过了很多年后,我们要写一本说,书的名字就叫做…

十六进制转化为十进制

package lsh.element.numbersystem;import java.util.Scanner;/*** * desc 有意思的地方:两种思想得到的结果都是正确的,但是超出int类型最大之后,错误值却不同* * author * LSH* 2018年9月23日*/ public class HexToDecimalConver…

回来了

三年了 又回来了 未来去哪里转载于:https://blog.51cto.com/itcnjd/589429

KEIL高级调试——条件断点

在线调试程序时,打断点是非常有效的一种方式,配合单步调试,可以快速定位问题。但是有时候,手动打断点用起来不是那么方便。比如想要在一个循环的第N次停下来,如果手动打断点,那就要不停的点击单步运行&…

emailjava中怎么校验_Java使用注解实现参数统一校验功能

在项目开发中,当使用配置文件的时候,需要对一些配置参数进行合法校验,如果不存在则会抛出异常或者提醒用户重新修改配置文件后运行系统。 以前的做法就是读取到配置文件后,每个配置项挨个检查,写多个if判断是否存在问题…

原来保险丝熔断原理是这样的

如果电路中的保险丝熔断了,想亮起一个灯来指示,可以考虑用这个电路:这个电路的工作逻辑:当保险丝F1正常工作时,只亮起绿灯LED2。当保险丝F1熔断时,熄灭绿灯LED2,亮起红灯LED1,告诉人…

redhat6 使用raid5的系统安装

raid5安装步骤(有三个磁盘,分别是sda/sdb/sdc) 1.独立给/boot创建一个分区(可以在创建software raid前后创建,但是不能加入raid software,例如:一个磁盘为sda,那我们把sda1作为/boot的独立分区&…

docker 定时重启脚本_使用 Go 添加启动脚本

简介实践困惑总结当前部分的代码简介虽然 Makefile 能很好的整合各种命令, 是一个非常方便的工具. 但启动脚本也是必不可少的, Makefile 更多用于开发阶段, 比如编译, 单元测试等流程.启动脚本的作用是控制程序的状态, 管理程序的启动, 停止, 查询运行状态等.实践直接上脚本了:…

SpringBoot在自定义类中调用service层等Spring其他层

解决方案: 1.上代码Component public class ServerHandler extends IoHandlerAdapter {Autowiredprotected HealthDataService healthDataService;private static ServerHandler serverHandler ;PostConstruct //通过PostConstruct实现初始化bean之前进行的操作pu…

为什么我的U盘空间变小了:图解 FAT 文件系统基础知识

作者 | 鱼鹰Osprey转自 | 鱼鹰谈单片机FAT 文件系统是什么,当你格式化 U 盘之后 U 盘发生了什么,为什么删除的文件还可以再恢复?买的 U 盘明明写着 16 G,实际却只有15 G,这里隐藏了什么事实?FAT 文件系统随…

持续集成(CI)- 各种工具的资料总结

为了实施CI,必须使用工作的支持,以使整个过程的自动化进行,以下把该过程涉及的各种工具汇集一下 必须的工具和功能 源代码控制系统 微软的工具: Microsoft Team Foundation Server (TFS) 或VSS 开源工具: 服务端: Subversion&…

如何用python制作动画的软件_大牛Python程序员制作3D动态可视化教程

Bar3D(3D 柱状图)name -> str图例名称x_axis -> strx 坐标轴数据。需为类目轴,也就是不能是数值。y_axis -> stry 坐标轴数据。需为类目轴,也就是不能是数值。data -> [list], 包含列表的列表数据项,数据中,每一行是一…

Python开课复习10

# 储备知识:# 函数的使用应该分为两个明确的阶段# 1. 定义阶段:只检测语法,不执行函数体代码def func(): print(from func)# 2. 调用阶段:会触发函数体代码的执行# func()#先定义后调用# 示范一# def foo():# print(from foo)# bar()# foo()# # 示范二:# def bar():…

如何DIY一款属于自己的HID键盘?

这是一个自定义游戏键盘,带有四个热插拔机械键和可自定义的RGB LED。它由STM32F103Cx微控制器供电,并通过Arduino IDE进行编程。文章末尾分享该项目资料。功能概述:快速STM32F103Cx微控制器可实现低输入延迟。USB全速,轮询速率为1…

给要学习.NET(c#语言)的新手一些学习方法

推荐两本书 第一本是《21天学通c#语言》 可能这本书的出版时间有点早,一些新的技术没涉及到,但是作为基础这本书是很不错的。 【原 书 名】 Sams Teach Yourself C# in 21 Days 【原出版社】 Sams 【作 者】(美)Bradley L.Jones…

arm9重启ssh服务_部署ssh使用rsa登录配置

什么是ssh?ssh专为远程登录会话和其他网络服务提供安全性的协议,利用ssh协议可以有效的防止远程管理过程中的信息泄露问题。使用ras公钥登录linux操作环境本地服务器:win10 远程服务器:centos 8 git环境生成rsa文件在windows机器上&#xff…

Android MVP模式简单易懂的介绍方式 (一)

Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式。看了很多文章,基本上都是长篇大论,一堆理论。但这里,我们不从理论出发&#xff0c…

什么?TTL信号也能高速稳定传输100m+?是的,你没有听错,量产电路推荐!

作者:周工,排版:晓宇微信公众号:芯片之家(ID:chiphome-dy)TTL传输100米,是不是很惊讶?早就看透了你的心思。传输100米,干嘛不用差分信号?就知道你…

学习:java设计模式—工厂模式

一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类:1)简单工厂模式(Simple Factory):不利于产生系…