最近工作总结(45)

2021/01/06 Work

Docker 服务异常导致所有容器失效

由于主机服务突然断电或重启,导致Docker服务所有容器缺失了state.json文件。docker info docker ps等命`令会卡住,无法继续执行。到/var/log/docker 中查看输出日志,得到:

evel=fatal msg="open /var/run/docker/libcontainerd/containerd/054f92393f757e0418b014ed1fa35673fbce2293de43e42153f4e10ec4910c77/state.json: no such file or directory

解决方式:

1.service docker stop
2.Go to /var/run/docker and delete any directory related to the container id
3.Go to /var/lib/docker and delete any directory related to the container id
4.service docker start

有可能需要将目录下的所有 container id的文件目录都删了,因为他们都失效了。

docker 重启后,会恢复正常。但是容器都没有了,需要重新创建过。

如果是有CI/CD的,重新发布过服务即可,如果没有,那么所有失效容器重新创建会是比较繁琐了过程

在事务中的查询操作

在事务中的查询操作,如果查询的数据是事务中前面修改的数据,也要使用事务tx实例进行查询操作,如果用别的DB实例,得到的是没有修改或插入的数据,会导致诡异的不一致问题出现

如果是将没有值的缓存key的值存为null,则相关数据新增时,要将对应的缓存删除,否则取到的缓存有可能还是null

mysql错误Every derived table must have its own alias解决

把MySQL语句改成:select * from (select * from ……) as 别名

注意redis key 前后不要有空格

MySQL5.7 or查询使用索引情况

如果只是一个字段

where name = 'foo' or name = 'bar' 

这样可以使用到索引

两个字段以上即使满足最左前缀索引也会很可能为全表扫描

where name = 'foo' and age = 10 or age = 20 

MySQL explain type的简明意思

表示MySQL在表中找到所需行的方式,又称“访问类型”。

常用的类型有: ALL, index,  range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)一般来说,range以及之后的类型性能才是比较合适的

ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行

index: Full Index Scan,index与ALL区别为index类型只遍历索引树

range:只检索给定范围的行,使用一个索引来选择行

ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件

const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system

NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。

ref

表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值


rows

 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数

 
Extra

该列包含MySQL解决查询的详细信息,有以下几种情况:
Using index (JSON property: using_index):表示直接访问索引就能够获取到所需要的数据(覆盖索引),不需要通过索引回表

Using Index Condition:会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行;

Using where: 表示在存储引擎返回记录后,仍然需要过滤数据.MySQL服务器在存储引擎收到记录后进行“后过滤”(Post-filter),如果查询未能使用索引,Using where的作用只是提醒我们MySQL将用where子句来过滤结果集。这个一般发生在MySQL服务器,而不是存储引擎层。一般发生在不能走索引扫描的情况下或者走索引扫描,但是有些查询条件不在索引当中的情况下


Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询

Using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”

Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。

Impossible where:这个值强调了where语句会导致没有符合条件的行。

Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行


https://www.cnblogs.com/kerrycode/p/9909093.html

Search

    Table of Contents