InnoDB每秒开启自动提交的情况下,每秒处理事务数只有30/s
Sql Server却有2500/s。1、网上有人说,InnoDB慢的主要原因是实时写入日志到硬盘导致的,建议修改innodb_flush_log_at_trx_commit=2,但是如此一来日志就不能实施写入,带来一定的隐患。儿SQL Server在实时写入日志的情况下却能达到2500/s的事务处理能力。这究竟是什么情况,是因为在Windows上运行mysql的原因吗?请教大家了!2、如果MYSQL的InnoDB每秒中完成事务的TPS如此低,那选择InnoDB的理由又是什么呢?它又相比SQL Server有什么样的优势呢?3、在2.6gHZ双核的CPU上,4G内存,5400转硬盘,InnoDB在linux上的TPS能达到多少呢?坐等大家解答啊!搞了几天了,无果!!!附:测试说明
一个包含三个字段的表,用户ID,用户名,用户密码,用户ID自增、主键,用户名和密码mysql下varchar(16),SQL Server下nvarchar(16)。
测试代码使用单条事物循环,事物内容仅仅是向用户表中插入一行记录。
Sql Server却有2500/s。1、网上有人说,InnoDB慢的主要原因是实时写入日志到硬盘导致的,建议修改innodb_flush_log_at_trx_commit=2,但是如此一来日志就不能实施写入,带来一定的隐患。儿SQL Server在实时写入日志的情况下却能达到2500/s的事务处理能力。这究竟是什么情况,是因为在Windows上运行mysql的原因吗?请教大家了!2、如果MYSQL的InnoDB每秒中完成事务的TPS如此低,那选择InnoDB的理由又是什么呢?它又相比SQL Server有什么样的优势呢?3、在2.6gHZ双核的CPU上,4G内存,5400转硬盘,InnoDB在linux上的TPS能达到多少呢?坐等大家解答啊!搞了几天了,无果!!!附:测试说明
一个包含三个字段的表,用户ID,用户名,用户密码,用户ID自增、主键,用户名和密码mysql下varchar(16),SQL Server下nvarchar(16)。
测试代码使用单条事物循环,事物内容仅仅是向用户表中插入一行记录。
=0:关闭日志硬盘写入
=1:每条事物日志都写入硬盘后才返回
=2延缓日志硬盘写入但是,设置为2和0的确可以提高性能,但是会存在安全隐患啊。可能因为日志没有及时的写入硬盘,儿造成数据库损坏的无法恢复。
要不你试试找个Linux装个tpcc,然后把你的windows数据库压一下看看。
这个配置Linux,我记得用tpcc测试400-500还是能跑到的,那个事务可比你这个复杂多了,可以百度一下tpcc。
是不是环境不够干净
换了几台机器都是这个样子。mysql是5.6.22.0,绿色版,安装版的都试过了。linux上如果能跑400~500TPS,那比mssql还是低了点儿啊。另外,看到mssql有checkpoint和lazy writer,负责将日志写入磁盘的,用的好像是线程,当触发特定事件,比如日志队列缓冲区已满或者是退出数据库等等,会写数据,那么innodb是否是每一次都会等待日志写入磁盘完成才返回呢,如果是这样,那微软的SQL Server岂不是有安全问题,比如在日志队列中的日志还没写入系统的时候,突然断电,日志没有持久化,这个怎么解决的呢?
换了几台机器都是这个样子。mysql是5.6.22.0,绿色版,安装版的都试过了。linux上如果能跑400~500TPS,那比mssql还是低了点儿啊。另外,看到mssql有checkpoint和lazy writer,负责将日志写入磁盘的,用的好像是线程,当触发特定事件,比如日志队列缓冲区已满或者是退出数据库等等,会写数据,那么innodb是否是每一次都会等待日志写入磁盘完成才返回呢,如果是这样,那微软的SQL Server岂不是有安全问题,比如在日志队列中的日志还没写入系统的时候,突然断电,日志没有持久化,这个怎么解决的呢?
对SQL Server没有研究,不知道怎么样。InnoDB什么时候写日志是你自己配的,比如每次事务结束或者写到系统缓存由系统缓存刷入,再底层的知识我也不了解。
2是每次日志写入MySQL缓冲区,MySQL缓决区再向硬盘上批量写。除非MySQL服务挂掉,否则不会失败。所以0是操作系统级的成功,失败一次丢的是一批,2是MySQL服务级成功,失败也是丢一批,1是每条成功,失败丢一条。