sql server包含哪些对象_MySQL源码阅读3-THD对象

b278ab6a73ec1baeda461b4cd60ba44a.png

这里用单独的一篇介绍THD对象,目前看来THD对象是线程处理用户语句请求的核心类。然而该类实在是太大了,单单类的定义就差不多有了3500行。因此,这里不能够完全理解透,所以介绍得也不会全。望谅解~

1. 简单说明

THD没有查找到具体是什么的缩写,具体的代码定义是在mysql-server-8.0/sql/sql_class.h中,官方代码说明文档是在下面链接中。

https://dev.mysql.com/doc/dev/mysql-server/latest/classTHD.html​dev.mysql.com

这个类给的官方说明是:

For each client connection we create a separate thread with THD serving as a thread/connection descriptor

暂且翻译为“线程描述类”(THread Descriptor)。

2. THD与类/结构的依赖图

该类与其他很多类都有直接或间接引用关系,具体的如下图所示(该图也不全,只是个人感觉比较重要的列出来了)。图中,空心三角箭头表示继承关系;实心四角箭头表示组合关系。

68b96137ddb1e18b8598c04b5a4ab7c0.png
THD相关类(有水印)

3. THD依赖类/结构分类

为了方便介绍,将与THD相关类分成以下几个部分,分类是按照个人理解分的,不一定正确:

3.1 父类/接口类

THD类继承三个父类,分别是MDL_context_owner,Query_arena,Open_tables_state。

  • MDL_context_owner:抽象类,主要与Metadata Lock 拥有者相关的接口,包括元数据边界控制(进入/退出),元数据信息通知等;
  • Query_arena:维护语句的元素的类,这里的元素是指语句(含store procedure)解释成抽象语法树后的节点;
  • Open_tables_state:维护该线程打开和封锁的表的状态,维护了(临时)表信息和锁信息,子类有Open_tables_backup

3.2 锁相关的

  • MDL_context:元数据锁的上下文,维护了元数据的锁;
  • THR_LOCK_INFO:线程锁的信息;
  • User_level_lock:用户级别的锁信息;
  • Global_read_lock:全局读锁;
  • Locked_tables_list:该线程加锁的表列表;

3.3 接口语法语义相关

  • Vio:与客户端交互的IO相关;
  • LEX:语法解析后的parsed树,语法树;
  • Parser_state:parser的内部状态机,包括输入参数,语法解析/语义解析过程中的使用的数据;
  • Protocol:协议类(接口),包括传统协议(Protocal_classic),文本协议(Protocal_text),二进制协议(Protocal_binary);
  • Query_plan:语句的执行计划;
  • Prepared_statement_map:存储prepare语句的map,为<statement_id,Prepared_statement>的map;

3.4 日志/复制相关

  • Binlog_user_var_event:binlog 的用户参数信息
  • Gtid_set:该线程占用的Gtid的集合
  • Gtid:Gtid信息
  • Relay_log_info:重放日志的基本信息;
  • Rpl_thd_context:Replication related context,与该THD对象复制相关的上下文

3.5 处理过程中上下文

  • Resource_group_ctx:资源组的上下文,当前用到的资源组;资源组是指能够应用到线程的resource control的集合;
  • Security_context:当前授权用户的所有THD对象集合(A set of THD members describing the current authenticated user);
  • sp_rcontext: 当前store procedure的运行时的上下文,current runtime context
  • System_variables:系统变量

3.6 事务相关

  • Transaction_ctx:事务的上下文;
  • Attachable_trx:只读的可附加事务,封装当前事务的状态,Class representing read-only attachable transaction, encapsulates knowledge how to backup state of current transaction

3.7 执行过程中的数据

  • dd::cache::Dictionary_client:数据库对象的dictionary,主要包括了schema,table,tablespace,store program,字符集等定义。更多可以参考:https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-object-cache.html
  • Ha_data:存储引擎级别的thread-local的数据
  • sp_cache:stored routines的缓存,包括store procedure,store function.
  • Item_change_record:记录语句优化时候对象树的转变过程;
  • Discrete_intervals_list:记录当前insert语句的自增值间隔;
  • sql_digest_state:Current/level statement digest
  • partition_info:分区信息;
  • Session_sysvar_resource_manager:会话系统变量的资源管理;

3.8 诊断优化相关

  • Opt_trace_context: optimizer trace of current statement,当前语句的优化过程;
  • Cost_model_server:Optimizer cost model for server operations,服务操作的优化代价模型;
  • Secondary_engine_optimization:二级引擎是否用来优化语句;
  • Session_tracker: 会话层的状态追踪;
  • Internal_error_handler:内部错误处理器;
  • Diagnostics_area:DA,诊断信息,包含多个不同的DA;
  • PSI_thread: Performance schema thread instrumentation for this session,会话PSI;
  • PSI_stage_progress:当前处理的PSI的状态,Current stage progress instrumentation;
  • PSI_statement_info_v1:当前语句的PSI状态,Current statement instrumentation state

3.9 其他

  • dd::DD_kill_immunizer:从kill操作中豁免器;为了防止DD进去到一个非一致的状态;
  • Plugin_array:plugin数据信息,主要为audit相关的;

4. 总结

本文主要介绍了MySQL执行过程中的核心类,并将它的依赖类分成多个不同类别。如果在分类过程中存在问题,也望指出。

上篇:

Wenguang Liu:MySQL源码阅读2-连接与线程管理​zhuanlan.zhihu.com
67dbe25bd64208641162fd0df42bc92c.png

下篇:

Wenguang Liu:MySQL源码阅读4-do_command函数/功能类命令​zhuanlan.zhihu.com
67dbe25bd64208641162fd0df42bc92c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值