12
返回列表 发新帖
楼主: osdba

[原创] MySQL为什么比PostgreSQL的插入慢3倍?

[复制链接]
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:07:24
11#
发表于 2011-4-20 13:59 | 只看该作者
MySQL的默认配置太保守了.

只改一个innodb_buffer_pool_size还真不足以休现出来MySQL的真正性能.

double write会在读写并发高的情况会增加MySQL的吞吐量的.

如果通过测试得到double write 影响数据库的性能.那就杯具了.

使用道具 举报

回复
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:07:24
12#
发表于 2011-4-20 14:00 | 只看该作者
原帖由 d.c.b.a 于 2011-4-17 20:59 发表
innodb,用绑定变量,8个字段,一秒钟能进3万条。


顶偶象.

使用道具 举报

回复
论坛徽章:
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
13#
发表于 2011-4-20 21:18 | 只看该作者
原帖由 osdba 于 2011-4-20 13:52 发表
通过测试 ,基本弄清楚了,MySQL的double write是导致了性能的下降的最主要原因,当关闭double write,性能大大提高。而PostgreSQL防止坏块的方法是页面影像功能,即自上次发生checkpoint后,块发生变化时,会把整个块复制到WAL日志中,后面这个块再发生变化时,只复制变化的信息。这样保证了可以通过WAL来恢复坏块问题。所以这一块PostgreSQL设计比InnoDB强。

当关闭double write,性能大大提高..... ,
double write 是顺序写,开销很小的.  最多影响5%. 不会是你所说的大大提高性能.
可以贴出你的参数给大家看下.

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2011-4-21 10:21 | 只看该作者
测试方法不变,只是禁止了double write。5%的说法只是在当全是随机写的时候才成立。因为随机写的时候,数据先写到了double write区域中,然后合适的时候再把double write区域中的块按物理顺序合并排序后写入实际的数据块中,这样如果原先的IO是离散的,而double write区的写的顺序的,这样相对随机写,可能只有5%的影响,但如果原先的IO就是有序的,那边double write就不是5%的影响了。

使用道具 举报

回复
论坛徽章:
4
2011新春纪念徽章
日期:2011-04-15 12:20:32咸鸭蛋
日期:2011-08-05 11:40:05ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:56
15#
发表于 2011-4-21 11:38 | 只看该作者
原帖由 osdba 于 2011-4-20 13:52 发表
通过测试 ,基本弄清楚了,MySQL的double write是导致了性能的下降的最主要原因,当关闭double write,性能大大提高。而PostgreSQL防止坏块的方法是页面影像功能,即自上次发生checkpoint后,块发生变化时,会把整个块复制到WAL日志中,后面这个块再发生变化时,只复制变化的信息。这样保证了可以通过WAL来恢复坏块问题。所以这一块PostgreSQL设计比InnoDB强。


MySQL的double write? 没有接触过,好好研究去。

使用道具 举报

回复
论坛徽章:
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
16#
发表于 2011-4-21 22:06 | 只看该作者
原帖由 osdba 于 2011-4-21 10:21 发表
测试方法不变,只是禁止了double write。5%的说法只是在当全是随机写的时候才成立。因为随机写的时候,数据先写到了double write区域中,然后合适的时候再把double write区域中的块按物理顺序合并排序后写入实际的数据块中,这样如果原先的IO是离散的,而double write区的写的顺序的,这样相对随机写,可能只有5%的影响,但如果原先的IO就是有序的,那边double write就不是5%的影响了。

1. double write buffer 是物理区域;
2. double write buffer 是一种安全机制, innodb buffer 刷新数据的时候,会先刷新到double write buffer,然后刷新到磁盘,这两个操作可以看作独立的;

postgreSql比mysql快3倍.我想是另外的因素影响. binlog,innodb事务日志之间的同步需要考虑.日志和数据文件的刷新机制需要考虑.

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2011-4-25 11:43 | 只看该作者
mysql的自动提交关闭或 innodb_flush_log_at_trx_commit=2 试试

使用道具 举报

回复
论坛徽章:
0
18#
发表于 2011-4-25 11:44 | 只看该作者
double不会太影响效率的,毕竟只多了个顺序写的过程。

使用道具 举报

回复

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

本版积分规则 发表回复

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