广告
返回顶部
首页 > 资讯 > 数据库 >InnoDB数据字典--字典表加载
  • 537
分享到

InnoDB数据字典--字典表加载

2024-04-02 19:04:59 537人浏览 薄情痞子
摘要

1、介绍 在InnoDB启动时,如果是新建数据库则需初始化库,需要创建字典管理的相关信息。函数innobase_start_or_create_for_Mysql调用dict_create完成此功能

1、介绍

    在InnoDB启动时,如果是新建数据库则需初始化库,需要创建字典管理的相关信息。函数innobase_start_or_create_for_Mysql调用dict_create完成此功能。即创建数据字典,因为InnoDB系统表的个数结构固定,所以初始化库的时候只需要创建这几个表的B+树即可并将B+树的根页号存放到固定位置。对于B+树,只要找到根页面,就可以从根页面开始检索数据。相关系统表(即上一节讲到的4个系统表)在InnoDB内部,不会暴露给用户。

    4个系统表通过固定的硬编码进行构建。具体原理流程如下。

2、数据字典创建及加载原理流程
InnoDB数据字典--字典表加载
3、说明

1)innobase_start_or_create_for_mysql函数调用dict_create()函数进行数据字典的创建和加载工作。

2)dict_hdr_create完成系统表空间第7号页面dict header的初始化及创建SYS_TABLES两个索引、SYS_COLUMNS一个索引、SYS_INDEXES一个索引、SYS_FIELDS一个索引,其创建索引的函数是btr_create。

3)创建B+树索引后,通过dict_boot函数加载常驻内存的4个系统表。具体流程见流程图的②部分。

4)加载完成后,将这4个系统表挂在一个全局字典中:

dict0dict.h::

  
struct dict_sys_t{  
    ib_mutex_t      mutex;        
    row_id_t    row_id;       
    hash_table_t*   table_hash;   
    hash_table_t*   table_id_hash;    
    ulint       size;         
    dict_table_t*   sys_tables;   
    dict_table_t*   sys_columns;      
    dict_table_t*   sys_indexes;      
    dict_table_t*   sys_fields;   

      
    UT_LIST_BASE_node_T(dict_table_t)  
            table_LRU;    
    UT_LIST_BASE_NODE_T(dict_table_t)  
            table_non_LRU;    
}; 

结构体中sys_tables、sys_columns、sys_indexes、sys_fields四个结构存储上述对应的4个系统表。

结构体中HASH表及链表用来存储InnoDB中的所有表的缓存,包括系统表及用户表。table_hash哈希表按名字缓存,table_id_hash按表ID进行hash,LRU链表用来管理表对象缓存。

5)普通用户表加载流程见流程图的③、④部分。

当用户访问一个用户表时,首先需要从表对象缓存中查找这个表的SHARE对象,如果找到则直接从其实例化表对象链表中拿一个使用;如果没有找到,则需要重新打开这个表,需要找到这个表的字典信息。即③的流程。

具体加载一个表的字典是④流程,dict_load_table的工作。

a)首先需要找到SYS_TABLES表,也是先找缓存,缓存找不到再从系统表加载: dict_table_get_low

b)找到之后构建一个查询键值,从SYS_TABLES的name主键索引进行查询,如果诶呦找到或者该记录已经被删除则返回,否则解析找到的这条记录。然后根据这些信息创建表的内存对象table。

c)加载列操作与加载表的原理基本一样,对应系统表的SYS_COLUMNS,聚集索引为(TABLE_ID,POS),查找时,如果TABLE_ID相同,在POS从小到大排序,所以构造所有列的键值时,只需要通过TABLE_ID查询即可,按顺序取出所有列信息一一构造内存对象。

d)加载索引信息类似的流程

您可能感兴趣的文档:

--结束END--

本文标题: InnoDB数据字典--字典表加载

本文链接: https://www.lsjlt.com/news/36105.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • InnoDB数据字典--字典表加载
    1、介绍 在InnoDB启动时,如果是新建数据库则需初始化库,需要创建字典管理的相关信息。函数innobase_start_or_create_for_mysql调用dict_create完成此功能...
    99+
    2022-10-18
  • InnoDB数据字典详解-系统表
    1、简介 InnoDB中,实际上看不到系统表。有4个最基本的系统表来存储表的元数据:表、列、索引、索引列等信息。这4个表分别是SYS_TABLES、SYS_COLUMNS、SYS_INDEXES、SYS_F...
    99+
    2022-10-18
  • 怎么理解InnoDB数据字典
    本篇内容介绍了“怎么理解InnoDB数据字典”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 数据字典
    SYS@newtest>alter pluggable database clonepdb_plug open; 插接式数据库已变更。 SYS@newtest>show pdbs CON_ID ...
    99+
    2022-10-18
  • SpringBoot实现加载yml文件中字典数据
    将字典数据,配置在 yml 文件中,通过加载yml将数据加载到 Map中 Spring Boot 中 yml 配置、引用其它 yml 中的配置。# 在配置文件目录(如:resourc...
    99+
    2023-05-16
    SpringBoot加载yml文件字典数据 SpringBoot yml字典数据 SpringBoot yml数据 SpringBoot yml
  • oracle 数据字典
    表和列DBA_TABLES、ALL_TABLES和USER_TABLES显示了有关数据库表的一般信息。DBA_TAB_COLUMNS、ALL_TAB_COLUMNS和USER_TAB_COLUMNS显示了每...
    99+
    2022-10-18
  • Oracle之数据字典
    数据字典数据字典是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息数据字典记录了数据库的系统信息,它是只读表和视图的集合,数据字典的所有者是sys用户用户只能在数据字典上执行查询操作,而其...
    99+
    2022-10-18
  • 基本的数据类型(数字、字符串、列表、字典
    一、数字NUMBER   int 整形   float 浮点型 a = 12 b = 3.1 print(type(a),type(b)) #结果 <class 'int'> <class 'float'> ...
    99+
    2023-01-30
    字符串 字典 数据类型
  • 如何使用Hanlp加载大字典
    这篇文章将为大家详细讲解有关如何使用Hanlp加载大字典,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 问题因为需要加载一个 近 1G 的字典到Hanlp中,一开始使用了...
    99+
    2022-10-19
  • 怎么加速Python列表和字典
    本篇内容主要讲解“怎么加速Python列表和字典”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么加速Python列表和字典”吧!我们先编写一个装饰器函数来计算函数的执行时间,方便测验不同代码的...
    99+
    2023-06-16
  • python如何往字典里添加数据
    可以使用字典的`update()`方法来添加数据。`update()`方法接受一个字典参数,将该字典的键值对添加到原字典中,如果原字...
    99+
    2023-10-12
    python
  • Oracle数据字典详解
    目录1. 什么是oracle数据字典2. 数据字典的内容3. 数据字典应用示例1. 什么是Oracle数据字典 数据字典(Data Dictionary)是Oracle元数据(Metadata)的存储地点,汇集了数据库对...
    99+
    2023-04-19
    Oracle数据字典介绍 Oracle数据字典 Oracle数据
  • Oracle 11g R2 数据字典
    数据字典是oracle存储关键信息的表和视图的集合。oracle进程会在sys模式中维护这些表和视图,也就是说数据字典的所有者为sys用户,数据存放在system表空间中,数据字典描述了实际数据是如何组织的...
    99+
    2022-10-18
  • DB2 数据字典详解
    对于每个数据库,都创建和维护一组系统编目表。这些表包含关于数据库对象(例如表、视图、索引和包 ) 的定义的信息以及关于用户对这些对象的访问类型的安全信息。     对...
    99+
    2022-10-18
  • 易优eyoucms数据表结构和字段说明(数据字典)
    目录EyouCms概述优点缺点易优CMS数据字典ey_adey_ad_positioney_adminey_admin_logey_archivesey_arcmultiey_arc...
    99+
    2023-05-17
    易优cms数据表结构eyoucms数据表字段 易优eyoucms数据字典
  • InnoDB 层全文索引字典表 | 全方位认识 information_schema
    在上一篇中,我们详细介绍了 InnoDB 层的锁、事务、及其相关的统计信息字典表 ,本期我们将为大家带来系列第七篇《InnoDB 层全文索引字典表 | 全方位认识 information_schem...
    99+
    2022-10-18
  • oracle锁相关数据字典
    --杀掉进程 sid,serial# alter system kill SESSION "64,177"; --查看被锁的表 select b.owner,b.object_name,a.session_id,a.locke...
    99+
    2014-06-05
    oracle锁相关数据字典
  • Python数据类型--字典dictionary
    目录一、定义二、操作三、遍历字典一、定义 字典是一系列的键-值对,键与值之间用冒号隔开,而键-值对之间用逗号隔开,其中的“键”和“值”...
    99+
    2022-11-13
  • Python数据容器——列表、元组、字符串、集合、字典
    作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、了解数据容器 1. 为什么需要数据容器? 2....
    99+
    2023-09-22
    python 数据容器 元组 列表 集合
  • 【Python】对字典列表进行去重追加
    [TOC] 目标 现有字典列表 # A = [ {dict1}, {dict2} ] B = [ {dict3}, {dict2} ] C = [ {dict3}, {dict4} ] M = [...
    99+
    2023-01-31
    字典 列表 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作