首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL 存储过程运行的内存管理

一、讲解例子 二、function内存管理过程讲解 三、function内存管理过程图例 四、总结 一、讲解例子 MySQL的存储过程在运行过程中的内存管理跟table等运行时候是不一样的,它涉及多层内存管理...接下来我用以下function的例子来说明,procedure的也是类似的,只是少了return result的过程。...(call_arena, &backup_arena); 建立新的内存块call_arena用来存放funciton运行产生的数据。...business=space_collection&business_id=343928&desc=0 ---- 文章推荐: MySQL 8.0有趣的新特性:CHECK约束 MySQL 启停过程了解一二...MySQL内存管理机制浅析 技术分析 | 浅析MySQL与ElasticSearch的组合使用 ---- 关于 GreatSQL GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR

1.7K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    详述一次大量删除导致MySQL慢查的过程

    墨墨导读:本文记录一次大量删除导致MySQL慢查的分析,大家有没有遇到过这种问题? 一、背景 监控上收到了大量慢查的告警,业务也反馈查询很慢,随即打开电脑确认慢查的原因。...回到数据库本身,慢查还在,确认下慢查到底是慢在哪里。 当慢查在执行的时候,大部分的都是表现在 Sending data 的状态,我们通过 profiling 去确认下慢查的时间分布: ?...手动将该线程执行 kill 操作,慢查消失。 3.1 聊一下 MVCC MySQL InnoDB 支持 MVCC 多版本,可以在普通的 SELECT 时不加锁。...3.2 慢查问题复现 经过和业务方沟通,得知该表每天都有定时任务,会删除历史数据。大致了解到整个过程后,我们搭建模拟环境进行测试。 ?...当被删除的记录不再被其他事务需要的时候,会被 purge 线程删除。 purge 线程负责清理这些真正被删除的记录以及不再需要的 UNDO 日志。 回到慢查本身,我们来看看慢查的执行过程。

    81620

    详述一次大量删除导致MySQL慢查的过程分析

    手动将该线程执行 kill 操作,慢查消失。 3.1 聊一下 MVCC MySQL InnoDB 支持 MVCC 多版本,可以在普通的 SELECT 时不加锁。...3.2 慢查问题复现 经过和业务方沟通,得知该表每天都有定时任务,会删除历史数据。大致了解到整个过程后,我们搭建模拟环境进行测试。 ?...当记录被执行删除的时候,MySQL 只是将记录标记为已删除,同时更新 DATA_TRX_ID 为自己删除会话的事务 ID,并没有将记录真正删除。...当被删除的记录不再被其他事务需要的时候,会被 purge 线程删除。 purge 线程负责清理这些真正被删除的记录以及不再需要的 UNDO 日志。 回到慢查本身,我们来看看慢查的执行过程。...由于被删除的记录有 2000 万,Innodb 需要扫描 2000 万的记录,才能找到符合条件的第一条记录,然后返回到 MySQL 的 Server 层。

    64430

    SQL语句在MYSQL中的运行过程和各个组件的介绍

    Mysql的组件有哪些? mysql是由两层组成的:客户端,连接器,查询缓存(MYSQL8.0以后没有这个数据)分析器,优化器,执行期,存储引擎。 二.各个组件所负责的责任是什么?...连接器: 权限校验,查看登录用户是否有权限访问数据库,如果出错就会出现(Access denied for user)然后运行程序就结束了如果连接成功连接器就会去查看这个用户的权限,即以后的权限逻辑都是依赖于次权限...,在连接过程中如果长时间没有操作则会在默认的时间内进行断开连接(wait_timeout)。...短连接:少量用户的使用,在使用完之后进行断开,创建一次连接也是一个复杂的过程。...(ROWS_EXAMINED字段 表示这个语句执行过程中扫描了多少行,这个值就是在执行器每次调用引擎接口获取数据行的时候累加的)

    1.9K30

    为什么我的sql没问题但还是这么慢|MySQL加锁规则

    前言 前阵子参与了字节跳动后端青训营,其中大项目编写涉及到数据持久化一般选择使用MySQL。由于时间原因,数据库使用我选择了无脑三板斧:1. 建立了索引加速查询、2. 关闭自动提交事务、3....这么一看,仿佛即使是实际开发也与你此前听闻的一些MySQL相关名词:读写锁、间隙锁、多版本并发控制、redo log、bin log、undo log毫不相干,在讲本文的主题之前,我先引入一个真实场景。...在某次不够规范的小组开发过程中,开发成员选择测试程序的方式比较原始,大家共享一个测试数据库,各自使用测试账号进行接口的测试,这就意味着数据库中的记录在某一时刻有可能被多个事务访问,甚至在其他人测试的同时...此时你是否又对我最初给出的小组开发时访问数据库慢的场景有了自己的思考,其实在高QPS情况下,发生死锁检测的概率是大大高于小组开发场景的 因此控制热点记录的并发访问数量,是提升数据库IO性能的重要前提。...简言之就是每条行记录值的变化是由一个链式的结构组织的,存放在undo log文件当中,undo log在事务发生回滚的时候,用于回溯事务对行记录的修改过程。

    83630

    MySQL实战第十九讲-为什么我只查一行的语句,也执行这么慢?

    一般情况下,如果我跟你说查询性能优化,你首先会想到一些复杂的语句,想到查询需要返回大量的数据。但有些情况下,“查一行”,也会执行得特别慢。...在第 6 篇文章《MySQL深入学习第六篇 - 全局锁和表锁 :给表加个字段怎么有这么多阻碍?》中,我给你介绍过一种复现方法。但需要说明的是,那个复现过程是基于 MySQL 5.6 版本的。...而 MySQL 5.7 版本修改了 MDL 的加锁策略,所以就不能复现这个场景了。 不过,在 MySQL 5.7 版本下复现这个场景,也很容易。如 图3 所示,我给出了简单的复现步骤。...作为确认,你可以看一下慢查询日志,注意,这里为了把所有语句记录到 slow log 里,我在连接后先执行了 set long_query_time=0,将慢查询日志的时间阈值设置为 0。...小结 今天我给你举了在一个简单的表上,执行“查一行”,可能会出现的被锁住和执行慢的例子。这其中涉及到了表锁、行锁和一致性读的概念。 在实际使用中,碰到的场景会更复杂。

    99430

    在《我的世界》里搭建神经网络,运行过程清晰可见,这位印度小哥开发的新玩法火了

    图片里这位玩家做的正是MNIST手写数字分类网络。 只需用剑在墙壁上画出数字,神经网络就能知道你写的是几。不仅仅如此,神经网络在推理过程中,哪些神经元被激活,都可以在这里看得一清二楚。 ?...Scarpet-nn支持卷积层和完全连接层,允许在单个世界中运行多个神经网络。而且可以展示中间张量的逐块激活,甚至还能一次运行多个神经网络。...运行modeltolitematica.py将神经网络的所有层转换为不同的Litematica示意图。每个示意图仅包含一层神经网络。 图中以紫色表示+1的块,以绿色代表-1的块。...把神经网络铺在地上 由于卷积层会出现4维数组,这在3维空间里是没法表示的,因此这个过程中还加入了压缩。 一般卷积层的形式是:[c2, c1, fh, fw]。...最后,作者还给出了一个MNIST示意图MineCraft文件包,如果只想简单看看实际运行效果,可以在我们的公众号中回复我的世界获取。

    47530

    MySQL深入学习第十九篇-为什么我只查一行的语句,也执行这么慢?

    一般情况下,如果我跟你说查询性能优化,你首先会想到一些复杂的语句,想到查询需要返回大量的数据。但有些情况下,“查一行”,也会执行得特别慢。...在第 6 篇文章《MySQL深入学习第六篇 - 全局锁和表锁 :给表加个字段怎么有这么多阻碍?》中,我给你介绍过一种复现方法。但需要说明的是,那个复现过程是基于 MySQL 5.6 版本的。...而 MySQL 5.7 版本修改了 MDL 的加锁策略,所以就不能复现这个场景了。 不过,在 MySQL 5.7 版本下复现这个场景,也很容易。如 图3 所示,我给出了简单的复现步骤。 ?...作为确认,你可以看一下慢查询日志,注意,这里为了把所有语句记录到 slow log 里,我在连接后先执行了 set long_query_time=0,将慢查询日志的时间阈值设置为 0。...小结 今天我给你举了在一个简单的表上,执行“查一行”,可能会出现的被锁住和执行慢的例子。这其中涉及到了表锁、行锁和一致性读的概念。 在实际使用中,碰到的场景会更复杂。

    1.1K20

    我就想加个索引,怎么就这么难?

    ❝领导让我SQL优化,我直接把服务干挂了...❞ 前言 MySQL大表加字段或者加索引,是有一定风险的。 大公司一般有DBA,会帮助开发解决这个痛点,可是DBA是怎么做的呢?...❞ 调用存储过程,生成百万数据 CALL test(); 开启慢SQL日志 # 查看MySQL是否开启慢日志记录 SHOW VARIABLES LIKE 'slow_query_log'; # 开启慢...测试项目的逻辑:随机get()、list()、update()、create(),每个操作都开启事务,并且休眠500毫秒。 步骤 ❝运行测试项目 ❞ ?...pt-osc死锁日志 其实,这个跟我的代码有一定的关系,我的测试代码随机数生成的范围是[0, 20000],然后我根据生成的随机数,去查询数据库,锁的冲突会比较多。...Online DDL执行过程 拿MDL写锁 降级成MDL读锁 真正做DDL 升级成MDL写锁 释放MDL锁 1、4如果没有锁冲突,执行时间非常短。

    49110

    《高性能MySQL》读书笔记

    我使用的中间件,也不知道它们的性能如何。 这样不好。 本系列取材于《高性能MySQL》第三版,是我的学习笔记。...也可以请求优化器解释优化过程的各个因素,使用户可以知道服务器是如何进行优化决策的,并提供一个参考标准,便于用户重构查询和schema、修改相关配置,使应用尽可能高效的运行。...slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) long_query_time 查询超过多少秒才记录...注意,该语句不 是随机生成的,而是分组语句中最差的查询SQL语句) ---- 优秀资料 参考资料来源:Mysql性能瓶颈深度定位分析 我们在性能测试过程中,经常会遇到Mysql出现性能瓶颈的情况,对于数据库来说...1、太多的列 从行缓冲中将编码过的列转换成数据结构的操作代价是非常高的。 如果计划使用数千个字段,必须意识到服务器的性能运行特征会有一些不同。

    38620

    一文搞懂MySQL各种日志

    一、引言 在MySQL中,日志非常重要的一个组成部分,它记录了数据库运行状态的各种信息,包括错误信息、查询信息、事务信息等等,是进行异常排查、性能优化、数据恢复和备份的关键基础。...三、Server层日志 Error Log 错误日志 错误日志(Error log)是MySQL在启动、运行过程中产生的错误和警告信息的记录。...在MySQL的内部实现中,错误日志是由Server层自动产生和记录的。MySQL Server启动时,会自动创建错误日志文件,并在运行过程中不断记录异常信息。...在 MySQL Server 运行过程中,如何判断一条 SQL 语句是否为慢查询,需要根据执行时间和配置参数中指定的时间的大小进行比较,若超过指定时间则被认定为执行时间较慢的查询语句。...减少随机写磁盘的次数:MySQL 写入磁盘的随机操作非常低效,redo log 机制可以将 MySQL 对于数据修改的写操作集中到一块更高效的地方,从而避免了每次操作都要进行磁盘随机读写的场景,提高性能

    4.6K50

    77.如果用go语言,在 RANDOMIZED-QUICKSORT 的运行过程中,在最坏情况下,随机数生成器 RANDOM 被调

    二、如果用go语言,在 RANDOMIZED-QUICKSORT 的运行过程中,在最坏情况下,随机数生成器 RANDOM 被调用了多少次?在最好情况下呢?以θ符号的形式给出你的答案?...文心一言: 在 RANDOMIZED-QUICKSORT 的运行过程中,最坏情况下,随机数生成器 RANDOM 的调用次数为 O(n)。...由于我们将较小的一份作为基准值,所以我们需要对较大的一份进行递归调用。这个过程会一直持续到每个子数组的大小为1,此时我们就可以直接将它们按照随机数排序。因此,总共需要进行nlogn次递归调用。...因此,随机数生成器 RANDOM 在最坏情况下的平均运行时间复杂度为 O(\log n),在最好情况下的平均运行时间复杂度为 O(1)。...在最坏情况下,随机数生成器 RANDOM 被调用的次数等于递归调用的次数。当划分中选择的划分元素总是使得数组分割得非常不均衡时,最坏情况发生。

    31770

    高性能MySQL(二):服务器性能剖析

    文章目录 前言 性能优化简介 通过性能剖析进行优化 理解性能剖析 剖析MySQL查询 慢查询日志 pt-query-digest 优秀资料 慢SQL定位分析 前言 我准备开一个新的系列,这是我以前接触不多的新领域...我使用的中间件,也不知道它们的性能如何。 这样不好。 本系列取材于《高性能MySQL》第三版,是我的学习笔记。...首先我们要保持空杯精神(对我来说,我的杯子一直是空的),抛弃掉一些关于性能的常见的误解。 ---- 性能优化简介 性能:性能即相应时间,这是一个非常重要的原则。...slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) long_query_time 查询超过多少秒才记录...注意,该语句不 是随机生成的,而是分组语句中最差的查询SQL语句) ---- 优秀资料 参考资料来源:Mysql性能瓶颈深度定位分析 我们在性能测试过程中,经常会遇到Mysql出现性能瓶颈的情况,对于数据库来说

    77120

    分页场景慢?MySQL的锅!

    从一个问题说起 在刚工作的时候,发现分页场景下,当offset变大,MySQL处理速度非常慢!...这条语句非常慢,基本达到了秒级延迟,在第二次请求有缓存之后,才变快。...在数据量这么少的情况下,走索引还这么慢,这完全不能接受,我就问我导师为什么,他反问“索引场景,MySQL中获得第n大的数,时间复杂度是多少?”...答案的追寻 小白直觉作答 当时只知道MySQL索引使用的是树,瞎猜了个O(logn),心想二叉树找一个节点不就是O(logn)么。自然而然,导师白了一眼,让我自己去研究。...注意,即使这10000个节点会被扔掉,MySQL也会通过二级索引上的主键id,去聚簇索引上查一遍数据,这可是10000次随机IO,自然慢成哈士奇。

    75830

    一张900w的数据表,16s执行的SQL优化到300ms?

    MySQL耗费了大量随机I/O在查询聚簇索引的数据上,而有300000次随机I/O查询到的数据是不会出现在结果集当中的。...肯定会有人问:既然一开始是利用索引的,为什么不先沿着索引叶子节点查询到最后需要的5个节点,然后再去聚簇索引中查询实际数据。这样只需要5次随机I/O,类似于下面图片的过程: 其实我也想问这个问题。...所以我们需要运行两个sql,来比较buffer pool中的数据页的数量。...符合我们的预测。也证实了为什么第一个sql会慢:读取大量的无用数据行(300000),最后却抛弃掉。...Java 的知识面非常广,面试问的涉及也非常广泛,重点包括:Java 基础、Java 并发,JVM、MySQL、数据结构、算法、Spring、微服务、MQ 等等,涉及的知识点何其庞大,所以我们在复习的时候也往往无从下手

    37930

    MySQL慢查询调试

    缓慢的MySQL查询是导致应用程序瓶颈的常见原因。尤其在生产环境中,查询缓慢对网站就会产生非常不好的体验。 所以学会调试Mysql慢查询真的很有必要,那么,Let's go。...启用 首先,启用Mysql慢查询日志 登陆Mysql $ mysql -u root -p 选择要调试的数据库,我以我的数据库huanld为例: > use huanld 启用慢查询日志 > SET...测试日志记录是否正常工作: > SELECT SLEEP(X); 日志文件应显示属于上述查询的日志。 现在,我们已经成功启用了MySQL慢查询日志,并且我们现在可以调查和调试哪个查询导致了问题。...这里还有一些有用的MySQL命令,这些命令对我们调试也是非常有用的。...通过添加关键字SQL NO CACHE来运行没有缓存的查询: > select SQL_NO_CACHE * from mytable where 1 limit 1; 结尾 调试Mysql慢查询的流程就是这么个过程

    83620

    机械硬盘随机IO慢的超乎你的想象

    大家都知道硬盘的随机IO很慢,但是比顺序IO慢多少呢,不知道你是否有过数字上的直接对比。今天我来实际压测对比一下磁盘在顺序IO和随机IO不同场景下的性能数据表现。...我的测试机器的硬盘配置是一个由7块300G万转机械磁盘组成的RAID5,压测工具使用的fio,压测过程中,我们固定几个参数: IO引擎我们选择libaio 为了避免操作系统管理的PageCache内存对测试结果的干扰...但是他们从来闭口不提随机IO情况下,其实特么的只有200。 大家看到了我的万转机械硬盘组成RAID5阵列,在顺序条件最好的情况下,带宽可以达到1GB/s以上,平均延时也非常低,最低只有20多us。...如果你真正理解了以上实验中的数据,就能理解很多工程实践中的许多的事情。 复制文件夹:我们都知道,在复制一个文件夹的时候,如果这个文件夹里面包含了许多堆碎文件,这时候复制起来非常慢。...我采用的优化方式也非常简单,直接把Mysql用户整张用户表一次性通过顺序IO的方式读出来,load到内存中。在内存中用HashTable组织好,通过Hash的方式进行快速查询。

    1.7K40
    领券