栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL之零碎知识点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL之零碎知识点

写在前面

本部分用来记录MySQL学习过程中比较小的零碎知识点,分享出去的同时也方便自己后续查看。

1:慢日志

慢日志主要参数如下:

控制开关:slow_query_log
写慢日志执行时长:long_query_time
慢日志文件:slow_query_log_file

如下设置:

mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.04 sec)

mysql> show variables like 'slow_query_log';
+---------------------+---------------------------------------------------------------+
| Variable_name       | Value                                                         |
+---------------------+---------------------------------------------------------------+
| slow_query_log      | ON                                                            |
+---------------------+---------------------------------------------------------------+
1 rows in set (0.00 sec)

mysql> set long_query_time=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

mysql> show variables like 'slow_query_log_file';
+---------------------+---------------------------------------------------------------+
| Variable_name       | Value                                                         |
+---------------------+---------------------------------------------------------------+
| slow_query_log_file | D:program_filesphpstudyPHPTutorialMySQLdatajhp-slow.log |
+---------------------+---------------------------------------------------------------+
1 row in set (0.00 sec)

为了测试效果将long_query_time设置为0,这样所有执行的sql语句都会记录到慢日志中,比如执行如下的sql语句:

mysql> select count(*) from t;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+

就可以查看生成的慢日志了:

2:MVCC

InnoDB通过MVCC(multi version concurrent control)多版本并发控制,来实现RR,RC隔离级别,具体的实现是通过在每行数据增加额外的两列数据,一个是产生当前行修改的事务ID,一个是指向上一个行修改版本的指针,这样就组成了一行数据的版本链,这个版本链就是undo log,假设有如下的版本链:

假设现在事务ID为56的事务启动,而当前正在执行的事务ID组成的数组是[8,43,49],这个数组我们叫做是一致性视图数组,用来辅助实现RC,RR的数据可见性,其中我们记录这个数组中的8,称之为低水位,本事务ID+1(本事务启动过程中不会启动其他事务),即56+1=57,我们作为高水位,假设在RR的隔离级别下,会按照如下规则来获取数据:

1:如果是当前行的事务ID在一致性视图数组中,说明该事物在本事务启动时还未提交,所以不可见
2:如果是当前行的事务ID小于低水位,说明该事物在本事务启动前已经提交,所以可见
3:如果是当前行的事务ID大于等于高水位,说明该事物是在本事务启动后才启动的,所以不可见
4:如果是当前行的事务ID即不小于低水位,也不大于高水位,也不在一致性视图数组中,说明该事物在本事务启动前已经提交,所以可见

假设现在执行sqlselect * from t where name="张三",则查找过程如下:

所以最后返回的结果是:

写在后面

参考文章列表:

MySQL慢查询日志(Slow Query Log) 。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999411.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号