insert的不同场景性能比较(97天)

关于Insert的问题,可能在一些场景中会有完全不同的期望和结果,在日常工作使用的库中,需要表在Logging模式,必要时需要一些索引

但在数据迁移中,可能为了提高速度,索引就需要考虑重建了。

我做了一些场景的测试,并且做了详细的数据比对。

第一种场景:table在nologging模式下。并且表中没有索引,

在插入不同数据量的时候,生成的redo和响应时间都有一定的幅度提升。

比如插入13240331条记录时,响应时间为63秒,生成323219520bytes(300多M)的redo.

nologging+no index

sec:misec

inserted rows

redo generated

00.10

25862

635692

00.12

51723

1231620

00.18

103444

2461540

00.33

206885

4922516

00.67

413766

9840892

02.19

827527

19697976

09.90

1655048

40128988

15.68

3310089

80470212

33.89

6620170

161501892

63.28

13240331

323219520

第二种场景:table在logging模式下,表中没有索引

logging+no index

00.10

25862

635616

00.10

51723

1231620

00.17

103444

2461480

00.35

206885

4930208

00.68

413766

9841248

01.69

827527

19692980

06.94

1655048

40117876

16.66

3310089

80428640

41.23

6620170

161690412

72.47

13240331

323049996

总结:可以看到两者基本上没有任何变化

第三种场景:表在nologging模式,表中有主键,主键对应的索引处于logging模式

nologging+index(unique index) logging

00.22

25862

1381736

00.32

51723

2733468

00.44

103444

5431700

01.15

206885

10872316

03.25

413766

21777088

07.69

827527

43521600

16.33

1655048

90658812

41.71

3310089

183135576

82.40

6620170

366262424

190.50

13240331

731534236

可能直接看不太明显,如果有一个图标就更清晰了。左边的部分是采用logging,没有索引的场景,可以看到已经有了成倍的变化。可见在有索引的时候对于insert来说,会产生大量的redo,响应时间也成倍提高。

第四种场景,表采用nologging模式,表中无索引,使用append模式插入数据。

nologging+no index+append

00.14

25862

635632

00.14

51723

1231560

00.16

103444

2461480

00.33

206885

4922516

00.64

413766

9840848

01.52

827527

19697592

11.30

1655048

40165208

19.18

3310089

80450796

46.26

6620170

160910172

76.66

13240331

322991832

总结:可以看到在没有索引的情况下,nologging+append模式和nologging基本没有区别。

第五种场景:表处于nologging模式,表中有索引,处于Nologging模式。采用append插入数据。

可以看到采用index的logging和nologging模式,两者也没有明显的变化

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

Mysql体系结构

客户端连接器 mysql为外部程序提供的客户端connector,例如 PHP JAVA .NET RUBY 连接管理 管理客户端连接的相关操作,例如 ...

3347
来自专栏腾讯云容器服务团队的专栏

Kubernetes 资源分配之 Request 和 Limit 解析

Kubernetes 是一个容器集群管理平台,Kubernetes 需要统计整体平台的资源使用情况,合理地将资源分配给容器使用,并且要保证容器生命周期内有足够的...

2.3K3
来自专栏张善友的专栏

Caliburn Micro for Windows Phone 7

Caliburn Micro (caliburnmicro.codeplex.com) 是一个小巧但功能强大的 Caliburn (caliburn.codep...

1608
来自专栏菩提树下的杨过

利用Lucene打造站内搜索引擎的思路

1.为什么要用Lucene,而不用直接从数据库里搜索记录? 主要是考虑到几个因素:(1)性能问题,Lucene是基于文件索引的搜索机制,性能要比数据库里检索更...

1825
来自专栏前端学习心得

JavaScript线程机制与事件机制

进程是指程序的一次执行,它占有一片独有的内存空间,可以通过windows任务管理器查看进程(如下图)。同一个时间里,同一个计算机系统中允许两个或两个以上的进程处...

502
来自专栏京东技术

Vitess告诉你两阶段提交到底长啥样

● 原子性:一个事务对状态的改变是原子的,要么都发生,要么都不发生,这些改变包括数据库的改变、消息以及对转换器的操作。

1392
来自专栏用户画像

RAM刷新周期问题

RAM刷新有三种: 1、集中式刷新在一个刷新周期内(2ms),先让存储器读写,然后集中刷新,这样就存在死区问题,如果是存取周期为2us的话,这样对于64*64...

742
来自专栏Golang语言社区

【Go 语言,服务器模块】日志系统源码

后台服务器开发中,日志系统是针对运行的程序的检测,或者是后台统计功能的记录。 例如: 要求统计每日用户的访问量,可以通过统计日志的方式实现。 如下代码,自己...

3104
来自专栏Linyb极客之路

Java性能微调之数据库性能

 大部分Java系统性能问题基本上是由于错误的数据库访问方式引起的,带来了大量额外日志和内存消耗,这些都会对JVM的垃圾回收造成冲击影响,本文主要针对这种错误的...

531
来自专栏张善友的专栏

Sqlite介绍

1、SQLite简介 SQLite第一个Alpha版本诞生于2000年5月. 至今已经有4个年头了. 而在今年的5月SQLite也迎来了一个新的里程: SQL...

1949

扫码关注云+社区