博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 5.6 新参数对binlog日志量的优化
阅读量:6017 次
发布时间:2019-06-20

本文共 2356 字,大约阅读时间需要 7 分钟。

数据库版本:5.6.*

1.row日志image类型

参数 控制着这种image类型,默认为FULL(log all columns),即记录before&after images。

该参数还有两种,minimal和noblob,minimal表示只记录after更改后的值,并且如果有主键或者非空唯一索引,则只以该字段作为where条件判断;noblob同full,只是不记录blob、text列。

2.binlog日志

对于insert则没有什么好说的,我们主要重点关注一下update和delete操作。

=full的情况下,对于update和delete所有的表(包含带有主键、非空唯一索引,唯一索引,没有索引)产生的binlog均一致,binlog情况如下:

  1. --建表语句
  2. CREATE TABLE `pk_test`(
  3. `id` bigint(20) NOT NULL,
  4. `username` varchar(30) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7. insert into pk_test values (1,2);
  8. insert into pk_test values (2,2);
  9. commit;
  10. show master statusG;--记录binlog文件和pos
  11. deletefrom pk_test where id =1;
  12. update pk_test set username='3';
  13. commit
  14. mysqlbinlog --no-defaults -v --start-position=637945822/mysqllog/3307/binlog/mysql-bin.000001| more
  15. ### DELETE FROM `baofeng`.`pk_test`
  16. ### WHERE
  17. ### @1=1
  18. ### @2='2'
  19. .....
  20. ### UPDATE `baofeng`.`pk_test`
  21. ### WHERE
  22. ### @1=2
  23. ### @2='2'
  24. ### SET
  25. ### @1=2
  26. ### @2='3'

从上面我们可以看到,在默认为FULL的binlog_row_image下,无论表有没有主键、唯一索引,全部按照全表字段作为条件,且update会更新全部字段。

binlog_row_image=minimal的情况下:

  1. --建表语句
  2. CREATE TABLE `ui_test`(
  3. `id` bigint(20) NOT NULL,
  4. `username` varchar(30) NOT NULL,
  5. UNIQUE (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7. CREATE TABLE `ui_test_null`(
  8. `id` bigint(20),
  9. `username` varchar(30) NOT NULL,
  10. UNIQUE key (`id`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  12. CREATE TABLE `null_test`(
  13. `id` bigint(20),
  14. `username` varchar(30) NOT NULL
  15. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  16. insert into pk_test values (1,2);
  17. insert into ui_test values (1,2);
  18. insert into ui_test_null values (1,2);
  19. insert into null_test values (1,2);
  20. commit;
  21. update pk_test set username='4';
  22. deletefrom pk_test;
  23. deletefrom ui_test;
  24. deletefrom ui_test_null;
  25. update null_test set username='4';
  26. deletefrom null_test;
  27. ### UPDATE `baofeng`.`pk_test`
  28. ### WHERE
  29. ### @1=1
  30. ### SET
  31. ### @2='4'
  32. ....
  33. ### DELETE FROM `baofeng`.`pk_test`
  34. ### WHERE
  35. ### @1=1
  36. .....
  37. ### DELETE FROM `baofeng`.`ui_test`
  38. ### WHERE
  39. ### @1=1
  40. .....
  41. ### DELETE FROM `baofeng`.`ui_test_null`
  42. ### WHERE
  43. ### @1=1
  44. ### @2='2'
  45. .....
  46. ### UPDATE `baofeng`.`null_test`
  47. ### WHERE
  48. ### @1=1
  49. ### @2='2'
  50. ### SET
  51. ### @2='4'
  52. .....
  53. ### DELETE FROM `baofeng`.`null_test`
  54. ### WHERE
  55. ### @1=1
  56. ### @2='2'

从上面的例子可以看到,当binlog_row_image=minimal的情况下,where条件只有主键或不为空的唯一索引,且只会更新被改变的字段。

3.总结:

在上面的测试我们可以看到,如果采用minimal格式,将减少主键和非空唯一索引表的before值,以及减少所有表update的after未被改变的值。

从效率上来说,减少了网络传输以及加快了update的效率。

参考资料:

YARPP

转载地址:http://ysyqx.baihongyu.com/

你可能感兴趣的文章
第四周(1.29~2.4)
查看>>
思维导图与Spring Batch
查看>>
SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何
查看>>
Install GTK in Ubuntu
查看>>
vijos 1083小白 线段树
查看>>
什么是ASCII
查看>>
守护进程详解
查看>>
合法IP&窗口最大值数组&打印素数&递归逆序一个栈&栈排序另一个栈&MyString&寻找数组中出现的重复字符&数组中的重复数字&逆序打印链表&空格替换成%20...
查看>>
BAT面试题系列 基础篇(五) java面向对象2
查看>>
sqlite3 使用简介
查看>>
BenUtils组件和DbUtils组件
查看>>
局域网内PC往其他设备(或盒子)上推引用 adb命令
查看>>
234. Palindrome Linked List
查看>>
扑克牌顺子
查看>>
翻转子串
查看>>
检查是否为BST
查看>>
[Android] Linux下查看apk文件程序包名的办法
查看>>
VC6.0支持UNICODE的步骤
查看>>
Java8 中的时间和日期 API
查看>>
媒体查询
查看>>