楼主: fan0124

[原创] 【讨论】让Insert更快需要采取哪些措施

[复制链接]
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
11#
发表于 2011-1-18 17:10 | 只看该作者

回复 #9 fan0124 的帖子

这个是提高MySQL在INTEL平台上整体的性能,不是说单独提高此...

使用道具 举报

回复
论坛徽章:
11
2010新春纪念徽章
日期:2010-03-01 11:19:072014年新春福章
日期:2014-02-18 16:42:02优秀写手
日期:2014-02-09 06:00:122011新春纪念徽章
日期:2011-02-18 11:43:34数据库板块每日发贴之星
日期:2010-12-22 01:01:01数据库板块每日发贴之星
日期:2010-11-26 01:01:012010广州亚运会纪念徽章:拳击
日期:2010-11-22 15:26:49ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51数据库板块每日发贴之星
日期:2010-07-10 01:01:04数据库板块每日发贴之星
日期:2010-07-07 01:01:01
12#
 楼主| 发表于 2011-1-18 17:10 | 只看该作者
原帖由 jinguanding 于 2011-1-18 17:08 发表




另外并发写的线程并发控制在:32 个左右,不要太少,也不能太多,5.0及5.1版本哦



目前俺直接用的5.5.8了,你说的线程并发控制是不是指把innodb_thread_concurrency=32?

但是这个参数貌似很有争议吧

使用道具 举报

回复
论坛徽章:
11
2010新春纪念徽章
日期:2010-03-01 11:19:072014年新春福章
日期:2014-02-18 16:42:02优秀写手
日期:2014-02-09 06:00:122011新春纪念徽章
日期:2011-02-18 11:43:34数据库板块每日发贴之星
日期:2010-12-22 01:01:01数据库板块每日发贴之星
日期:2010-11-26 01:01:012010广州亚运会纪念徽章:拳击
日期:2010-11-22 15:26:49ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51数据库板块每日发贴之星
日期:2010-07-10 01:01:04数据库板块每日发贴之星
日期:2010-07-07 01:01:01
13#
 楼主| 发表于 2011-1-18 17:12 | 只看该作者
原帖由 jinguanding 于 2011-1-18 17:09 发表
建议每次写入20条或者50条记录,这样你就可以节省20次或者50次其他过程,过程分三部分:打开表、申请资源等简称初始化、写入与检查、关闭表

你只有写入与检查算没有多少节省部分,其实也节省了一些资源与处理时间



1.看节省了哪些操作
2.你测试就知道


兄弟,我们凭空想是没用的,嘿嘿......



我是要测试的,现在就是你说的insert into我感觉很纳闷,不就是普通的insert语句列,既不是像Oracle里的insert /*+Append*/ into这样的一次将很多数据插入,也不是

将数据放到什么数组里插入,还是逐条插入的啊,所以你说提高效率有点不太明白

我是马上测试的,到时候测试结果肯定放上来看下列

使用道具 举报

回复
论坛徽章:
11
2010新春纪念徽章
日期:2010-03-01 11:19:072014年新春福章
日期:2014-02-18 16:42:02优秀写手
日期:2014-02-09 06:00:122011新春纪念徽章
日期:2011-02-18 11:43:34数据库板块每日发贴之星
日期:2010-12-22 01:01:01数据库板块每日发贴之星
日期:2010-11-26 01:01:012010广州亚运会纪念徽章:拳击
日期:2010-11-22 15:26:49ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51数据库板块每日发贴之星
日期:2010-07-10 01:01:04数据库板块每日发贴之星
日期:2010-07-07 01:01:01
14#
 楼主| 发表于 2011-1-18 17:14 | 只看该作者
我觉得批量插入就是比如这个时候没有记录,然后几秒后就是1000条记录了,然后几秒后就是2000条记录了

而不是一条一条记录增加的

使用道具 举报

回复
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
15#
发表于 2011-1-18 17:15 | 只看该作者

回复 #13 fan0124 的帖子

嘿嘿......跟单条写入是不一样的

我不是指哪个参数,在5.0/5.1  系列那参数没太多意思,我指的你程序端或者说连接并发控制


5.5.8你可以试下,多配置点INSERT_BUFFER的大小,正好体验下

使用道具 举报

回复
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
16#
发表于 2011-1-18 17:16 | 只看该作者

回复 #14 fan0124 的帖子

其实单条写,用2950(16G内存,给8Gmysql)也能上万的,使用InnoDB引擎

使用道具 举报

回复
论坛徽章:
27
数据库板块每日发贴之星
日期:2005-12-22 01:01:31ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09版主2段
日期:2012-05-15 15:24:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
17#
发表于 2011-1-18 17:42 | 只看该作者
原帖由 fan0124 于 2011-1-18 16:40 发表
如果为了保证Insert到MySQL中的速度够快,就是每秒插入的记录数能足够多,一般要调整什么设置呢

我自己想到的,存储和OS层面上的因素就不考虑了,但从MySQL上考虑的话

1、插入时批量提交数据

2、调整innodb_flush_log_at_trx_commit参数,必要时设置2

3、调整innodb_log_file_size参数

4、读写分离


还有个疑问:对于MySQL而言,一般1秒插入2W条记录应该没什么问题吧?



1秒插2W,是有问题的! 涉及的问题有:
1) innodb_buffer_pool_size 多大? innodb_max_dirty_pages_pct 是多少?  这关系MYSQL刷脏数据的频率
2) 你的硬件配置是?特别是硬盘配置
3) 你的数据大小是多少?  一页可以存多少行数据
4) 批量提交(1000条一次)
5) BINLOG不打开,会更快一些;
6) REDO LOG 大一点,多几组
7) innodb_log_buffer_size= 8M

使用道具 举报

回复
论坛徽章:
27
数据库板块每日发贴之星
日期:2005-12-22 01:01:31ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09版主2段
日期:2012-05-15 15:24:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
18#
发表于 2011-1-18 18:03 | 只看该作者
另外MYSQL5.0就不用考虑了; AUTO_INC锁会把你直接弄死

使用道具 举报

回复
论坛徽章:
9
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:512012新春纪念徽章
日期:2012-01-04 11:56:44ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:482013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08
19#
发表于 2011-1-18 19:09 | 只看该作者
主要瓶颈来自于io,如steven所说,关闭log-bin或者分离到其他的磁盘为佳.

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2011-1-19 11:56 | 只看该作者
楼主可能没有理解金兄的话吧。
金兄说的是insert into tablename values (a),(b),(c),..,(z)
而不是你理解的
insert into tablename values (a,b,c,d,..,z)
他说的一次性插入多行的值,(a),(b),(c),..,(z)是值很多行的值
而不是某一行的多个column值

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表