广告
返回顶部
首页 > 资讯 > 数据库 >如何理解MySQL中的截断
  • 597
分享到

如何理解MySQL中的截断

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

这期内容当中小编将会给大家带来有关如何理解Mysql中的截断,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 mysql中的undo截断还是一

这期内容当中小编将会给大家带来有关如何理解Mysql中的截断,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

mysql中的undo截断还是一个很不错的特性。这让我想起了很久以前看到一个诺大的ibdata,但是却拿它无能为力,想把它收缩唯一的办法就是重建或者重构数据。

   oracle用得久了,总会有一些想法,看起来很平常的技术怎么在Mysql中却无能为力。当然这个念头也有些日子了。

   MySQL 5.6中把undo做了剥离,可以指定单独的undo表空间,但是要收缩阶段还是无能为力,这个也算是一个过渡的特性吧,到了MySQL 5.7中,这个功能就可以说是上了正道了,我们可以截断,化被动为主动,这种方式就很好。

    而如果要展望这个特性,我觉得还可以持续改进,就是可以在线修改,切换undo等。

    要实现这个阶段功能,其实还需要花点功夫,那就是在初始化的时候就完成这些基础配置,否则会收到下面这样有些模糊的提示信息。

2017-02-28 22:39:48 7fedca8127e0 InnoDB: Expected to open 1 undo tablespaces but was able
2017-02-28 22:39:48 7fedca8127e0 InnoDB: to find only 0 undo tablespaces.
2017-02-28 22:39:48 7fedca8127e0 InnoDB: Set the innodb_undo_tablespaces parameter to the
2017-02-28 22:39:48 7fedca8127e0 InnoDB: correct value and retry. Suggested value is 0所以我们打算初始化一个全新的库来做一个简单的测试

my.cnf的内容如下,你可以自己根据需要指定也可以。

my.cnf
[client]
Socket = /home/mysql/mysql.sock

[mysql]
socket = /home/mysql/mysql.sock
default-character-set = utf8

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /home/mysql
port = 3306
socket = /home/mysql/mysql.sock
pid-file = /home/mysql/mysql.pid
max_allowed_packet = 32M
ft_min_Word_len = 4
event_scheduler = 1
explicit_defaults_for_timestamp=true
tmpdir = /dev/shm
character-set-server = utf8

#innodb_undo_directory=/data/undolog
innodb_undo_tablespaces=4
innodb_undo_logs=128
innodb_max_undo_log_size=200M
innodb_purge_rseg_truncate_frequency
innodb_undo_log_truncate=1
重点就是最后的几个参数了。

先初始化一下数据字典,

mysqld  --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql然后配置使得MySQL服务启动

service mysql start打开文件目录,就会赫然看到下面的几个undo文件,因为参数

innodb_undo_tablespaces为4,所以会有4个文件。innodb_undo_logs默认是128个,至少是35个,官网也有详细的解释。而innodb_undo_directory的目录则默认按照数据目录来取得,所以我索性去掉了。4个Undo文件都是10M,也就是初始大小。

drwxr-x--- 2 mysql mysql     8192 Feb 28 23:09 perfORMance_schema
drwxr-x--- 2 mysql mysql     8192 Feb 28 23:09 sys
-rw-r----- 1 mysql mysql 10485760 Feb 28 23:09 undo001
-rw-r----- 1 mysql mysql 10485760 Feb 28 23:09 undo002
-rw-r----- 1 mysql mysql 10485760 Feb 28 23:09 undo003
-rw-r----- 1 mysql mysql 10485760 Feb 28 23:09 undo004我们初始化数据,然后插入一些数据。

mysql> create table test_undo(id int,name varchar(30));
mysql> insert into test_undo values(1,'a');
mysql> insert into test_undo values(2,'b');
insert可以反复执行,数据就是指数级的增长,事务也会逐渐变大,大概在200万数据量的时候,undo的分布如下:

-rw-r----- 1 mysql mysql 13631488 Feb 28 23:16 undo001
-rw-r----- 1 mysql mysql 22020096 Feb 28 23:16 undo002
-rw-r----- 1 mysql mysql 10485760 Feb 28 23:16 undo003
-rw-r----- 1 mysql mysql 10485760 Feb 28 23:16 undo004数据在1600万左右的时候,undo文件的大小如下:

-rw-r----- 1 mysql mysql  13631488 Feb 28 23:20 undo001
-rw-r----- 1 mysql mysql  22020096 Feb 28 23:20 undo002
-rw-r----- 1 mysql mysql 150994944 Feb 28 23:20 undo003
-rw-r----- 1 mysql mysql  75497472 Feb 28 23:20 undo004这个时候我们开始测试一下截断的部分,和一个参数密切相关,那就是innodb_purge_rseg_truncate_frequency,我们可以为了测试,适当设置小一些,能够马上看到效果,比如我设置为20

mysql> set global innodb_purge_rseg_truncate_frequency=20;然后我继续开启一个很大的事务,插入千万数据,undo的文件就会暴增,当然因为最大的事务占用了一个undo文件,那个文件还是会持续增大,尽管超过了设定的阈值。

-rw-r----- 1 mysql mysql  13631488 Feb 28 23:33 undo001
-rw-r----- 1 mysql mysql  22020096 Feb 28 23:33 undo002
-rw-r----- 1 mysql mysql 150994944 Feb 28 23:33 undo003
-rw-r----- 1 mysql mysql 293601280 Feb 28 23:33 undo004然后我们使点小技巧,delete几条数据,触发截断的临界点。

mysql> delete from test_undo limit 10;再次查看,undo的文件就会收缩,当然你可以清晰的看到,不是所有的,因为和事务大小也有关系。

-rw-r----- 1 mysql mysql  13631488 Feb 28 23:34 undo001
-rw-r----- 1 mysql mysql  22020096 Feb 28 23:34 undo002
-rw-r----- 1 mysql mysql 150994944 Feb 28 23:34 undo003
-rw-r----- 1 mysql mysql  10485760 Feb 28 23:34 undo004

上述就是小编为大家分享的如何理解MySQL中的截断了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解MySQL中的截断

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

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

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

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

下载Word文档
猜你喜欢
  • 如何理解MySQL中的截断
    这期内容当中小编将会给大家带来有关如何理解MySQL中的截断,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 MySQL中的undo截断还是一...
    99+
    2022-10-19
  • 如何在 MySQL 中正确截断表?
    这意味着您需要首先将foreign_key_check设置为禁用,然后需要截断表。语法如下 -set FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE yourTableName1; TRUNCATE TABLE...
    99+
    2023-10-22
  • 如何解决MySQL报错:数据被截断
    MySQL报错"数据被截断"通常是由于插入或更新操作时数据长度超过了表字段的最大长度限制引起的。解决此问题的方法如下:1. 检查表字...
    99+
    2023-10-12
    MySQL
  • MYSQL清空表和截断表问题如何解决
    这篇文章主要介绍“MYSQL清空表和截断表问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MYSQL清空表和截断表问题如何解决”文章能帮助大家解决问题。MYSQL清空表和截断表清空表和截断...
    99+
    2023-07-05
  • MySQL长字符截断如何实现
    本篇内容主要讲解“MySQL长字符截断如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL长字符截断如何实现”吧!MySQL超长字符截断又名"SQL-Column-Trun...
    99+
    2023-07-05
  • Data truncated for column 'column_name' - 如何解决MySQL报错:数据被截断
    首先,让我们明确一下什么是数据被截断错误。当我们在MySQL中定义表时,会为每个字段指定一个最大长度。这个最大长度限制了我们可以存储在该字段中的数据的大小。如果我们尝试插入的数据长度大于字段的最大长度,MySQL会报错并将数据截断到最大长度...
    99+
    2023-10-21
    MySQL 数据截断
  • 如何解决MySQL报错:无法截断被外键约束引用的表
    当你试图删除一个被外键约束引用的表时,MySQL会抛出"Cannot truncate a table referenced in ...
    99+
    2023-10-10
    MySQL
  • 怎么理解Mysql GITD复制中断处理
    怎么理解Mysql GITD复制中断处理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 从库发现复制错误:&nb...
    99+
    2022-10-19
  • 如何理解线程中断的问题
    本篇内容主要讲解“如何理解线程中断的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解线程中断的问题”吧!实现线程本质上只有一种方式为什么不强制停止对于...
    99+
    2022-10-19
  • MySQL 中的字段截取与字符串截取方法详解
    系列文章目录 文章目录 系列文章目录前言一、字段截取:二、字符串截取:总结 前言 在 MySQL 数据库中,有时我们需要截取字段或字符串的一部分进行查询、展示或处理。本文将介绍 MySQL 中常用的字段截取和字符串截取方法,...
    99+
    2023-08-17
    mysql 数据库
  • mysql中如何获取时间截
    本篇文章为大家展示了mysql中如何获取时间截,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。-- 将时期生成时间截Select UNIX_TIMESTAM...
    99+
    2022-10-18
  • mysql中如何截取函数substring_index
    小编给大家分享一下mysql中如何截取函数substring_index,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的五大特点是什么python的五...
    99+
    2023-06-14
  • 如何解决MSSQL中将截断字符串或二进制数据问题
    这篇文章将为大家详细讲解有关如何解决MSSQL中将截断字符串或二进制数据问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。地图数据存放在sqlserver 2008中,使...
    99+
    2022-10-19
  • 如何理解MySQL中的事务
    今天就跟大家聊聊有关如何理解MySQL中的事务,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。事务又叫做TCL,全称是transaction cont...
    99+
    2022-10-19
  • 如何理解linux内核的软中断的情况
    这篇文章主要讲解了“如何理解linux内核的软中断的情况”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解linux内核的软中断的情况”吧!软中断介绍把可以延迟的处理从硬中断处理程序独立...
    99+
    2023-06-13
  • mysql中截取字符串的6个函数讲解
    目录mysql截取字符串的6个函数1、LEFT(str,len)2、RIGHT(str,len)3、SUBSTRING(str, pos, len)4、SUBSTR(str, pos, l...
    99+
    2022-08-29
  • 详解如何消除axios拦截中的if
    目录基本拦截设计轮子思考方向轮子骨架详细实现实践总结基本拦截 axios的响应错误拦截中,难免会对error.status做各种各样的if判断,又或者switch。为了防止枯燥乏味的...
    99+
    2022-11-13
  • 如何理解MySQL中的varchar(N)
    本篇文章给大家分享的是有关如何理解MySQL中的 varchar(N),小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2022-10-19
  • 如何理解MYSQL中的type:index 和 Extra:Using
    今天就跟大家聊聊有关如何理解MYSQL中的type:index 和 Extra:Using,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。考虑下面执行...
    99+
    2022-10-19
  • 如何解决MySQL报错:与MySQL服务器的连接断开
    要解决MySQL报错“与MySQL服务器的连接断开”,可以尝试以下几个步骤:1. 检查MySQL服务器是否正在运行。可以通过在终端中...
    99+
    2023-10-10
    MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作