zoukankan      html  css  js  c++  java
  • mysql 运行概图

    01-1

           接着进入Commander Dispatcher模块,命令分发模块,大概就是一个switch case的过程,根据不同的命令,进行不同的操作。这个模块又会间接关联到Query Cache模块和Logging Module,即查询缓存模块和日志模块。Query Cache模块个人感觉至少包含结果集缓存模块,至于有木有执行计划缓存,这个就不清楚了,还需要进入源码慢慢看来。Logging Module就是传说中的日志了,日志包括redo和undo两方面吧,日志系统是一个database必备的,是实现事务特性的重要手段,而事务便是 database和file system的根本区别,不要小瞧了Logging Module啊!!

          命令分发模块,根据命令的性质,将命令分给不同的子模块。SELECT分配给Optimizer即优化模块,一条select语句最重要的就是执行计划 了,一个好的执行计划比一个坏的执行计划不知道要快多少倍,这就是为什么我们要建立索引,其实在经常查询的列上建立二级索引,就是为了改变执行计划,让执 行计划可以选择二级索引,而抛弃聚簇索引(当然不是完全抛弃,聚簇索引是根本)。UPDATE、INSERT、DELETE交给Table Modification Module,不看也知道,这个模块主要是处理数据更新了(这里所说的更新是指数据的改变,即UID)。Repairs分配给了Table Maintenance Module,字面意义是说表维护模块,我OUT了,默认表坏了,支持修复?是何种坏了?不太了解啊…。Replication分配给了 Replication Module,就是复制模块。最后一个是Status分配给了Status Reporting Module,这个我貌似接触过,是不是所谓的那些动态试图?比如查看系统当前状态下的锁资源的占用情况等,这个模块应该是性能分析者居家旅行必备的模块 吧,通过这个模块可能很快找到系统性能的瓶颈。

          上面的模块又统一走到Access Control Module,访问控制模块啊,原来上面所说的User Module不包含访问控制…,这个访问控制就是简单的DAC,即检查用户是否对要访问的对象具有增、删、改、查的权限。接着进入Table Manager模块,因为Mysql支持不同的存储引擎,而这个模块是个统一的模块,个人感觉这个应该是表的字典对象管理模块,即表的一些元数据,比如这 个表包含哪些列啊,各个列的类型,表的创建者,创建日期,表的存储引擎之类的信息。最下面是Abstract Storage Engine Module,即抽象存储引擎模块,Mysql的保持这么多存储引擎同时在服务器中,是通过一个handler抽象类实现的(不知道有木有抽象类的概念, 小弟C++、JAVA丢了很久了…),每个存储引擎按照规定的接口,实现一个具体的handler类,然后再调用的时候,根据上面的Table Manager模块中的存储引擎的信息,选择对应的handler类进行相应表的物理操作。

    picked from : http://www.cnblogs.com/nocode/archive/2011/08/15/2139899.html

  • 相关阅读:
    Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
    Linkerd 2.10(Step by Step)—多集群通信
    Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
    Linkerd 2.10(Step by Step)—控制平面调试端点
    Linkerd 2.10(Step by Step)—配置超时
    Linkerd 2.10(Step by Step)—配置重试
    Linkerd 2.10(Step by Step)—配置代理并发
    本地正常运行,线上环境诡异异常原因集合
    Need to invoke method 'xxx' declared on target class 'yyy', but not found in any interface(s) of the exposed proxy type
    alpine 安装常用命令
  • 原文地址:https://www.cnblogs.com/johnchain/p/2766956.html
Copyright © 2011-2022 走看看