• Mysql常见日志作用


     slow query log(慢查询日志)

    记录sql执行时间长的查询语句,应用场景:解决sql慢查询问题。

    找到慢查询日志是优化sql的第一步,然后可以通过explain获取慢sql的执行计划相关信息。

    show variables like "slow_query_log" 查看慢查询日志是否开启,默认关闭

    set globle_slow_query_log=on 开启命令

    set globle long_query_time=1 修改慢查询时间,默认为10

    show global status like '%Slow_queries%' 查看当前慢查询个数

    如何优化慢SQL?

    通过执行计划可以数据表的查询顺序,数据查询操作的操作类型,索引可以命中情况,索引实际命中情况等信息

    show profile /show profiles 可以展示SQL语句的资源使用情况,例如cpu使用,cpu上下文切换,io,内存使用等

    binlog(二进制日志)

    binlog记录MySQL数据库所有数据的更改情况,DDL,DML等,逻辑日志

    binlog格式:

    Statement模式:记录每一条sql(文件小111111111111111111,性能号,io压力小)

    Row模式(推荐):记录每一行的具体变更(准确性)

    Mixed模式:上述两种模式混合

    binlog作用用来做什么?

    主从复制:1.mysql将变化数据存储到binlog日志中2.从库连接主库3.从库向主库请求数据4.主库向从库发送binlog5.从库接收binlog将其写入自己的relay log中6.从库将relay log同步到数据本地

    canal底层依赖的也是binlog

    误删了数据库,binlog还可以数据恢复

    binlog刷盘时机:sync_binlog参数控制,取值范围0-N

    0:不强制要求,系统自行判断

    1:每次事务提交都要将binlog写入磁盘

    N:每N个事务,才将binlog写入磁盘

    redo log(重做日志) 物理日志

    保证事务的持久性,记录页的修改 表空间,数据页号,偏移量,具体修改数据

    事务提交时先将redolog 刷新到磁盘,这样就算数据库宕机,重启后也能恢复

    redolog采用循环写入的方式

    什么时候会出现数据丢失:

    1.redolog写入logbuffer但未写入pagecache中,数据库崩溃

    2.redolog写入pagecache但未写入磁盘中,操作系统崩溃

    为什么每次不直接刷盘呢?

    性能太差,innodb引擎页的大小为16kb,修改页只修改了几个字节的数据,一次刷盘需要把整个页都刷新到磁盘,而且,页可能不相邻,会随机io,而redo log是顺序io,且一条redolog记录只占几十个字节

    undo log(撤销日志)逻辑日志

    保证事务原子性。是逻辑日志,记录与操作相反的sql语句,当回滚时,执行逻辑sql

    MVCC的实现依赖于:隐藏字段,undo log ,Read View(快照读SQL执行时MVCC提取数据的依赖)

  • 相关阅读:
    SpringBoot流程解析(一)
    Design Compiler工具学习笔记(1)
    jdk动态代理使用详解
    Linux学习教程(第五章 Vim文本编辑器及其应用)一
    倒排索引:ES倒排索引底层原理及FST算法的实现过程
    leetcode - 218. The Skyline Problem
    数据结构七:七大排序(插入排序,希尔排序,选择排序,堆排序冒泡排序,快速排序,归并排序)
    Java常用类的使用
    C++11 数据结构6 栈的链式存储,实现,测试
    电子词典效果图
  • 原文地址:https://blog.csdn.net/bxndm/article/details/139449243