MySQL之InnoDB架构浅析

MySQL 5.7 参考手册(官方中文版) | 2.2 安装和升级MySQL 文章目录安装和升级 MySQL一般安装指南使用通用二进制文件在 Unix/Linux 上安装 MySQL 安装和升级 MySQL 一般安装指南 使用通用二进制文件在 Unix/Linux 上安装 MySQL Oracle 提供了一组 MySQL 的二进制发行版。其中包括针对许多平台的压缩tar文件(扩展名为.tar.gz的文件)形式的通用二进制发行版,以及针对选定平台的特定于平台的包格式的二进制发行版。 本节介绍在Unix/Linux平台上,使用压缩的tar文件二进制发行版安装MySQL。关于侧重于 MyS 阅读详情

InnoDB是一个兼顾高可靠性和高性能的通用存储引擎。在 MySQL 5.7 中,InnoDB是默认的 MySQL 存储引擎。

InnoDB 的主要优势

  • 支持事物,具备crash-safe的能力
  • 支持行锁以及MVCC,具备良好的多用户并发性和性能
  • Buffer Pool,提升热点数据的查询效率以及数据频繁更新时的效率
  • 聚簇索引,基于主键的查询有更小的IO次数,更加高效
  • 支持外键

架构图

在这里插入图片描述

Buffer Pool

Buffer Pool用于在 InnoDB访问时缓存表和索引数据,并且对于热点数据的访问有很好的加速效果。

Buffer Poold在内存中以链表的形式存在,该链表基于变种LRU进行管理。当新的数据页被添加到Buffer Pool时,会被添加到这个链表靠近中间的位置,这个位置被称为“midpoint”。这种插入策略将链表分成了两个子链表:

  • 靠近头部的一端是最近经常访问的热点数据(new区)
  • 靠近尾部的一端是最近较少访问的冷数据(old区)

在这里插入图片描述

当数据页被添加到old区后,如果该数据页又被再次访问了,并且其被添加到old区的时间超过一个阈值(默认是一秒,由innodb_old_blocks_time控制),则该数据页会被挪到new区的头部,其他数据向尾部移动。

随着数据页的不断读入以及链表中数据页访问频率的变化,new区跟old区中的某些数据页会不断的向尾部移动,直到最终被移除。

Change Buffer

Change Buffer用于缓存二级非唯一索引页的更新操作,加速insert、update、delete这类语句的执行效率。

相对于聚集索引,二级索引的插入顺序相相对随机,此时需要将数据页读入内存来判断插入位置,这个过程会产生很多随机IO。

对于二级索引中的非唯一索引,索引页的更新肯定不会引发唯一约束的冲突。此时便可以直接将更新操作保存在内存中,等到真正需要用到这些更新影响到的索引页时,再将这些更新应用到被影响的索引页即可。这种方式可以避免大量的随机IO访问,并且,读取之前更新的次数越多,收益越高。

可以通过innodb_change_buffering改变执行策略

  • all

    默认值:缓冲插入、删除和purge。

  • none

    不要缓冲任何操作。

  • inserts

    缓冲插入操作。

  • deletes

    缓冲删除操作。

  • changes

    缓冲插入和删除操作。

  • purges

    缓冲在后台发生的物理删除操作。

通过innodb_change_buffer_max_size 指定Change Buffer在Buffer Pool中的占比。默认25%,最大50%。

Redo Log

Redo Log用于实现事物的持久性(Durability),它让MySQL拥有了崩溃恢复能力。

Redo Log通过追加的方式进行数据写入,且记录的是数据的变化(表空间号、数据页号、磁盘文件偏移 量、更新值)。这样有两个好处,第一是顺序IO,第二是减少了刷到磁盘的数据量(16KB可以记录许多个数据页的改动)。这也是为什么不直接用数据文件或者Doublewrite Buffer来实现持久性的原因。

Redo Log由以两部分组成:

  1. Log files(默认100MB,最大128GB):磁盘上的文件,大小固定。通过checkpoint技术实现循环写入。

  2. Log Buffer(默认为 16 MB):内存区域,用于保存事物运行中需要被被写入到redo log的数据。这些数据默认会在事物提交时从内存刷入磁盘,当然,如果事物过大,Log Buffer不足以完全缓存这些数据,则会提前刷盘。

    同时,可以通过指定innodb_flush_log_at_trx_commit来控制Log Buffer里的数据如何写入和刷新到磁盘。有如下三个选项:

    • 1 :每次提交事务时刷盘
    • 0:默认每秒刷盘一次,可通过innodb_flush_log_at_timeout指定间隔。未刷盘事务可能会在crash中丢失
    • 2:事物提交后先写到os cache,并每秒刷盘。MySQL进程crash不会造成数据丢失。但是未刷盘事务可能会在操作系统crash中丢失

    Log Buffer通过对Redo log的批量刷盘(不同事物同时提交时会一起刷),避免了频繁的磁盘IO。

两阶段提交

由于BinLog处于Server层,Redo Log处于存储引擎层。为了保证Redo Log跟BinLog的一致性,在InnoDB写完Redo Log后会先通知执行器RedoLog已写入(prepare)。然后执行器会对BinLog执行写入操作。等到BinLog写入成功,执行器通知InnoDB,事物进入commit。

Doublewrite Buffer

在刷脏页时,数据页首先会被写到Doublewrite Buffer,然后才会被写到Innodb的数据文件。

在InnoDB里,页大小默认为16KB,而OS页大小通常默认时4KB。这意味着**InnoDB将Buffer Pool中一页数据刷入磁盘,要写4个OS页。而这并不是一个原子操作。**如果突然断电,就有可能存在只刷了2个OS页的情况。此时,数据页里部分数据(LSN)已经丢失,像这种情况,是无法靠Redo Log恢复的。

而Doublewrite Buffer里有完整的页信息,所以此时可以从Doublewrite进行恢复。那么,如果在写Doublewrite Buffer的时候断电呢?那就再重启后重新读入数据页并应用Redo Log再重新写DoubleWrite Buffer即可。

Undo Log

Undo Log用于实现事物的原子性(atomicity)以及MVCC。

Undo Log由rollback segments组成,单个表空间默认/最大128个。segment由Undo Slots组成,slot的数量取决于页大小。页大小为16kb时单个segment下slot的数量为1024。slot里存放的是用于回滚的信息。

segment为Innodb的事物并发提供支持。segment的数量与能够支持的事物并发数正相关,通常一个slot能够支持一个事物。具体计算方式也很简单,参考事物并发数计算。

通过innodb_rollback_segments指定segment数量

MVCC

MVCC全称Multiversion concurrency control,及多版本并发控制。是数据库管理系统
常用的一种并发控制,也用于程序设计语言实现事务内存。

MVCC目的是为了解决读写锁造成的多个、长时间的读操作阻塞写操作的问题。在特定的隔离级别(Read Commited、Repeatable Read)下,事务读操作读到的数据项是一个历史快照,写操作不覆盖已有数据项,而是创建一个新的版本,直至所在操作提交时才变为可见。这种方式使得事务在整个运行过程中看到的都是它启动时的数据状态。

InnoDB 里面每个事务有一个唯一的事务 ID,叫作 transaction id。它是在事务开始的时候向 InnoDB 的事务系统申请,按申请顺序严格递增。

在事物更新数据时,会将transaction id以及更新前的数据保存在undo log中。同时,会将transaction id保存在被修改的行的隐藏列DB_TRX_ID中。行记录中还有一个隐藏列,叫DB_ROLL_PTR,存储的事一个指向rollback segment的指针。rollback segment里存着撤销记录,用于撤销事物对数据的更改。同时,每条撤消记录都包含对其先前撤消记录的引用。这样,当前记录的所有先前版本就组成了一个链表。所以,只要撤消记录(“历史记录”)仍然存在于撤消日志中,就可以轻松构建任何先前版本的记录。

如果在该事物未提交时有其他事物来读取该行,就会通过这个指针来回溯并重建未修改前的数据。回溯的程度通过比较读事物跟redo log中的transaction id来决定,读事物能看到的数据必须是在其启动时已经提交的事物作出的数据修改。
在这里插入图片描述

参考

https://dev.mysql.com/doc/refman/8.0/en
https://blog.jcole.us/2014/04/16/the-basics-of-the-innodb-undo-logging-and-history-system/
High Performance MySQL 4th edition

【《MySQL 8 参考手册》中文翻译】前言 本书前言 阅读详情

相关推荐

mysql innodb架构分析

此文章将分析mysql innodb的架构

weixin_44550507的博客 1137

mysql5.7中文文档

MySql 中文文档 - MySql 5.7 | Docs4dev

m0_62755217的博客 548

MySQL:InnoDB架构(内存架构篇)

数据库的主要作用就是持久化数据,如果每次查询都要进行一次磁盘IO,效率会非常低下,因为磁盘IO是机械运动,所以mysql会将,表数据和索引数据缓存到内存中,如果查询的数据被缓存在内存中,直接在内存中操作,省去了磁盘IO大大提高了效率。如果使用DML修改的数据,是与二级索引关联的,并且没有缓存在BufferPool,ChangeBuffer会将修改给缓存起来,直到相关二级索的页,因查询被加载到bufferPool中,在将修改合并。减少磁盘的IO,避免了对二级索引的修改,频繁的进行磁盘的IO。

W2155的博客 1487

MySQL5.7 InnoDB官方文档中文版[猿教程]

猿教程 mysql5.7 innodb 官方文档中文版

hj_5346的专栏 1788

MySQL 5.7 中文文档

MySQL 5.7 中文文档 MySQL 5.7 中文文档 MySQL 5.7 中文文档

mysql 5.7 中文文档

翻译的还行 资源挺难找的

MySQL InnoDB存储引擎架构浅析

缓冲池配置innodb_buffer_pool_size = 系统内存的50-70%innodb_buffer_pool_instances = 8(大内存系统)# IO配置innodb_io_capacity = 200-2000(根据磁盘性能)# 日志配置innodb_flush_log_at_trx_commit = 1(严格持久化要求)或2(性能优先)

xiao__white的博客 1458

MYSQL文档完美中文版

这是MySQL参考手册的翻译版本,原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。

MySQL之InnoDB引擎结构浅析

MySQL InnoDB引擎结构摘要 InnoDB存储引擎采用多层次的逻辑存储结构,从表空间(TableSpace)到行数据(Row)构成完整体系。内存架构包含Buffer Pool(缓存热数据)、Change Buffer(优化非唯一索引更新)、自适应哈希索引等核心组件。磁盘架构则分为系统表空间、独立表空间、通用表空间等多种类型,分别存储不同数据。文章详细解析了InnoDB的物理和逻辑结构组成,包括表空间管理、内存缓冲机制、索引优化等关键技术点,并介绍了相关配置参数,帮助理解InnoDB高效运行的内部原理

1638

Kubernetes+EdgeX:构建企业级AI边缘推理平台

设备:工业摄像头(RTSP协议,输出1920x1080视频流);AI模型:YOLOv8训练的轴承裂纹检测模型(识别“裂纹”“正常”两种类型);目标:摄像头采集图像→EdgeX传输数据→K8s推理服务检测→结果反馈到报警器(HTTP协议)。Kubernetes+EdgeX的组合,为企业构建AI边缘推理平台提供了标准化、可扩展标准化:K8s的容器编排和EdgeX的设备管理,都是行业标准,避免“重复造轮子”;可扩展:支持从单边缘节点到 thousands of nodes 的规模,满足企业的增长需求;

AI算力网络与通信的博客 1344

嵌入式音频架构 - AudioWeaver 整体概念

AudioWeaver 是DSP Concept公司推出的基于嵌入式平台的音频框架。由AWE Core embedded processing engine 和 Audio Weaver Designer IDE 组成。 Audio Weaver Designer 有三个版本,ST Edition, Standard Edtion 和 Pro Edtion。 Audio Weaver Designer界面: Audio Weaver 的整体使用架构: AWD算法流文件,AWS配置脚本文件,AWB嵌入式b

甲客实验室 6880

MySQL——InnoDB引擎架构

当我们去操作MySQL的时候先去操作缓冲区,如果缓冲区没有数据会将磁盘中的数据加载回来,然后再存储在缓冲区中,我么在增删改的时候都去操作缓冲区,然后缓冲区中的数据 会以一定频率通过后台线程写道磁盘架构中进行永久化保存。

2301_81283571的博客 1309

VINS-Fusion实战:从零搭建无人机视觉SLAM系统(附ROS配置全流程)

本文详细介绍了如何从零开始为无人机搭建基于VINS-Fusion的视觉SLAM系统。内容涵盖硬件选型(重点推荐双目相机与IMU搭配)、ROS环境配置、传感器标定、核心参数调优以及实际飞行测试与问题排解全流程,旨在帮助开发者实现稳定、精确的无人机自主定位与导航。

wasm7browser的博客 214

MySQL 之 InnoDB 存储架构解析

形成的版本链结构为: 当前行(DB_TRX_ID=300, DB_ROLL_PTR→undo2) undo2(DB_TRX_ID=200, DB_ROLL_PTR→undo1) undo1(DB_TRX_ID=100, DB_ROLL_PTR=null)InnoDB 的聚簇索引是其核心特性,它将数据与索引存储在同一 B+树中,这种结构使得基于主键的查询效率极高,因为无需二次查找数据。表空间是 InnoDB 逻辑存储结构的最高层级,它是一个逻辑上的概念,用于容纳多个段,是数据存储的容器。

Toroto5的博客 1307

华为OD机试 - 压缩日志查询(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。某设备需要记录每分钟检测到的指标值。为了节约存储空间,将连续相同指标值的记录合并。压缩之前:202411231000,11 202411231001,11 202411231002,12 202411231003,12 202411231004,

学Java,找哪吒 1880

FPGA实现DDR接口

verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。

whm128的博客 1001

InnoDB 存储引擎<一>InnoDB简介与MySQL存储架构及相关数据结构

InnoDB简介与MySQL存储架构及相关数据结构

Miwll的博客 1731

WPF实现棋盘式图片切换效果

实现效果如下: 思路:在自定义控件中放置两个Image控件,点击前后翻页按钮时对图片进行裁剪,随机打乱顺序后添加动作。 步骤: 1、MyImageControl控件 /// <summary> /// MyImageControl.xaml 的交互逻辑 /// </summary> public partial class MyImageControl : UserControl { public static r

dnazhd的博客 1125

浅析InnoDB引擎架构(已完结)

大家好,我是此林。今天来介绍下InnoDB底层架构。

2401_82540083的博客 1416

15、z/OS 优化配置与迁移实践

本文详细探讨了z/OS环境的优化配置与迁移实践,涵盖DASD存储库管理、用户目录更新、环境更新意义以及不同场景下的迁移案例。通过单笔记本系统和服务器级机器的实例,展示了迁移流程和关键要点,包括DASD文件创建、设备映射更新、系统重启初始化以及数据备份等步骤。文章还总结了迁移过程中的注意事项,并展望了未来z/OS优化的发展趋势,为z/OS系统的稳定运行和高效管理提供了实用指导。

zzz56的博客 129

手把手入门YOLO到改进优化教程专栏介绍与说明——列表目录查阅(持续更新)

手把手入门YOLO到改进优化教程专栏介绍与说明——列表目录查阅(持续更新)

嵌入式阿齐Archie 2万+

Mysql之innodb浅析

Mysql之innodb浅析Mysql之innodb浅析基本描述数据结构事物隔离级别Read Uncommitted(读取未提交内容)Read Committed(读取提交内容)Repeatable Read(可重读)Serializable(可串行化)锁当前读快照读MVCC(多版本并发控制) Mysql之innodb浅析 基本描述 Mysql的数据库引擎之一,目前是默认存储引擎 区别于ISAM和MyISAM,最大的特色是支持ACID兼容的事物功能 事务管理(ACID) 原子性(Atomicit

Stephen的博客 252

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【MySQL】InnoDB架构

InnoDB架构整体上是分成两部分的:内存结构(提高效率)和磁盘结构(数据持久化),下面将把每个区域都大致做一个介绍。

p_fly的博客 1306

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MySQL_01_MySQL架构和InnoDB架构

文章目录InnoDB 内存架构1、Buffer Pool2、Change Buffer3、Adaptive Hash Index4、Log BufferOperating System CacheInnoDB 磁盘架构1、表空间(Tablespaces)2、Doublewrite Buffer如果说 Change Buffer 是提升性能,那么 Doublewrite Buffer 就是保证数据页的可靠性。未完待续 对于 MySQL,要记住、或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图

毛毛的专栏 1251

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【MySQL · Innodb架构简析】一、内存架构

1. Innodb架构图(MySQLv5.7 取自官网) 说明:上图包含了Innodb内存架构和磁盘架构,各自在后面作详细介绍。 1.1 Innodb内存架构 主要分一下几个要点 Buffer Pool(buffer池) Change Buffer(更改buffer) Adaptive Hash Index(自适应hash索引) Log Buffer(日志buffer) 注:一般不对buffer作翻译 1.2 Buffer Pool 注意:为了编写方便,下文以bp代指Buffer Pool Buffe

Rei的博客 623

MySQL-InnoDB引擎-架构和事务原理

当我们在一个事务中,执行多个增删改的操作时,InnoDB引擎会先操作缓冲池中的数据,如果缓冲区没有对应的数据,会通过后台线程将磁盘中的数据加载出来,存放在缓冲区中,然后将缓冲池中的数据修改,修改后的数据页我们称为脏页。缓冲池 Buffer Pool,是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。而持久性是通过数据库的锁, 加上MVCC来保证的。

qq_46096136的博客 1万+
上一篇: MySQL浅析之架构概览
下一篇: 厨神之蛋糕制作
穹柏
博客等级 码龄10年 11粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值