社区
MySQL
帖子详情
linux下的MYSQL大数据量插入慢的处理方法
jiangjungege6
2011-06-05 10:20:52
是这样的,我用的西部数码的VPS。但是我的采集数据,数据库非常大。大概有200多万条数据 2.7个G。现在插入数据非常慢。但是服务器总CPU只用到30%。怎么优化或设置,让CPU全速去处理数据,让插入数据的速度变快呢。
他们叫我直接租服务器,我觉得没必要呀。我是采集站,哪里受得起服务器呀。
各位有没有什么好的解决方案?
...全文
1028
8
打赏
收藏
linux下的MYSQL大数据量插入慢的处理方法
是这样的,我用的西部数码的VPS。但是我的采集数据,数据库非常大。大概有200多万条数据 2.7个G。现在插入数据非常慢。但是服务器总CPU只用到30%。怎么优化或设置,让CPU全速去处理数据,让插入数据的速度变快呢。 他们叫我直接租服务器,我觉得没必要呀。我是采集站,哪里受得起服务器呀。 各位有没有什么好的解决方案?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
低调de程序渣
2012-10-15
打赏
举报
回复
楼主 laji
鼓手
2011-07-04
打赏
举报
回复
贴出解决方法呗?谢谢!
jiangjungege6
2011-06-06
打赏
举报
回复
谢谢大家。已解决。
lxq19851204
2011-06-06
打赏
举报
回复
用INSERT DELAYED INTO 插入看看
ACMAIN_CHM
2011-06-06
打赏
举报
回复
[Quote]但是服务器总CPU只用到30%。[/Quote] 这个就比较难了,需要分析一下瓶颈是在什么位置。一般可能是你的磁盘IO。 如果这样的话,需要看一下你的表结构和数据库的物理设计了。
rucypli
2011-06-06
打赏
举报
回复
set global innodb_flush_log_at_trx_commit=0;
jiangjungege6
2011-06-05
打赏
举报
回复
我是用的DISCUZ哟。像你那样做,要改他们的源码吗?
zuoxingyu
2011-06-05
打赏
举报
回复
7.2.16. INSERT语句的速度
插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例:
连接:(3)
发送查询给服务器:(2)
分析查询:(2)
插入记录:(1x记录大小)
插入索引:(1x索引)
关闭:(1)
这不考虑打开表的初始开销,每个并发运行的查询打开。
表的大小以logN (B树)的速度减慢索引的插入。
加快插入的一些方法:
· 如果同时从同一个客户端插入很多行,使用含多个VALUE的INSERT语句同时插入几行。这比使用单行INSERT语句快(在某些情况下快几倍)。如果你正向一个非空表添加数据,可以调节bulk_insert_buffer_size变量,使数据插入更快。参见5.3.3节,“服务器系统变量”。
· 如果你从不同的客户端插入很多行,能通过INSERT DELAYED语句加快速度。参见13.2.4节,“INSERT语法”。
· 用MyISAM,如果在表中没有删除的行,能在SELECT语句正在运行的同时插入行。
· 当从一个文本文件装载一个表时,使用LOAD DATA INFILE。这通常比使用很多INSERT语句快20倍。参见13.2.5节,“LOAD DATA INFILE语法”。
· 当表有很多索引时,有可能要多做些工作使得LOAD DATA INFILE更快些。使用下列过程:
有选择地用CREATE TABLE创建表。
执行FLUSH TABLES语句或命令mysqladmin flush-tables。
使用myisamchk --keys-used=0 -rq /path/to/db/tbl_name。这将从表中取消所有索引的使用。
用LOAD DATA INFILE把数据插入到表中,因为不更新任何索引,因此很快。
如果只想在以后读取表,使用myisampack压缩它。参见15.1.3.3节,“压缩表特性”。
用myisamchk -r -q /path/to/db/tbl_name重新创建索引。这将在写入磁盘前在内存中创建索引树,并且它更快,因为避免了大量磁盘搜索。结果索引树也被完美地平衡。
执行FLUSH TABLES语句或mysqladmin flush-tables命令。
请注意如果插入一个空MyISAM表,LOAD DATA INFILE也可以执行前面的优化;主要不同处是可以让myisamchk为创建索引分配更多的临时内存,比执行LOAD DATA INFILE语句时为服务器重新创建索引分配得要多。
也可以使用ALTER TABLE tbl_name DISABLE KEYS代替myisamchk --keys-used=0 -rq /path/to/db/tbl_name,使用ALTER TABLE tbl_name ENABLE KEYS代替myisamchk -r -q /path/to/db/tbl_name。使用这种方式,还可以跳过FLUSH TABLES。
· 锁定表可以加速用多个语句执行的INSERT操作:
LOCK TABLES a WRITE;
INSERT INTO a VALUES (1,23),(2,34),(4,33);
INSERT INTO a VALUES (8,26),(6,29);
UNLOCK TABLES;
这样性能会提高,因为索引缓存区仅在所有INSERT语句完成后刷新到磁盘上一次。一般有多少INSERT语句即有多少索引缓存区刷新。如果能用一个语句插入所有的行,就不需要锁定。
对于事务表,应使用BEGIN和COMMIT代替LOCK TABLES来加快插入。
锁定也将降低多连接测试的整体时间,尽管因为它们等候锁定最大等待时间将上升。例如:
Connection 1 does 1000 inserts
Connections 2, 3, and 4 do 1 insert
Connection 5 does 1000 inserts
如果不使用锁定,2、3和4将在1和5前完成。如果使用锁定,2、3和4将可能不在1或5前完成,但是整体时间应该快大约40%。
INSERT、UPDATE和DELETE操作在MySQL中是很快的,通过为在一行中多于大约5次连续不断地插入或更新的操作加锁,可以获得更好的整体性能。如果在一行中进行多次插入,可以执行LOCK TABLES,随后立即执行UNLOCK TABLES(大约每1000行)以允许其它的线程访问表。这也会获得好的性能。
INSERT装载数据比LOAD DATA INFILE要慢得多,即使是使用上述的策略。
· 为了对LOAD DATA INFILE和INSERT在MyISAM表得到更快的速度,通过增加key_buffer_size系统变量来扩大 键高速缓冲区。参见7.5.2节,“调节服务器参数”。
mysql
数据
量
大
插入
数据变
慢
解决
MySQL
数据
量
大
插入
数据变
慢
的问题 问题背景 在使用
MySQL
数据库的过程中,有时候会遇到一个常见的问题,就是当数据
量
变大时,
插入
数据的速度会明显变
慢
。这可能会给我们的应用带来性能问题,因此我们需要找到解决这个问题的
方法
。 问题原因
MySQL
插入
数据变
慢
的原因可能有很多,其中一个最常见的原因是索引的问题。当表中有大...
MySQL
插入
大
量
数据最好用批
量
插入
插入
大
量
数据到
MySQL
数据库时,执行单条
插入
语句的开销相对较大,包括网络延迟、每次
插入
都要进行事务
处理
和日志记录等。批
量
插入
可以将多条
插入
语句合并为一条,从而减少网络往返次数和事务开销,提高整体数据
插入
效率。
linux
下
mysql
执行
插入
语句,百万条时间
在
Linux
下使用
MySQL
执行
插入
语句,
处理
百万条数据可能需要一定的时间,具体时间取决于多个因素,如: 数据库的配置:如果你的
MySQL
服务器配置比较低,
插入
大
量
数据时可能会变
慢
。建议在
处理
大
量
数据时,使用配置高一些的服务器,以提高
插入
速度。 数据库表结构的优化:表结构的设计和索引的使用都会影响
插入
速度。建议在设计表结构时,遵循规范,尽可能地避免重复数据和冗余字段;在使用索引时,选择合适的索...
mysql
插入
数据变
慢
的原因_
mysql
插入
数据变
慢
的原因
最近的项目需要导入大
量
的数据,
插入
的过程中还需要边查询边
插入
。
插入
的数据
量
在100w左右。一开始觉得100w的数据
量
不大,于是就插啊插,吃了个饭,回来一看,在
插入
了50多w条数据后,每秒就只能插10条了。。觉得很奇怪,为啥越插越
慢
呢? 于是就开始分析
插入
的时间损耗,想到了如下的解决方案:(
mysql
使用的INNODB引擎)1.分析是否是由主码,外码,索引造成的
插入
效率降低主码:由于主码是每张表必须...
用
linux
脚本
插入
10w级的数据数据库为
mysql
插入
大
量
数据到
MySQL
数据库可以使用以下步骤: 准备数据:你需要一个数据文件,包含需要
插入
的所有数据。每行都是一条记录,字段之间使用适当的分隔符分开。 创建数据库:如果没有相应的数据库,请先创建一个。 创建表:创建一个表来存储数据。 导入数据:使用
MySQL
的"LOAD DATA INFILE"命令导入数据。该命令可以从文件中快速加载大
量
数据到
MySQL
表中。 以下是使用bash脚本...
MySQL
56,867
社区成员
56,753
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章