[Mysql]过大sql文件导入过慢问题解决
控制 MySQL 磁盘写入策略 以及 数据安全性 的两个关键参数: innodb_flush_log_at_trx_commit 和 sync_binlog
参数:innodb_flush_log_at_trx_commit
①如果设置为0,log buffer将每秒一次地写入log file中,并且同时进行log file的flush(刷新到磁盘中)操作。此模式下,在事务提交时,不主动触发写入磁盘的操作;
②如果设置为1,此模式下,在每次事务提交时,mysql都会把log buffer的数据写入log file中,并且同时进行log file的flush(刷新到磁盘中)操作;
③如果设置为2,此模式下,在每次事务提交时,mysql都会把log buffer的数据写入log file中,但是不会同时进行log file的flush(刷新到磁盘中)操作,会每秒执行一次log file的flush(刷新到磁盘中)操作。
注意:由于进程调度策略问题,不能保证"每秒执行一次flush(刷新到磁盘中)操作"100%的"每一秒执行一次"。
参数:sync_binlog
①如果设置N=0,像操作系统刷新其他文件的机制一样,mysql不会同步到磁盘中去,而是依赖操作系统来刷新binary log。
②如果设置N>0,mysql在每写N次二进制日志binary log时,会调用fdatasync()函数将二进制日志binary log同步到磁盘中去。
注意:如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。
如图:

性能:
①测试场景1:
innodb_flush_log_at_trx_commit=2
sync_binlog=1000
②测试场景2:
innodb_flush_log_at_trx_commit=1
sync_binlog=1000
③测试场景3:
innodb_flush_log_at_trx_commit=1
sync_binlog=1
④测试场景4:
innodb_flush_log_at_trx_commit=1
sync_binlog=1000
⑤测试场景5:
innodb_flush_log_at_trx_commit=2
sync_binlog=1000
| innodb_flush_log_at_trx_commit | sync_binlog | TPS |
| 1000 | 2 | 41000 |
| 1000 | 1 | 33000 |
| 1 | 1 | 26000 |
| 1000 | 1 | 33000 |
由此可见:
Ⅰ、当innodb_flush_log_at_trx_commit=1和sync_binlog=1时,写入操作性能最差;
Ⅱ、当innodb_flush_log_at_trx_commit=2和sync_binlog=2时,写入操作达到最高性能;
安全:
①当innodb_flush_log_at_trx_commit设置为0时,mysqld进程崩溃会导致上一秒所有事务数据丢失。
②当innodb_flush_log_at_trx_commit和sync_binlog都为1时最为安全,mysqld进程崩溃或者服务器crash的情况下,binary log只有可能最多丢失一个事务。
③当innodb_flush_log_at_trx_commit设置为2时,只有在服务器崩溃或断电情况下,上一秒所有事务数据才可能丢失。
[Mysql]过大sql文件导入过慢问题解决的更多相关文章
- 如何导入大sql文件到虚拟主机mysql数据库
大部分网站虚拟主机为了安全起见,都限制了通过命令或者phpMyAdmin导入大sql文件到mysql数据库,例如godaddy只允许站长通过phpMyAdmin上传不超过2m的sql文件,但实际上我们 ...
- mysql 导入 大sql文件
任务:第一次用mysql,需要将一个1G左右的sql文件导入: 步骤:1:安装mysql-installer-community-5.7.20.0.msi 64位安装包 2:命令行登录: mysql ...
- phpmyadmin导入大sql文件失败解决办法
摘自:http://www.xunway.com/info/post/499.asp 昨天小编的一个客户在在利用phpmyadmin导入大sql文件的时候,总是提示错误,反应给小编,小编也是第一次遇到 ...
- oracle导入大sql文件
最近遇到一个需要导入大SQL文件的问题,最先直接用SQL developer 导入大SQL文件,结果报IO Exception,只好采用sqlplus 导入,操作过程如下: sqlplus 用户名/密 ...
- mysql source命令超大文件导入方法总结
本文章来给各位朋友介绍利用mysql source命令超大文件导入方法总结,下面收集了两种解决办法,一种是把数据库分文件导出然后再导入,另一种是修改my.ini配置文件,下面我一一给各位朋友介绍. 导 ...
- MySQL命令执行sql文件的两种方法
MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...
- 将.sql文件导入powerdesigner的实现方法详解
将.sql文件导入powerdesigner的步骤是本文我们主要要介绍的内容,步骤如下: 第一步:将要导入的库的所有表的表结构(不要表数据,只要表结构)导出成一个.sql文件. 第二步:在powerd ...
- atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js 1. 两个方法:: bat vs mysqldump(推荐) vs lang ...
- Mysql导入大SQL文件数据问题
如果sql文件过大,会出现mysql out of memory (Needed XXX bytes) ,或者 "MySQL server has gone away"问题; 另 ...
随机推荐
- c++学习笔记之函数重载和模板理解
1.函数重载: C++ 不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可,这叫作函数的重载(其英文是 overload).重载就是装载多种东西的意思,即同一个事物能完成不同功能. 所谓 ...
- 如何给django admin.py配置超级管理员?注册表格?
admin.py是django给我们提供的功能非常强大的后台,况且支持拓展,,如果你要是觉得admin的后台不够牛逼你可以自己写一个!如何自己写一个后台,后面我有时间了会给大家更新!一起学习!一起进步 ...
- T100弹出是否确认窗体方式
例如: IF NOT cl_ask_confirm('aim-00108') THEN CALL s_transaction_end(') CALL cl_err_collect_show() RET ...
- Jmeter之Linux安装(Xshell),分布式运行Linux作为slave机
甲方爸爸要求,用Linux压测...... 所以在公司服务器Linux上搭建Jmeter 但实际一个Jmeter程序也有程序瓶颈~ 所以在Jmeter瓶颈下,搭建分布式压测系统.(也许可以尝试在一 ...
- X86逆向6:易语言程序的DIY
易语言程序在中国的用户量还是很大的,广泛用于外挂的开发,和一些小工具的编写,今天我们就来看下如何给易语言程序DIY,这里是用的易语言演示,当然这门技术也是可以应用到任何一门编译型语言中的,只要掌握合适 ...
- 怎样终止(杀掉) Linux 中的进程?
使用 kill -9 进程号 命令, 可是强行终止该进程. 如果使用直接使用 kill 进程号 命令, 则会让进程 "自行了断" . 因此, 一般是 kill -9 进程号 用得较 ...
- 2-Perl 环境安装
1.Perl 环境安装在我们开始学习 Perl 语言前,我们需要先安装 Perl 的执行环境.Perl 可以在以下平台下运行:Unix (Solaris, Linux, FreeBSD, AIX, H ...
- js循环遍历性能
定length for循环 (有length) 不定length for循环(使用数组length) 不定length for循环(判断数组length是否存在) forEach(Array自带,对某 ...
- 用vue写一个分页器代码
分页是项目中常会用到的,网上的插件也很多,但是有些功能太齐全反而不是必要的,所以抽时间自己写了一下(小白写代码,若发现问题还请及时赐教,感激不尽……) 如图,想要一个这样的页码: a. 上一页.下一页 ...
- docker容器生态技术链
图片来源:https://blog.51cto.com/liuleis/2067116 说明:学习Docker容器技术,先纵向了解大致内容架构,再横向逐一分解涉及的各项技术内容,对容器所涉及的技术体系 ...