相关疑难解决方法(0)

innodb_file_format 梭子鱼

我有几个问题要问那些更熟悉的人。尽管支持 Barracuda,但我的大多数实例都在运行 Antelope。

我正在寻找一些压缩 innodb 表的方法。我的理解是这仅在 Barracuda 格式下可用。

  1. 我看到 innodb_file_format 是动态的,所以我可以在没有反弹的情况下切换。我应该知道这样做是否有任何影响。我只能说这意味着将使用该格式创建新表或随后更改的表。这一切都正确吗?
  2. 我希望不必经过并转换我所有的表。在同一个表空间中共存羚羊表和梭鱼表是否符合犹太教规?即使它有效,是否有任何问题需要注意?

从我读过的和从我的测试中收集到的答案是:是的。是的。我不知道。

更新

自从这篇文章以来,我一直在各种情况下运行一些动态表和一些压缩表,没有出现问题。此外,我 当时忽略了阅读http://dev.mysql.com/doc/refman/5.5/en/innodb-file-format-identifying.html

启用给定的 innodb_file_format 后,此更改仅适用于新创建的表而不是现有的表。如果您确实创建了一个新表,则包含该表的表空间将使用该表功能所需的“最早”或“最简单”文件格式进行标记。例如,如果您启用文件格式 Barracuda,并创建一个未压缩且不使用 ROW_FORMAT=DYNAMIC 的新表,则包含该表的新表空间将被标记为使用文件格式 Antelope。

因此,即使您允许 Barracuda,表也将创建为 Antelope。混合是不可避免的,除非您将每个表指定为 row_format 动态或压缩表。

没有迹象表明您应该在引入第一个 Barracuda 表时进行完整的转储和重新加载(例如在升级 mysql 的主要版本时推荐)

mysql innodb mysql-5.5

31
推荐指数
3
解决办法
6万
查看次数

InnoDB 创建表错误:“行大小太大”

为了生成报告,我们有一些工程师将规范化的数据库结构展平到临时表中。列被指定为TEXT NOT NULL(我知道“他们为什么这样做?”;让我们假设我们正在解决这个问题)。

我们在 Linux 上使用 MySQL 5.1.48 Community RHEL5 和 InnoDB 插件 1.0.9。

使用 MyISAM 时,我们从未遇到过最大列数或最大行长度的表大小限制(在调查期间,我们已达到最大列数限制为 2598(第 2599 个导致错误 1117)。使用 InnoDB 我们达到了限制。这些限制在创建表(无数据插入)为:

第 1 行的错误 1118 (42000):行大小太大。所用表类型的最大行大小(不包括 BLOB)为 8126。您必须将某些列更改为 TEXT 或 BLOB

我正在寻找以下问题的答案:

  1. 使用大量 v/v/b/t 列时确定行大小的详细公式是什么?我已经尝试了一些不同的公式,使用varchar(N)列(其中 N 介于 1 和 512 之间)、UTF8 字符集 (*3) 以及表将采用的列数,直到失败。我尝试过的所有组合都没有给出与实际测试结果相匹配的值。

  2. 在计算行大小时,我还必须考虑哪些其他“开销”?

  3. 当我从使用 varchar(109) 列创建表到 varchar(110) 列时,为什么错误消息从 8126 更改为 65535?

mysql innodb

12
推荐指数
1
解决办法
4万
查看次数

MySQL:行大小太大 (> 8126)

我有一个表,里面有 300 列。每列最多为255个字节(也就是这个企业的理由)。

当我尝试使用创建它时VARCHAR(255),我超过了最大字节数的限制。所以我创建的是使用 300 个TEXT字段。然后当我尝试插入数据时,出现错误:

行大小太大 (> 8126)。
将某些列更改为 TEXT 或 BLOB 或使用 ROW_FORMAT=DYNAMIC 或 ROW_FORMAT=COMPRESSED 可能会有所帮助。
在当前行格式中,内联存储 768 字节的 BLOB 前缀。

阅读完此内容后,我尝试通过指定ROW_FORMAT=COMPRESSED. 现在的问题似乎是,当我尝试使用该格式创建表时,出现相同的错误。

CREATE TABLE T_ObjLarge__c (Id VARCHAR(18), Name VARCHAR(80),
ObjLarge_Field_1__c TEXT,
ObjLarge_Field_2__c TEXT,
...
ObjLarge_Field_300__c TEXT
) ROW_FORMAT=COMPRESSED ;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

行大小太大 (> 8126)。
将某些列更改为 TEXT 或 BLOB 可能会有所帮助。
在当前行格式中,内联存储 0 字节的 BLOB 前缀。

我在 Linux mint 上使用 MySQL 5.5.31。没有索引。我试过DYNAMIC格式;它的行为方式相同。

的输出SHOW GLOBAL VARIABLES LIKE 'innodb_file_per_table';

+--------------------------+-----------+ …
Run Code Online (Sandbox Code Playgroud)

mysql innodb linux mysql-5.5

7
推荐指数
1
解决办法
3万
查看次数

标签 统计

innodb ×3

mysql ×3

mysql-5.5 ×2

linux ×1