91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Windows下關閉MySQL的自動提交(autocommit)功能

發布時間:2020-08-08 10:42:20 來源:ITPUB博客 閱讀:433 作者:Hoegh 欄目:MySQL數據庫
隨著MySQL的應用日益廣泛,支持事務特性的InnoDB已經成為MySQL的默認存儲引擎。和很多關系數據庫不同的是,在InnoDB存儲引擎中,事務默認是自動提交的,也就是說每條DML語句都會觸發commit操作。這一自動提交(autocommit)特性在很多場景下對于性能還是有一定影響的。

最近我們嘗試將一個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環境下進行測試。

點擊(此處)折疊或打開

  1. mysql> status
  2. --------------
  3. mysql Ver 14.14 Distrib 5.7.16, for Win64 (x86_64)

  4. Connection id: 2
  5. Current database:
  6. Current user: root@localhost
  7. SSL: Not in use
  8. Using delimiter: ;
  9. Server version: 5.7.16 MySQL Community Server (GPL)
  10. Protocol version: 10
  11. Connection: localhost via TCP/IP
  12. Server characterset: latin1
  13. Db characterset: latin1
  14. Client characterset: utf8
  15. Conn. characterset: utf8
  16. TCP port: 3306
  17. Uptime: 9 min 5 sec

  18. Threads: 1 Questions: 7 Slow queries: 0 Opens: 106 Flush tables: 1 Open tables: 99 Queries per second avg: 0.012
  19. --------------

  20. mysql>

2.通過set來關閉autocommit,重啟后恢復默認值

首先,我們通過set命令來修改autocommit參數。

點擊(此處)折疊或打開

  1. mysql>
  2. mysql> show global variables like '%commit%';
  3. +-----------------------------------------+-------+
  4. | Variable_name | Value |
  5. +-----------------------------------------+-------+
  6. | autocommit | ON |
  7. | binlog_group_commit_sync_delay | 0 |
  8. | binlog_group_commit_sync_no_delay_count | 0 |
  9. | binlog_order_commits | ON |
  10. | innodb_api_bk_commit_interval | 5 |
  11. | innodb_commit_concurrency | 0 |
  12. | innodb_flush_log_at_trx_commit | 1 |
  13. | slave_preserve_commit_order | OFF |
  14. +-----------------------------------------+-------+
  15. 8 rows in set, 1 warning (0.00 sec)

  16. mysql> set autocommit=0;
  17. Query OK, 0 rows affected (0.00 sec)
  18. mysql>
  19. mysql> set global autocommit=0;
  20. Query OK, 0 rows affected (0.00 sec)

  21. mysql> show global variables like '%commit%';
  22. +-----------------------------------------+-------+
  23. | Variable_name | Value |
  24. +-----------------------------------------+-------+
  25. | autocommit | OFF |
  26. | binlog_group_commit_sync_delay | 0 |
  27. | binlog_group_commit_sync_no_delay_count | 0 |
  28. | binlog_order_commits | ON |
  29. | innodb_api_bk_commit_interval | 5 |
  30. | innodb_commit_concurrency | 0 |
  31. | innodb_flush_log_at_trx_commit | 1 |
  32. | slave_preserve_commit_order | OFF |
  33. +-----------------------------------------+-------+
  34. 8 rows in set, 1 warning (0.02 sec)

  35. mysql>


接下來,我們重啟數據庫,發現autocommit參數已經恢復默認值。

點擊(此處)折疊或打開

  1. E:\mysql-5.7.16-winx64\bin>net stop mysql
  2. MySQL 服務正在停止.
  3. MySQL 服務已成功停止。


  4. E:\mysql-5.7.16-winx64\bin>net start mysql
  5. MySQL 服務正在啟動 .
  6. MySQL 服務已經啟動成功。


  7. E:\mysql-5.7.16-winx64\bin>mysql -u root -proot
  8. mysql: [Warning] Using a password on the command line interface can be insecure.
  9. Welcome to the MySQL monitor. Commands end with ; or \g.
  10. Your MySQL connection id is 2
  11. Server version: 5.7.16 MySQL Community Server (GPL)

  12. Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

  13. Oracle is a registered trademark of Oracle Corporation and/or its
  14. affiliates. Other names may be trademarks of their respective
  15. owners.

  16. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  17. mysql> 
  18. mysql> show global variables like '%commit%';
  19. +-----------------------------------------+-------+
  20. | Variable_name | Value |
  21. +-----------------------------------------+-------+
  22. | autocommit | ON |
  23. | binlog_group_commit_sync_delay | 0 |
  24. | binlog_group_commit_sync_no_delay_count | 0 |
  25. | binlog_order_commits | ON |
  26. | innodb_api_bk_commit_interval | 5 |
  27. | innodb_commit_concurrency | 0 |
  28. | innodb_flush_log_at_trx_commit | 1 |
  29. | slave_preserve_commit_order | OFF |
  30. +-----------------------------------------+-------+
  31. 8 rows in set, 1 warning (0.00 sec)

  32. mysql>

3.修改mysql的配置文件my.ini

我們找到mysql的配置文件my.ini,在里面添加一行記錄“autocommit=0”。

點擊(此處)折疊或打開

  1. [mysql]
  2. default-character-set=utf8
  3. [mysqld]
  4. max_connections=200
  5. default-storage-engine=INNODB
  6. basedir =E:\mysql-5.7.16-winx64\bin
  7. datadir =E:\mysql-5.7.16-winx64\data
  8. port = 3306
  9. autocommit=0

然后重新啟動數據庫,確認autocommit參數是否為OFF。

點擊(此處)折疊或打開

  1. E:\mysql-5.7.16-winx64\bin>net stop mysql
  2. MySQL 服務正在停止.
  3. MySQL 服務已成功停止。


  4. E:\mysql-5.7.16-winx64\bin>net start mysql
  5. MySQL 服務正在啟動 .
  6. MySQL 服務已經啟動成功。


  7. E:\mysql-5.7.16-winx64\bin>mysql -u root -proot
  8. mysql: [Warning] Using a password on the command line interface can be insecure.
  9. Welcome to the MySQL monitor. Commands end with ; or \g.
  10. Your MySQL connection id is 2
  11. Server version: 5.7.16 MySQL Community Server (GPL)

  12. Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

  13. Oracle is a registered trademark of Oracle Corporation and/or its
  14. affiliates. Other names may be trademarks of their respective
  15. owners.

  16. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  17. mysql> show global variables like '%commit%';
  18. +-----------------------------------------+-------+
  19. | Variable_name | Value |
  20. +-----------------------------------------+-------+
  21. | autocommit | OFF |
  22. | binlog_group_commit_sync_delay | 0 |
  23. | binlog_group_commit_sync_no_delay_count | 0 |
  24. | binlog_order_commits | ON |
  25. | innodb_api_bk_commit_interval | 5 |
  26. | innodb_commit_concurrency | 0 |
  27. | innodb_flush_log_at_trx_commit | 1 |
  28. | slave_preserve_commit_order | OFF |
  29. +-----------------------------------------+-------+
  30. 8 rows in set, 1 warning (0.01 sec)

  31. mysql>
  32. mysql>
我們看到autocommit參數為OFF,目標達成。

4.數據插入速度提升十倍

以開頭提到的那張表為例,4000多條數據,在關閉autocommit參數之前插入時間為101505ms;關閉autocommit參數之后插入時間為8869ms,插入速度提升了十倍還多。

但是這個時間其實還是蠻長的,繼續提升!





~~~~~~~ the end~~~~~~~~~

hoegh
2016.11.01


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇江市| 万宁市| 常德市| 石渠县| 镇康县| 集贤县| 平谷区| 石嘴山市| 高青县| 昭通市| 休宁县| 赫章县| 辛集市| 海城市| 西平县| 绥江县| 达州市| 蓝田县| 永川市| 凌云县| 德江县| 新丰县| 海口市| 黄梅县| 丰县| 鄂温| 云梦县| 伽师县| 凤翔县| 黑河市| 安多县| 五常市| 恩平市| 宁河县| 汝州市| 奇台县| 寿光市| 阳城县| 莒南县| 南投市| 石柱|