git commit命令如何实现mysql千万级数据库插⼊速度和读取速度
mysql千万级数据库插⼊速度和读取速度的调整记录
2018.11.1
Mysql version 5.7.23
忘记transfer⼀般情况下mysql上百万数据读取和插⼊更新是没什么问题了,但到了上千万级就会出现很慢,下⾯我们来看mysql千万级数据库插⼊速度和读取速度的调整记录吧。
1、将 innodb_flush_log_at_trx_commit 配置设定为0;按过往经验设定为0,插⼊速度会有很⼤提⾼。
0:log buffer将每秒⼀次地写⼊log file中,并且log file的flush(刷到磁盘)操作同时进⾏。该模式下在事务提交的时候,不会主动触发写⼊磁盘的操作
1:每次事务提交时MySQL都会把log buffer的数据写⼊log file,并且flush(刷到磁盘)中去,该模式为系统默认
2:每次事务提交时MySQL都会把log buffer的数据写⼊log file,但是flush(刷到磁盘)操作并不会同时进⾏。该模式下,MySQL会每秒执⾏⼀次 flush(刷到磁盘)操作
当设置为0,该模式速度最快,但不太安全,mysqld进程的崩溃会导致上⼀秒钟所有事务数据的丢失。
当设置为1,该模式是最安全的,但也是最慢的⼀种⽅式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多⼀个语句或者⼀个事务。。
当设置为2,该模式速度较快,也⽐0安全,只有在操作系统崩溃或者系统断电的情况下,上⼀秒钟所有事务数据才可能丢失
2、将 innodb_autoextend_increment 配置由于默认8M 调整到 128M
此配置项作⽤主要是当tablespace 空间已经满了后,需要MySQL系统需要⾃动扩展多少空间,每次tablespace 扩展都会让各个SQL 处于等待状态。增加⾃动扩展Size可以减少tablespace⾃动扩展次数。
3、将 innodb_log_buffer_size 配置由于默认1M 调整到 16M
此配置项作⽤设定innodb 数据库引擎写⽇志缓存区;将此缓存段增⼤可以减少数据库写数据⽂件次数。
4、将 innodb_log_file_size 配置由于默认 8M 调整到 128M
此配置项作⽤设定innodb 数据库引擎UNDO⽇志的⼤⼩;从⽽减少数据库checkpoint操作。
经过以上调整,系统插⼊速度由于原来10分钟⼏万条提升⾄1秒1W左右;注:以上参数调整,需要根据不同机器来进⾏实际调整。特别是innodb_flush_log_at_trx_commit、innodb_log_buffer_size和 innodb_log_file_size 需要谨慎调整;因为涉及MySQL本⾝的容灾处理。
MySQL 从最开始的时候 1000条/分钟的插⼊速度调⾼⾄ 10000条/秒。 相信⼤家都已经等急了相关介绍,下⾯我做调优时候的整个过程。提⾼数据库插⼊性能中⼼思想:
1、尽量使数据库⼀次性写⼊Data File
2、减少数据库的checkpoint 操作
3、程序上尽量缓冲数据,进⾏批量式插⼊与提交
4、减少系统的IO冲突
根据以上四点内容,作为⼀个业余DBA对MySQL服务进⾏了下⾯调整:
修改负责收录记录MySQL服务器配置,提升MySQL整体写速度;具体为下⾯三个数据库变量值:innodb_autoextend_increment、innodb_log_buffer_size、
innodb_log_file_size;此三个变量默认值分别为 5M、8M、8M,根据服务器内存⼤⼩与具体使⽤情况,将此三只分别修改为:128M、16M、128M。同时,也将原来2个 Log File 变更为 8 个Log File。此次修改主要满⾜第⼀和第⼆点,如:增加
innodb_autoextend_increment就是为了避免由于频繁⾃动扩展Data File⽽导致 MySQL 的checkpoint 操作;
将⼤表转变为独⽴表空并且进⾏分区,然后将不同分区下挂在多个不同硬盘阵列中。
完成了以上修改操作后;我看到下⾯幸福结果:
获取测试结果:
Query OK, 2500000 rows affected (4 min 4.85 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
Query OK, 2500000 rows affected (4 min 58.89 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
教师节边框简笔画
Query OK, 2500000 rows affected (5 min 25.91 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
Query OK, 2500000 rows affected (5 min 22.32 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
address是什么意思翻译成中文最后表的数据量:
+------------+
| (*) |
+------------+
| 10000000|
+------------+
从上⾯结果来看,数据量增加会对插⼊性能有⼀定影响。不过,整体速度还是⾮常⾯议。⼀天不到时
间,就可以完成4亿数据正常处理。预计数据库瓶颈已经被巧妙解决,结果变成程序“猿”苦逼地向我埋怨,⼤哥不⽤这么狠啊。
Mysql千万级别数据批量插⼊只需简单三步
python编程的安装步骤2018.11.3
Mysql version 5.1.17
⽂件中配置
1、bulk_insert_buffer_size=120M 或者更⼤
将insert语句的长度设为最⼤。
2、Max_allowed_packet=1M
3、Net_buffer_length=8k
对于5.1.17版本,没有⽤,⼊库速度约1000条/秒,太慢,可能与引擎有关。如下
确实是因为引擎错误,默认为MyISAM,后改为InnoDB,再⽤最上⾯的配置⽂件。
mysql存储引擎:
MySQL服务器采⽤了模块化风格,各部分之间保持相对独⽴,尤其体现在存储架构上。存储引擎负责管理数据存储,以及MySQL的索引管理。通过定义的API,MySQL服务器能够与存储引擎进⾏通信。⽬前使⽤最多的是MyISAM和InnoDB。InnoDB被Oracle收购
后,MySQL⾃⾏开发的新存储引擎Falcon将在MySQL6.0版本引进。
MyISAM引擎是⼀种⾮事务性的引擎,提供⾼速存储和检索,以及全⽂搜索能⼒,适合数据仓库等查询频繁的应⽤。MyISAM中,⼀个table实际保存为三个⽂件,.frm存储表定义,.MYD存储数据,.MYI存储索引。
InnoDB则是⼀种⽀持事务的引擎。所以的数据存储在⼀个或者多个数据⽂件中,⽀持类似于Oracle的锁机制。⼀般在OLTP应⽤中使⽤较⼴泛。如果没有指定InnoDB配置选项,MySQL将在MySQL数据⽬录下创建⼀个名为ibdata1的⾃动扩展数据⽂件,以及两个名为
ib_logfile0和ib_logfile1的⽇志⽂件。
创建table时可以通过engine关键字指定使⽤的存储引擎,如果省略则使⽤系统默认的存储引擎:CREATE TABLE t (i INT) ENGINE = MYISAM;
查看系统中⽀持的存储引擎类型:
mysql> show engines;
mysql> show engine InnoDB status\G;
⼀般安装系统默认是INNODB
default-storage-engine=INNODB
1.可以在启动数据库服务器时在命令⾏后⾯加上–default-storage-engine或–default-table-type选项。
2.更灵活的⽅式是在随MySQL服务器发布同时提供的MySQL客户端时指定使⽤的存储引擎。最直接的⽅式是在创建表时指定存储引擎的类型,向下⾯这样:
CREATE TABLE mytable (id int, titlechar(20)) ENGINE = INNODB
修改表的存储引擎:
ALTER TABLE engineTest ENGINE = INNODB;
修改默认存储引擎:
mysql怎么读英语
在mysql配置⽂件(linux下为/etc/myf),在mysqld后⾯增加default-storage-engine=INNODB即可。
但是如果表建⽴的时候是MyISAM,要更改整个数据库表的存储引擎,⼀般要⼀个表⼀个表的修改,⽐较繁琐,可以采⽤先把数据库导出,得到SQL,把MyISAM修改成INNODB,再导⼊的⽅式
完!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论