MySQL/InnoDB 和长时间运行的查询

2023-12-15

当使用 myisam 引擎运行查询时,因为它不是事务性的,所以长查询(据我所知)不会影响其他查询的数据。

在 InnoDB 中,它警告的事情之一是避免长查询。 InnoDB快照时,是不是把所有东西都快照了?

我问这个问题的原因是:无论出于何种原因,查询都会比正常情况花费更长的时间并最终回滚。与此同时,其他 200 个用户已更新或向数据库中插入行。当长查询回滚时,它是否也会删除其他用户所做的更新/插入?或者涉及其他用户的行是否安全,除非它们与回滚的行交叉?


首先,我认为作为阅读背景知识会很有用多版本并发控制(MVCC)作为这个答案的背景。

InnoDB实现了MVCC,这意味着它可以使用非锁定读取来进行常规读取SELECT。这不需要创建“快照”,事实上 InnoDB 没有任何将快照作为对象的真正概念。相反,数据库中的每条记录都会跟踪其自己的版本号,并维护指向“撤消日志”记录(可能仍存在或可能不存在)的“滚动指针”,该记录将该行修改为其先前版本。如果需要记录的较旧版本,则读取当前版本,并跟踪那些滚动指针并应用撤消记录,直到产生足够旧的记录版本。

通常,系统会不断清理这些撤消日志并重新使用它们占用的空间。

任何时间任何长时间运行交易(注意,不一定是单个查询)存在,必须保留(而不是清除)撤消日志,以便充分重新创建所有记录的足够旧的版本以满足该事务。在非常繁忙的系统中,这些撤消日志会很快累积并消耗千兆字节的空间。此外,如果特定的单个记录被非常频繁地修改,则将该记录恢复到足够旧的版本以满足查询可能需要很多撤消日志应用程序(数千次)。

这就是“长时间运行的查询”成本高昂且不受欢迎的原因。它们会增加用于将撤消日志保留在系统表空间中的磁盘空间消耗,并且由于撤消日志记录应用程序在读取时恢复行版本,因此它们的性能会很差。

某些数据库实现了可消耗的最大撤消日志空间量,一旦达到该限制,它们就会开始丢弃较旧的撤消日志记录并使正在运行的事务无效。这会向用户生成“快照太旧”的错误消息。 InnoDB没有这样的限制,并且允许无限期地累积。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL/InnoDB 和长时间运行的查询 的相关文章

  • Python Peeweeexecute_sql() 示例

    我使用 Peewee 模块作为我的项目的 ORM 我看了整个文档 没有明确的 有关如何处理 db execute sql 结果的示例 我跟踪代码 只能发现db execute sql 返回游标 有谁知道如何处理光标 例如迭代它并获取 返回复
  • 正则表达式中 (*) 和 .* 有什么区别? [复制]

    这个问题在这里已经有答案了 是任意字符零次或多次 我试图找到以元音开头的单词 我用了 aeiou 它给了我所有以元音开头的单词 当我这样做时给出相同的结果 aeiou 现在我正在寻找以元音结尾的单词 我做到了 aeiou 它没有给出任何结果
  • 让网站登录也能在 WordPress 上使用

    我使用 PHP 和 MySQL 开发了一个网站 该网站已经有登录和注册表单 myweb com 我已经在这个网址添加了 wordpressmyweb com blog 我想禁用 WordPress 上的登录和注册页面并强制用户使用我的 基本
  • 数据库表可以没有主键吗?

    谁能告诉我关系数据库 例如MySQL SQL SERVER 中的表是否可以没有主键 例如 我可以有桌子day temperature 我注册的地方temperature and time 我不明白为什么要为这样的表设置主键 从技术上讲 您可
  • 授予对视图的 SELECT 权限,但不授予对基础对象的 SELECT 权限

    我经常读到 视图的目的之一是安全性 允许某些用户访问基础表 而其他用户仅访问派生视图 考虑到这一点 我设计了几个向外部用户提供受限数据集的视图 一切都很好 但在实践中这是行不通的 我授予后SELECT对视图的权限 除非我授予 否则用户无法访
  • C# 中的 SQL 更新语句

    我有桌子 学生 P ID LastName FirstName Address City 1 Hansen Ola 2 Svendson Tove 3 Petterson Kari 4 Nilsen Johan and so on 如何更改
  • 查询计算不同值的数量?

    我在 MS Access 2003 中有一个表 如下所示 url id example com red example com blue example com blue other com red other com orange mor
  • INNER JOIN 与 INNER JOIN (SELECT . FROM)

    同一查询的这两个版本之间的性能有什么区别吗 Version 1 SELECT p Name s OrderQty FROM Product p INNER JOIN SalesOrderDetail s on p ProductID s P
  • 查找某个字段发生更改时的开始日期和结束日期

    我在表中有这些数据 FIELD A FIELD B FIELD D 249052903 10 15 2011 N 249052903 11 15 2011 P VALUE CHANGED 249052903 12 15 2011 P 249
  • 将 CSV 文件导入 MySQL 数据库时出现无效的 UTF-8 字符串

    我正在尝试使用以下代码将 CSV 导入我的 MySQL 数据库 我从帖子中获取了 CSV 文件
  • 从 SQL Server 中的字符串中提取子字符串

    我需要从字符串中提取子字符串的一部分 如下所示 YY 12 Yellow ABC WSA Thisone A SS 4MON DHHE A A 我需要按如下方式提取字符串 Yellow Thisone DHHE 你可以使用这样的东西 dec
  • TSQL 多列唯一约束也允许多个 Null

    我目前正在做一些从 MS Access 到 SQL Server 的迁移 Access 允许唯一索引中存在多个 Null 而 SQL Server 不允许 我一直在通过删除 SQL Server 中的索引并添加筛选索引来处理迁移 CREAT
  • MySQL 中复制一条记录

    我有一个表 我想复制表中的特定行 我知道这不是最好的方法 但我们正在寻找快速解决方案 这比我最初想象的要难 我需要做的就是将整个记录复制到 MySql 中自动增量表中的新记录 而不需要指定每个字段 这是因为该表将来可能会发生变化 并且可能会
  • 选择当前项目 id 周围的 N 个上一个项目和 M 个下一个项目

    我有一张有照片的桌子 id year comm count 0 2015 1 1 2016 2 2 2017 5 3 2018 7 4 2019 1 5 2020 9 6 2021 1 7 2022 1 我选择具有给定 ID 的照片 位于所
  • 如何在应用程序级别管理只读数据库连接

    我们使用的是Java Spring Ibatis MySql 有没有办法利用这些技术在应用程序级别管理只读连接 我希望在只读 MySql 用户的基础上添加额外的保护层 如果 BasicDataSource 或 SqlMapClientTem
  • PHP md5() 给出与 MySQL md5 不同的输出

    我正在尝试设置登录系统 但无法解决一个问题 PHP 通过 md5 给了我另一个输出 比MySQL 例如 在 PHP 中 password md5 brickmasterj return password 返回 3aa7b18f304e2e2
  • 更新 SQL MS Access 2010

    这已经让我绞尽脑汁了 4 个小时了 我有一个名为 BreakSked 的表 我使用此按钮来使用此 sql 更新表的休息结束时间 strSQL1 UPDATE BreakSked SET BreakSked EndTime Me Text41
  • 发送 QUERY 数据包时出错。 PID=9565

    我有两个不同的环境开发和生活几乎都是相同的 但上述 标题中 警告仅在开发模式下发生 在此警告之前 我还收到错误消息 允许的内存大小 268435456 字节已耗尽 这仅发生在开发模式下 使用 PHP 版本 5 6 和 mysql 不是 my
  • Perl:通过一次 MySQL 调用更新多行

    似乎这不可能 但嘿我不妨问一下 我可能是错的 想知道 perl 是否可以使用一个 MySQL 调用来更新多行 我正在使用 DBI 任何帮助或反馈将不胜感激 这可以通过 ASP 和 ASP net 在 MSSQL 中实现 所以想知道是否也可以
  • 将文件保存为 MYSQL 数据库中的 blob 或文件路径

    我知道这些问题是常见问题之一 但我需要您针对具体案例提供帮助 我正在开发一个应用程序 其中一些用户可以添加订单 一些用户可以执行这些订单 这些订单非常具体 因此只有有限数量的用户可以添加它们 然后 为每个订单生成三个文档 每个文档的大小不超

随机推荐

  • Coq 将不存在的语句转换为 forall 语句

    我是 Coq 的新手 这是我的问题 我有一个声明说 H forall x term exists y term P x y P y x 我猜它相当于 forall x y term P x y P y x gt false 但我可以使用哪种
  • 浮点数转换恐怖,有出路吗?

    背景 最近 我的同事向我们的测试项目添加了一些新测试 其中之一还没有传递或持续集成系统 由于我们有大约 800 个测试 并且需要一个小时才能运行所有测试 因此我们经常会犯错误 并且只在我们的开发机器上运行我们当前已实现的测试 这种方法有其弱
  • 如何从不返回简单 HTML 的网站抓取数据

    我一直在使用 requests 和 BeautifulSoup for python 从基本网站中抓取 html 但大多数现代网站不仅仅提供 html 结果 我相信他们运行 javascript 或其他东西 我不是很熟悉 这里有点菜鸟 我想
  • spring boot hibernate查询无效用户错误

    嗨 我是 Spring Boot 的新手 我尝试连接到 Oracle 并列出相关记录 我的代码在存根环境中运行 即没有连接到数据库 当我尝试从 Spring 连接到数据库时 出现编辑 2 中给出的错误 家庭控制器 package blog
  • 转换数据类型为 Option Strict

    我只是想知道如何正确 将字符串转换为日期 将整数转换为短整型 将字符串转换为整数 将字符串转换为双精度 正确地不使用任何类型 我打开了 Option Strict 现在所有这些错误都弹出了 所以我正在尝试修复它们 NET 提供了多种检查 测
  • 在另一个函数中使用一个函数的返回结果[重复]

    这个问题在这里已经有答案了 我知道这有几个问题 我读过但我无法理解 我试图在另一个函数中使用一个函数的返回结果 def multiplication a c a a return c def subtraction c d c 2 retu
  • 如何包含 pandas date_range() 的两端

    我想从一对日期创建一个按月频率的日期列表 包括两个日期所指示的月份 import pandas as pd import datetime Option 1 pd date range datetime 2022 1 13 datetime
  • 如何设置面板的透明不透明度

    我如何将面板设置为透明 如不透明度为0 我通过程序设置面板 它位于视频播放器的顶部 代码是这样的 Private Sub Button1 Click sender As Object e As EventArgs Handles Butto
  • 为什么我们要在 PyTorch 中“打包”序列?

    我试图复制如何对 rnn 的可变长度序列输入使用打包但我想我首先需要理解为什么我们需要 打包 序列 我明白为什么我们 填充 它们 但为什么 打包 通过pack padded sequence 必要的 我也偶然发现了这个问题 下面是我的发现
  • Bert 针对语义相似性进行了微调

    我想应用微调 Bert 来计算句子之间的语义相似度 我搜索了很多网站 但几乎没有找到有关此的下游信息 我刚刚发现STS基准测试 我想知道是否可以使用STS基准数据集来训练微调bert模型 并将其应用到我的任务中 合理吗 据我所知 计算相似度
  • ffmpeg/PHP - 将任何视频格式转换为 ogg 时出现问题 - 视频断断续续/无音频 - win64

    如果这是一个重新发布 类似的帖子 首先让我道歉 因为我尽了最大努力在此处和谷歌上已创建的帖子中搜索我的问题的具体解决方案 但无法 我在 win64 系统的本地主机上使用 ffmpeg 创建 测试视频转换脚本 然后将它们上传到服务器 我能够成
  • NoSuchElementException:消息:尝试通过 Selenium 和 Python 单击按钮 VISA 时无法定位元素

    我无法点击此按钮在我的机器人上创建结账 我想点击图片进入另一页
  • 如何用opencv获得所有不失真的图像

    我在用着cv undistort但它会裁剪图像 我想要所有未失真的图像 以便未失真的尺寸比原始图像更大 如下所示 我想我需要使用cv getOptimalNewCameraMatrix但我的试验没有运气 有什么帮助吗 仅供记录 你应该使用c
  • Spark 在标准输出上丢失 println()

    我有以下代码 val blueCount sc accumulator Long 0 val output input map data gt for value lt data getValues if record getEnum Da
  • 是否可以使用新的 csproj 项目文件覆盖或清除 dll 构建中的调试路径?

    使用时dumpbin查看我的图书馆的详细信息 dumpbin headers Test dll 我看到 FullFolder to Test pdb 是 pdb 的完整文件夹 调试目录 Time Type Size RVA Pointer
  • 从 $lookup 以及整个文档中获取数组中过滤后的元素数量

    我在 MongoDB 中有这样的查询 db emailGroup aggregate lookup from link localField id foreignField emailGroupId as link unwind link
  • 无法访问远程git仓库

    我通过 github 网站的 新按钮 创建了一个 git 存储库 然后我使用 git bash 设置本地存储库并尝试拉取远程存储库 它有默认的自述文件 但收到 访问被拒绝错误 与此问题中看到的错误相同 无法推送到 git 存储库 权限被拒绝
  • 使用 Gson for Java 进行 JSON 解析

    我想解析 JSON 类型的数据String 我在用谷歌Gson I have jsonLine data translations translatedText Hello world 我的班级是 public class JsonPars
  • python 中的计算器

    我正在尝试制作可以使用基本 4 个运算符 例如 1 2 3 4 5 求解表达式的计算器 但是它不起作用 我不知道出了什么问题 请检查我的代码 当我运行它时 我在 8 行中收到无限数量的错误return ret parts 0 ret par
  • MySQL/InnoDB 和长时间运行的查询

    当使用 myisam 引擎运行查询时 因为它不是事务性的 所以长查询 据我所知 不会影响其他查询的数据 在 InnoDB 中 它警告的事情之一是避免长查询 InnoDB快照时 是不是把所有东西都快照了 我问这个问题的原因是 无论出于何种原因