zoukankan      html  css  js  c++  java
  • mysql学习

    ibdata1:共享表空间
    innodb_file_per_table指定每张表有自己的表空间
    每张表自己的空间:数据,索引,插入缓冲bitmap,其他的数据还存在共享表空间
    ibd:表空间


    页:Innodb管理数据库的最小磁盘单位
    常用的页:
    数据页
    undo页
    系统页
    事务数据页
    插入缓冲位图页

    B+树


    数据库:数据库文件 .frm .MYD .MYI .idb
    实例:MySql数据库由后台线程和一个共享内存区组成

    一般数据库和实例是一一对应的,在集群情况下,一个数据库被多个数据实例使用
    数据库实例是单进程,多线程的

    连接池组件
    管理服务和工具组件
    SQL接口组件
    ...
    插件式存储引擎

    存储引擎是基于表的,而不是数据库

    InnoDB:主要面向在线事务处理(OLTP)的应用,特点是行锁设计,支持外键,支持类似于oracal的一致性非锁定读,既默认读取操作不会产生锁,目前是默认的存储引擎
    支持MVCC,同时被设计用来最有效的利用以及使用内存和cpu,高性能,高可用,高扩展性的存储引擎

    后台线程|后台线程|后台线程|后台线程|后台线
    InnoDB存储引擎内存池
    文件|文件|文件|文件|文件|文件|文件|文件

    线程类型:
    Master Thread(存储引擎的主要工作)
    主循环loop
    后台循环
    刷新循环
    暂停循环
    IO Thread
    Purge Thread
    Page Cleaner Thread

    内存
    1.缓冲池
    缓冲池中缓存的数据页类型:索引页,数据页,undo页,插入缓冲,自适应哈希索引,InnoDB存储的锁信息,数据字典信息。索引页,数据页占很大一部分
    数据库将从磁盘读取到页存放在缓冲池中,如果下次再次读取到,直接命中
    如果修改:先修改缓冲池中的页,然后再以一定的频率刷新到磁盘上

    可以有多个缓冲池,每个页根据哈希值平均分配到不同的缓冲池实例中
    缓冲池页面大小16k,采用lru算法,优化

    2.LRU list, Free List, Flush List
    3.重做日志缓冲


    Checkpoint技术
    当事务提交时,先写重做日志,在修改页,这样发生宕机时可以用日志来恢复,这是ACID中D(持久性)的要求





    MyISAM:不支持事务,表锁设计,支持全文索引,缓冲池只缓存索引文件,不缓存数据文件
    MYD:存放数据文件
    MYI:存放索引文件
    NDB
    Memory

    InnoDB提供了以下约束:
    Primary Key
    Unique Key(唯一索引)
    Foreign Key
    Default
    Not Null

    mysql分区
    RANGE分区
    LIST分区
    HASH分区
    KEY分区

    innodb几种常见的索引
    B+树索引
    全文索引
    哈希索引

    聚集索引:叶子节点上就是整行的数据
    辅助索引:叶子节点没有实际的数据,指向聚集索引的数据
    数据库B+树的高度2-4层,不管啥索引,底层都是B+树,每个页之间用双向链表


    程序中,轻量级:互斥锁,读写锁,没有死锁检测机制

    数据库中是事务,锁的是表,页,行,在commit和rollback释放,不同的事务隔离级别,释放的时间不一样,有死锁检测机制
    行级锁:共享锁,排他锁

    ACID
    原子性
    一致性
    隔离性
    持久性

    事务的隔离级别:
    读未提交
    读已提交
    。。。

  • 相关阅读:
    axios express设置跨域允许传递cookie
    yarn常用命令指北
    Web代理工具NProxy
    DevOps的了解
    css图片hover放大
    autoprefixer
    谈谈浏览器http缓存
    欢迎使用 MWeb
    优化关键渲染路径CRP
    chrome 61 更新
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/12904352.html
Copyright © 2011-2022 走看看