MySQL深入——23

主机内存只有100G,现在对一个200G的大表进行扫描,会不会把数据库的内存用完。

对大表做全表扫描对Sever层的影响

假设现对一个200G的InnoDB表db1,做一个全表扫描,当然要把扫描结果保存到客户端。

InnoDB的数据时保存在主键索引上的,所以全表扫描实际上是扫描表t的主键索引,最后返回给客户端。

返回的结果集并不是完整的,因为MySQL是边读边发的
流程为:1.获取一行写到net_buffer当中,net_buffer是由net_buffer_length定义的,默认为16k。

               2.重复获取知道net_buffer写满,调用网络接口发送出去。

               3.若是发送成功,就清空net_buffer,然后继续读取下一行写入net_buffer

               4.若发送函数返回EAGAIN或WSAEWOULDBLOCK就表示本地网络栈写满,直到网络栈重写可写,再继续重复操作。

一个查询在发送过程当中,占用MySQL内部最大内存就是net_buffer这么大,并不会达到200G。这意味着,若客户端接收慢,MySQL就会由于结果发送不出去导致事务执行的时间变长。

若是客户端不读socket receive buffer中的内容,然后再show processlist中可以看到state处于一个Sending to client的状态。

对于线上业务来说,若是一个查询的返回结果不会很多,就可以在客户端使用一个-quick参数就可以使用,mysql_use_result这个方法,读一行处理一行。当然前提是查询返回结果不多,若是看到多个线程都处于Sending to client,可以将net_buffer_length设置为一个更大的值。

Sending data

MySQL查询语句在进入执行阶段之后,首先将状态设置为Sending data,再继续执行语句的流程,执行完成后就会将状态改为空字符串。

也就是说在一个线程处于“等待客户端的状态”才会显示未Sending to client,Sending data是正在执行。

全表扫描对InnoDB的影响

InnoDB内存的作用是保持更新结果在配合redo log避免了随机写盘,内存的数据页是在BUffer Pool中管理的。

BUffer Pool还有一个加速功能,因为有WAL机制,当时事务要提交的时候,有一个查询要读该内存页,就可以直接读,因为这个时候,内存页是最新的,直接读内存页就可以了,无需将redo log应用到数据页当中再读取。

Buffer Pool对于查询加速效果还有一个重要的指标:内存命中率,一般情况下,内存命中率要在99%以上。

InnoDB Buffer Pool大小是由参数innodb_buffer_pool_size决定的,一般设置为物理内存的60%-80%。

innodb_buffer_pool_size小于磁盘的数据量很常见,若一个buffer pool满了,就要淘汰一个旧数据页来更新一个新数据页。InnoDB通过改进LRU算法来实现这一目标。

LRU算法:假设内存当中有P1,P2,P3,P4,P5这么多数据页,是以链表形式保存的,P1是刚刚更新的所以在头部,这个时候有请求访问P3,P3就会被移动到头部,现在要更新一个数据页,因为内存满了,要删除一个,就会删除尾巴的P5数据页。

InnoDB改进:InnoDB将其进行改进,以5:3将空间分为young和old区域,young区域中的操作和原LRU算法相同。

在old区域每次被访问的时候做如下的操作:

1.若这个数据页在LRU链表中存在时间超过1秒,就移动到头部。

2.若是短于1秒,位置保持不变

时间有参数Innodb_old_blacks_time控制,单位为毫秒,默认一秒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构从入门到精通——顺序表

顺序表 前言一、线性表二、顺序表2.1概念及结构2.2 接口实现2.3 数组相关面试题2.4 顺序表的问题及思考 三、顺序表具体实现代码顺序表的初始化顺序表的销毁顺序表的打印顺序表的增容顺序表的头部/尾部插入顺序表的头部/尾部删除指定位置之前插入数据和删除指定位置数据顺序表元…

Linux如何查看端口是否占用

在Linux中,有多种方法可以用来检查端口是否被占用。以下是一些常用的命令: netstat:这是一个非常通用的命令,可以用来查看所有端口的使用情况。如果你想查找特定的端口是否被占用,可以使用netstat命令配合grep。例如&…

【MySQL】DQL

DQL(数据查询语言)用于在MySQL数据库中执行数据查询操作。它主要包括SELECT语句,用于从表中检索数据。 0. 基本语法 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 …

未来医疗技术的发展方向在Python中的重要性

未来医疗技术的发展方向在Python中的重要性体现在以下几个方面: 数据分析和人工智能:Python作为一种强大的数据分析语言,可以进行大规模的数据处理、分析和挖掘。在医疗领域,大量的医疗数据可以通过Python进行分析,帮助…

【市工信】2024年青岛市绿色工厂、绿色工业园区等绿色制造示范申报

科大睿智小编从青岛市工信局了解到&#xff0c;为深入贯彻绿色发展理念&#xff0c;牢固树立绿色低碳发展导向&#xff0c;进一步完善绿色制造体系&#xff0c;培育绿色制造先进典型&#xff0c;根据《工业和信息化部关于印发<绿色工厂梯度培育及管理暂行办法>的通知》&a…

springcloud:3.1介绍雪崩和Resilience4j

灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…

在golang中使用protoc

【Golang】proto生成go的相关文件 推荐个人主页&#xff1a;席万里的个人空间 文章目录 【Golang】proto生成go的相关文件1、查看proto的版本号2、安装protoc-gen-go和protoc-gen-go-grpc3、生成protobuff以及grpc的文件 1、查看proto的版本号 protoc --version2、安装protoc-…

Acwing 周赛132 解题报告 | 珂学家 | 并查集 + floyd寻路

前言 整体评价 A. 大小写转换 Q: 把字符串s统一成小写字母形态 题型&#xff1a;签到 知识点: 考察字符串的API题 c可以借助transform函数&#xff0c;进行转化 #include <bits/stdc.h>using namespace std;int main() {string s;cin >> s;// 把自己转化为小写…

10-Java装饰器模式 ( Decorator Pattern )

Java装饰器模式 摘要实现范例 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构 装饰器模式创建了一个装饰类&#xff0c;用来包装原有的类&#xff0c;并在保持类方法签名完整性的前提下&#xff0c;提供…

代购程序api接口采集商品信息接入演示示例

以下是一个使用Java编写的简单示例&#xff0c;演示如何通过API接口采集商品信息并接入到代购程序中&#xff1a; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; impor…

vue使用swiper(轮播图)-真实项目使用

一、安装 我直接安装的vue-awesome-swiper": "^3.1.3"指定版本 npm install vue-awesome-swiper3.1.3 swiper --save二、vue页面使用&#xff0c;写了一个小demo <template><div class"vue-swiper"><h1>{{ msg }}</h1><…

陶瓷工业5G智能制造工厂数字孪生可视化平台,推进行业数字化转型

陶瓷工业5G智能制造工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。在陶瓷工业领域&#xff0c;5G智能制造工厂数字孪生可视化平台的应用正在改变着行业的传统生产模式&#xff0c;推动着数字化转型的进程。本文将围绕这一主题展开探讨&#xff0c;分析数字孪生可视化…

Unity GC + C# GC + Lua GC原理

Unity垃圾回收原理 参考文章&#xff1a;垃圾回收 (计算机科学) - 维基百科&#xff0c;自由的百科全书 (wikipedia.org) 在计算机科学中&#xff0c;垃圾回收&#xff08;英语&#xff1a;Garbage Collection&#xff0c;缩写为GC&#xff09;是指一种自动的存储器管理机制。…

配置之道:深入研究Netty中的Option选项

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 配置之道&#xff1a;深入研究Netty中的Option选项 前言Option的基础概念ChannelOption与Bootstrap Option常见的ChannelOption类型ChannelConfig的使用Option的生命周期不同传输协议的Option 前言 在…

Linux下检查端口占用

很多网站都给出方法检查出端口占用的进程&#xff0c;直接就kill掉&#xff0c;并不检查占用进程的详细情况&#xff0c;如&#xff1a;https://www.runoob.com/w3cnote/linux-check-port-usage.html 正常情况下&#xff0c;需要对进程进行检查 ls /proc/进程ID -l

Tomcat部署Web服务器及基础功能配置

前言 Tomcat作为一款网站服务器&#xff0c;目前市面上Java程序使用的比较多&#xff0c;作为运维工人&#xff0c;有必要了解一款如何去运行Java环境的网站服务。 目录 一、Java相关介绍 1. Java历史 2. Java跨平台服务 3. Java实现动态网页功能 3.1 servelt 3.2 jsp …

Revit-二开之创建TextNote-(1)

Revit二开之创建TextNote TextNode在Revit注释模块中&#xff0c;具体位置如图所示 图中是Revit2018版本 【Revit中的使用】 Revit 中的操作是点击上图中的按钮在平面视图中点击任意放置放置就行&#xff0c; 在属性中可以修改文字 代码实现 创建TextNode ExternalComm…

Web Tomcat

目录 1 前言2 Tomcat的安装3 Tomcat文件的构成4 Tomcat的使用步骤 1 前言 Tomcat是一个 http(web)的容器&#xff0c;笼统的理解一下所有的网站都叫做web。这个web容器可以把我们的前端(htmlcssjs)和后端(servlet)代码都运行起来。 Tomcat是一个免费的开源的Servlet容器&#…

Flutter中的三棵树

Widget Tree&#xff1a; 页面配置信息。 Element Tree&#xff1a; Widget tree的实例化对象&#xff0c;创建出renderObject&#xff0c;并关联到element.renderobject属性上&#xff0c;最后完成RenderObject Tree的创建。 RenderObject Tree&#xff1a;完成布局和图层绘制…

【C++ 函数重载】

C 函数重载 ■ C 函数重载简介■ C 运算符重载■ 一元运算符重载■ 二元运算符重载 &#xff08;&#xff0c;-&#xff0c;*&#xff0c;/&#xff09;■ 关系运算符重载 &#xff08; < 、 > 、 < 、 > 、 等等&#xff09;■ 输入/输出运算符重载&#xff08;运…