Windows下关闭MySQL的自动提交(autocommit)功能
发表于:2024-12-03 作者:千家信息网编辑
千家信息网最后更新 2024年12月03日,随着MySQL的应用日益广泛,支持事务特性的InnoDB已经成为MySQL的默认存储引擎。和很多关系数据库不同的是,在InnoDB存储引擎中,事务默认是自动提交的,也就是说每条DML语句都会触发com
千家信息网最后更新 2024年12月03日Windows下关闭MySQL的自动提交(autocommit)功能随着MySQL的应用日益广泛,支持事务特性的InnoDB已经成为MySQL的默认存储引擎。和很多关系数据库不同的是,在InnoDB存储引擎中,事务默认是自动提交的,也就是说每条DML语句都会触发commit操作。这一自动提交(autocommit)特性在很多场景下对于性能还是有一定影响的。
最近我们尝试将一个Oracle数据库的数据迁移到MySQL数据库,发现导入时间很长。举个例子来说,其中有一个表包含四千多条数据,插入时间竟然超过了100秒。每插入一条数据,数据库就会自动提交一次,也就是说单这一个表MySQL会commit超过4000次,如果我们关闭自动提交功能,通过程序来控制,只要一次commit就可以了。
那么,如何关闭MySQL的autocommit特性呢?
通常有两种方法:
首先,我们通过set命令来修改autocommit参数。
但是这个时间其实还是蛮长的,继续提升!
~~~~~~~ the end~~~~~~~~~
hoegh
2016.11.01
最近我们尝试将一个Oracle数据库的数据迁移到MySQL数据库,发现导入时间很长。举个例子来说,其中有一个表包含四千多条数据,插入时间竟然超过了100秒。每插入一条数据,数据库就会自动提交一次,也就是说单这一个表MySQL会commit超过4000次,如果我们关闭自动提交功能,通过程序来控制,只要一次commit就可以了。
那么,如何关闭MySQL的autocommit特性呢?
通常有两种方法:
- 一种是通过set命令修改会话级别或者数据库级别的参数,但是数据库重启后参数会恢复默认值;
- 第二种方法是修改mysql的配置文件my.ini,一劳永逸。
1.测试环境 Windows Server 2008 r2+MySQL Community Server (GPL) 5.7.16
我是在Windows Server 2008 r2环境下进行测试。点击(此处)折叠或打开
- mysql> status
- --------------
- mysql Ver 14.14 Distrib 5.7.16, for Win64 (x86_64)
- Connection id: 2
- Current database:
- Current user: root@localhost
- SSL: Not in use
- Using delimiter: ;
- Server version: 5.7.16 MySQL Community Server (GPL)
- Protocol version: 10
- Connection: localhost via TCP/IP
- Server characterset: latin1
- Db characterset: latin1
- Client characterset: utf8
- Conn. characterset: utf8
- TCP port: 3306
- Uptime: 9 min 5 sec
- Threads: 1 Questions: 7 Slow queries: 0 Opens: 106 Flush tables: 1 Open tables: 99 Queries per second avg: 0.012
- --------------
- mysql>
2.通过set来关闭autocommit,重启后恢复默认值
首先,我们通过set命令来修改autocommit参数。
点击(此处)折叠或打开
- mysql>
- mysql> show global variables like '%commit%';
- +-----------------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------------+-------+
- | autocommit | ON |
- | binlog_group_commit_sync_delay | 0 |
- | binlog_group_commit_sync_no_delay_count | 0 |
- | binlog_order_commits | ON |
- | innodb_api_bk_commit_interval | 5 |
- | innodb_commit_concurrency | 0 |
- | innodb_flush_log_at_trx_commit | 1 |
- | slave_preserve_commit_order | OFF |
- +-----------------------------------------+-------+
- 8 rows in set, 1 warning (0.00 sec)
- mysql> set autocommit=0;
- Query OK, 0 rows affected (0.00 sec)
- mysql>
- mysql> set global autocommit=0;
- Query OK, 0 rows affected (0.00 sec)
- mysql> show global variables like '%commit%';
- +-----------------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------------+-------+
- | autocommit | OFF |
- | binlog_group_commit_sync_delay | 0 |
- | binlog_group_commit_sync_no_delay_count | 0 |
- | binlog_order_commits | ON |
- | innodb_api_bk_commit_interval | 5 |
- | innodb_commit_concurrency | 0 |
- | innodb_flush_log_at_trx_commit | 1 |
- | slave_preserve_commit_order | OFF |
- +-----------------------------------------+-------+
- 8 rows in set, 1 warning (0.02 sec)
- mysql>
接下来,我们重启数据库,发现autocommit参数已经恢复默认值。
点击(此处)折叠或打开
- E:\mysql-5.7.16-winx64\bin>net stop mysql
- MySQL 服务正在停止.
- MySQL 服务已成功停止。
- E:\mysql-5.7.16-winx64\bin>net start mysql
- MySQL 服务正在启动 .
- MySQL 服务已经启动成功。
- E:\mysql-5.7.16-winx64\bin>mysql -u root -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 2
- Server version: 5.7.16 MySQL Community Server (GPL)
- Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql>
- mysql> show global variables like '%commit%';
- +-----------------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------------+-------+
- | autocommit | ON |
- | binlog_group_commit_sync_delay | 0 |
- | binlog_group_commit_sync_no_delay_count | 0 |
- | binlog_order_commits | ON |
- | innodb_api_bk_commit_interval | 5 |
- | innodb_commit_concurrency | 0 |
- | innodb_flush_log_at_trx_commit | 1 |
- | slave_preserve_commit_order | OFF |
- +-----------------------------------------+-------+
- 8 rows in set, 1 warning (0.00 sec)
- mysql>
3.修改mysql的配置文件my.ini
我们找到mysql的配置文件my.ini,在里面添加一行记录"autocommit=0"。
点击(此处)折叠或打开
- [mysql]
- default-character-set=utf8
- [mysqld]
- max_connections=200
- default-storage-engine=INNODB
- basedir =E:\mysql-5.7.16-winx64\bin
- datadir =E:\mysql-5.7.16-winx64\data
- port = 3306
- autocommit=0
然后重新启动数据库,确认autocommit参数是否为OFF。
点击(此处)折叠或打开
- E:\mysql-5.7.16-winx64\bin>net stop mysql
- MySQL 服务正在停止.
- MySQL 服务已成功停止。
- E:\mysql-5.7.16-winx64\bin>net start mysql
- MySQL 服务正在启动 .
- MySQL 服务已经启动成功。
- E:\mysql-5.7.16-winx64\bin>mysql -u root -proot
- mysql: [Warning] Using a password on the command line interface can be insecure.
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 2
- Server version: 5.7.16 MySQL Community Server (GPL)
- Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> show global variables like '%commit%';
- +-----------------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------------+-------+
- | autocommit | OFF |
- | binlog_group_commit_sync_delay | 0 |
- | binlog_group_commit_sync_no_delay_count | 0 |
- | binlog_order_commits | ON |
- | innodb_api_bk_commit_interval | 5 |
- | innodb_commit_concurrency | 0 |
- | innodb_flush_log_at_trx_commit | 1 |
- | slave_preserve_commit_order | OFF |
- +-----------------------------------------+-------+
- 8 rows in set, 1 warning (0.01 sec)
- mysql>
- mysql>
4.数据插入速度提升十倍
以开头提到的那张表为例,4000多条数据,在关闭autocommit参数之前插入时间为101505ms;关闭autocommit参数之后插入时间为8869ms,插入速度提升了十倍还多。但是这个时间其实还是蛮长的,继续提升!
~~~~~~~ the end~~~~~~~~~
hoegh
2016.11.01
数据
参数
数据库
服务
时间
成功
正在
文件
特性
配置
也就是
也就是说
事务
命令
多条
引擎
方法
环境
级别
还是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
wow1.12.1数据库
余姚妇幼保健医院服务器地址
软件开发运行视频
网易我的世界1.17整人服务器
数据库归档日志
青龙面板需要什么配置服务器
传感器网络技术原理及应用教材
数据库程序讲解
服务器与台式电脑cpu
上海信息软件开发
布吉软件开发
哪个数据库有美股市盈率
宜兴方便软件开发
蓝盾网络安全排名
数据库分类及解析
远程重启虚拟服务器
博世软件开发工程师
单机开发需要数据库吗
数据库表连接之后分组
互联网克隆像这样的科技名词吗
河南网络技术产品介绍
数控和网络技术哪个难学
数据库表关键
人大金仓数据库有哪些
株洲天盈软件开发有限公司
rust载入服务器需要多久
数据库表导出到excel
kms服务器搭建完成需要重启吗
联接不到服务器什么原因
网络安全事件的法律