Windows下關閉MySQL的自動提交(autocommit)功能
隨著MySQL的應用日益廣泛,支援事務特性的InnoDB已經成為MySQL的預設儲存引擎。和很多關聯式資料庫不同的是,在InnoDB儲存引擎中,事務預設是自動提交的,也就是說每條DML語句都會觸發commit操作。這一自動提交(autocommit)特性在很多場景下對於效能還是有一定影響的。
最近我們嘗試將一個Oracle資料庫的資料遷移到MySQL資料庫,發現匯入時間很長。舉個例子來說,其中有一個表包含四千多條資料,插入時間竟然超過了100秒。每插入一條資料,資料庫就會自動提交一次,也就是說單這一個表MySQL會commit超過4000次,如果我們關閉自動提交功能,透過程式來控制,只要一次commit就可以了。
那麼,如何關閉MySQL的autocommit特性呢?
通常有兩種方法:
首先,我們透過set命令來修改autocommit引數。
我們看到autocommit引數為OFF,目標達成。
~~~~~~~ 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>
點選(此處)摺疊或開啟
-
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-2127395/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL Study之–MySQL關閉自動commit(autocommit)薦MySqlMIT
- MysqL自動提交機制的關閉MySql
- 自動提交(AUTOCOMMIT)的配置MIT
- MySQL Windows下關閉和啟動MySqlWindows
- 如何關閉 Windows 7 視窗自動排列功能?Windows
- 在 Windows 98 中關閉光碟自動播放功能(轉)Windows
- windows下mysql的安裝於使用(啟動、關閉)WindowsMySql
- windows10 自動更新怎麼關閉_關閉windows10 自動更新的方法Windows
- 如何關閉Windows自動更新Windows
- Oracle sqlplus引數autocommit(自動提交)的設定OracleSQLMIT
- vps mysql自動關閉MySql
- Windows10系統關閉桌布圖片自動壓縮功能的方法Windows
- jdbc控制自動提交功能JDBC
- 怎樣關閉win10自動更新 如何關閉windows10自動更新Win10Windows
- mysql啟動與關閉(手動與自動)MySql
- win10系統關閉自動更新怎麼關_windows10如何關閉自動更新Win10Windows
- MySQL 的 autocommitMySqlMIT
- 客戶端showModalDialog的視窗,提交後自動關閉:使用RegisterClientScriptBlock客戶端clientBloC
- windows10怎麼關閉自動更新_如何關掉win10的自動更新WindowsWin10
- ORACLE AS 自動關閉Oracle
- win10系統關閉自動更新的方法教程,如何關閉win10系統自動更新功能?Win10
- nginx windows下 快速關閉NginxWindows
- win10 windows update怎麼關閉 win10 windows update自動更新怎麼關閉Win10Windows
- Chrome資訊自動同步谷歌?谷歌同意關閉此功能Chrome谷歌
- win10如何啟用或關閉windows功能_win10啟用或關閉windows功能的方法Win10Windows
- Windows10系統阻止自動關閉Mobile Hotspot的方法WindowsHotSpot
- mysql的啟動和關閉MySql
- 關閉徹底Windows10自動更新工具-Windows Update BlockerWindowsBloC
- 在 Windows 平臺下安裝與配置 MySQL 5.7.36之啟動與關閉MySQL服務WindowsMySql
- Mysql在全域性禁用自動提交MySql
- Windows10系統下怎麼關閉視窗Snap功能Windows
- win10系統如何關閉自動維護功能Win10
- 關閉自動收集 for oracleOracle
- windows10怎麼關閉快速啟動_windows10關閉快速啟動的方法Windows
- windows10 徹底關閉自動更新【絕對管用】Windows
- Windows10徹底關閉休眠功能Windows
- Windows10系統關閉休眠功能的方法Windows
- windows10怎麼關閉防毒_windows10關閉自帶防毒軟體的方法Windows防毒