背景知识:
InnoDB存储引擎和大多数数据库一样,记录是以行的形式存储的,这意味着页中保存着表中一行行的数据。另外MYSQL对每个页存放的记录数又有硬性的规定,最少2行,最多16KB/2 - 200,即7992行。
在InnoDB 1.0.X之前,InnoDB存储引擎提供了Compact和Redundant两种格式来存放行记录数据。Redundant是mysql5.0版本之前的行记录存储方式,之后仍然支持这个格式是为了兼容之前版本的格式,5.1之后很少用到了,因为Compact的结构设计比它好得多,compact格式消耗的磁盘空间和备份耗时更小,Redundant相比之下大了一些。compact格式更适用于大多数的业务场景。

在InnoDB 1.0.X版本开始又引入了新的文件格式(file format),
以前支持Compact和Redundant格式称为Antelope文件格式,
新引入的文件格式称为Barracuda文件格式。
Barracuda文件格式下拥有两种新的行记录格式:Compressed和Dynamic,
同时,Barracuda文件格式也包括了Antelope所有的文件格式。
这样Barracuda文件格式支持4种row_format:

Redundant、Compact、Compressed、Dynamic

而Antelope文件格式只支持2种row_format:

Redundant、Compact

参数innodb_file_format用来指定文件格式,可以通过下面的方式来查看当前所使用的InnoDB存储引擎的文件格式:

show variables like 'innodb_file_format';

现在基本上都是Barracuda

Dynamic和Compact基本是类似的,但是它们在行溢出数据的处理上却完全不同:

compact格式下,溢出列存储前768字节,而dynamic格式下,溢出的列只存储前20字节,一旦发生了行溢出,
dynamic其实就存储一个指针,数据都放在溢出页里,dynamic代表将长字段(发生行溢出)完全off-page存储。

Row_format 引发异常的一个案例:
前几天生产MYSQL遇到的一个问题,在录入数据时,整行数据完全录不进去,报以下错:

Cause:java.sql.SQLException: com.taobao.tddl.common.exception.TddlException:java.sql.SQLException:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Row size too large (> 8126). Changing
some columns to TEXT or BLOB or usingROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED
may help. In current row format,BLOB prefix of 768 bytes is stored inline.; nested exception
iscom.ibatis.common.jdbc.exception.NestedSQLException:  

该表是一个产品介绍详情表,有20多个TEXT 字段,刚好碰到了一个产品,每个字段录入的数据都很长,
而mysql 中有了个限制,一个页(这里pagesize 是16K)必须至少存2行,也就是说每行的存储长度必须小于等于8192,而这么多 TEXT 字段,一行肯定是存不下来,也就是会发生溢出,而即例发生溢出,每个列仍然会存储前768字节(该表的row_formart 是compact),字段一多还是超过了8192,于是就报错,插不进了。
最后将表的row_format 改为 dynamic 得以解决。alter table … row_format=dynamic;

所以,如果大家遇到一些表TEXT 或 VARCHAR 大字段很多,又不好拆解时,可能需要考虑下溢出后列的长度了,如果溢出后列的长度还是太大,则要看一下表的 row_format :

show table status like '%xxx%'\G  

必要时需要将其实设置为 dynamic 如:

create table test(id int,name text,...... ) row_format=dynamic;
或
alter table test row_format=dynamic;

转载于:https://blog.51cto.com/13476134/2122557

MySQL row_format引发的案例一则相关推荐

  1. Mysql之索引优化案例

    Mysql之索引优化案例 1.单表简单案例 1.1创建表 1.2 问题: 1.3 解决:新建索引 1.4 再次执行 2.双表简单案例 2.1创建表并插入数据 2.2 由于是LEFT JOIN,所以左表 ...

  2. Vue+MySQL实现登录注册案例

    Vue+MySQL实现登录注册案例 1.新建vue项目并连接数据库 具体步骤见vue连接mysql数据库 2.新建登录页面.注册页面和首页 在src/views文件夹下,新建 login.vue(登录 ...

  3. MySQL建员工表案例

    MySQL建员工表案例 create table DEPT( DEPTNO int(2) not null, DNAME VARCHAR(14), LOC VARCHAR(13) ); alter t ...

  4. Vue+SpringBoot+Mybatis+Mysql前后端分离案例

    Vue+SpringBoot+Mybatis+Mysql前后端分离案例(二) 前端开发 main.js代码如下 import Vue from 'vue' import App from './App ...

  5. mysql slave lock 跳过_slave开启MTS时执行mysqldump引发死锁案例

    出现这种问题除非手动干预,杀掉FTWRL的session,复制线程方可以继续进行.版本社区版5.7.26. 二.堵塞图 如果分析上面的堵塞可以画图如下: 三.关于woker线程w1和w3的等待 这里我 ...

  6. 慎重选型:PG还是MySQL?Uber的案例不能作为参考!

    本文原作者:Markus Winand,原文链接:www.yumpu.com/en/document/view/53683323/migrating-uber-from-mysql-to-postgr ...

  7. Mysql 死锁过程及案例详解之插入意向锁与自增锁备份锁日志锁Insert Intention Lock Auto-increment Lock Backup Lock Log Lock

    Mysql 插入意向锁与自增锁备份锁日志锁 插入意向锁Insert Intention Lock 插入意向锁Insert intention locks是记录级别的,它通过"INSERT&q ...

  8. Mysql 死锁过程及案例详解之记录锁与间隔锁Record Lock Gap Lock

    记录锁Record Lock与间隔锁GAP Lock 记录锁Record Lock 记录锁Record Locks又称为行锁,它同时包含索引和间隔锁.记录锁可以是共享锁也可能是排他锁.可以通过perf ...

  9. Mysql 死锁过程及案例详解之显式与隐式锁Explicit Table Lock Implicit Table Lock

    显式锁Explicit Table Lock与隐式锁Explicit Table Lock 显式锁Explicit Table Lock 显式表锁(Explicit Table Locks)即通过命令 ...

最新文章

  1. oracle最大实例数,【Oracle】RAC的多实例数据迁移至单机的多实例。
  2. 做了一个系列的Android开发教程列表
  3. 学习动态性能表(10)--v$session_longops
  4. nrf52832的p09,p10 配置为 普通的gpio口
  5. python 禁用网卡_如何编程实现启用禁用网卡
  6. Apache Cordova介绍
  7. mysql 排序取前4,mysql分组取每组前几条记录(排序)
  8. 测试监控系列:使用vb批量统计nmon结果
  9. 楼市信贷新政力度超市场预期 房企放风要涨价
  10. 想成为高薪的Java架构师该如何做?
  11. Tiny服务的开发配套的工具来了
  12. 《软件测试的艺术》读后感及笔记集合
  13. 计算机二级c选择题题库,全国计算机二级C选择题题库套
  14. N卡驱动版本与NVCUDA驱动版本和CUDA toolkit的关系
  15. 智慧城市数字政府建设【转】
  16. 云盘行业的“冰与火”
  17. Sniffer软件简介
  18. java---集合类---ArrayList类
  19. vscode 代码片段如何输出$符号
  20. 计算机系统基础实验——数据的机器级表示

热门文章

  1. Vue2.x-02根据条件动态设置下拉框、时间选择器、文本框是否可编辑
  2. CuteBot智能小车
  3. 机器学习:论相关(一)
  4. 语音识别1: 音频信号采集、并存入 wav文件
  5. 2021-05-21 深入理解SLAM技术 【4】射影几何--2面中心射影
  6. 计算机专业英语教程2.1.1,计算机专业英语教程目录
  7. linux进程服务,Linux服务及进程
  8. update 和 left join 合并_Python数据预处理——连接、合并、重塑样本
  9. Matlab的不同进制转换
  10. 2021-01-27 CentOS系统将UTC时间修改为CST时间方法