MariaDB 10.1 中的 InnoDB holepunch 压缩与文件系统的对比

InnoDB holepunch 实验

在阅读了 Mark Callaghan 的精彩博客(见下方链接)后,我决定花一些时间来实验在 MariaDB 10.1 中使用 holepunch 功能时,不同文件系统的行为如何。首先,即使表经过页面压缩(MariaDB 中使用的术语),MariaDB 10.1 默认也不使用 holepunch。MariaDB 中的 holepunch 功能通过配置变量 innodb-use-trim=1 启用,并且自然需要 fallocate 系统调用支持 FALLOC_FL_PUNCH_HOLEFALLOC_FL_KEEP_SIZE 参数。在 cmake 构建阶段会检查对这些参数的支持。

我使用了 CentOS Linux release 7.1.1503 (Core),Linux 内核版本为 3.10.0-229.el7.x86_64,并在 RAID-0 配置中使用了一些 SSD 硬盘 (Intel X25-E Extreme SSDSA2SH032 G1GN 2.5 英寸 32GB SATA II SLC 内置固态硬盘 (SSD))。…

MariaDB: InnoDB 外键约束错误

简介

外键是一个表中的一个字段(或一组字段),用于唯一标识另一个表中的一行。包含外键的表称为子表,包含候选键的表称为被引用表或父表。外键的目的是标识被引用表中的特定行。因此,要求外键等于主表中某行的候选键,否则不能有值(NULL值)。这称为两个表之间的参照完整性约束。…

Fortran 与 MariaDB

简介

Fortran (FORmula TRANslating System) 是一种通用、命令式编程语言,尤其适用于数值计算和科学计算。FORTRAN 的历史可以追溯到 1953 年底,当时 John W. Backus 向 IBM 的上级提交了一份提案。第一款 FORTRAN 编译器于 1957 年 4 月问世。

一些重要的历史阶段包括

  • 1958 年的 FORTRAN II
  • 1958 年的 FORTRAN III,
  • 1962 年的 FORTRAN IV。
  • FORTRAN 66 或 X3.9-1966 成为第一个行业标准
  • FORTRAN 77 或 X3.9-1978。这是我在 1996 年学习的 Fortran 版本。

MariaDB 10.1.3 中的表和表空间加密

请注意,本文已过时。请参阅MariaDB 10.1 中的表和表空间加密

简介

目前,完全支持加密的引擎只有 XtraDB 和 InnoDB。Aria 存储引擎也支持加密,但仅限于临时表。

MariaDB 支持两种不同的方式来加密 InnoDB/XtraDB 中的数据

  1. 指定表加密:只有使用 PAGE_ENCRYPTION=1 创建的表才会加密。此功能由 eperi 创建。
  2. 表空间加密:一切都被加密(包括日志文件)。此功能由 Google 创建,并基于他们的 MySQL 分支

因果一致性

简介

因果一致性 [1] 是分布式数据库中可用作一致性标准之一的准则。

分布式数据库提供因果一致性,如果因果相关的读写操作在分布式系统的每个节点上以相同的顺序可见。并发写入在不同节点上可能以不同的顺序可见。  因果一致性弱于顺序一致性 [2],但强于最终一致性 [3]。有关最终一致性的更详细描述,请参阅之前的博客 https://blog.mariadb.org/eventually-consistent-databases-state-of-the-art/

当一个事务执行读操作,随后再执行写操作(即使是对不同的对象),则称第一次读操作在因果上发生在写操作之前。…

MariaDB 10.1.1: 对 InnoDB 表空间中的未使用空间进行碎片整理

简介

例如,当你删除行时,这些行只是被标记为已删除,并未真正从索引中物理删除,并且释放的空间也没有返还给操作系统以便后续重用。清除线程会物理删除索引键和行,但释放的空间仍然不会返还给操作系统,此操作可能导致页面上出现空洞。如果你有变长行,这可能导致释放的空间无法用于新行(如果这些新行比旧行更大)。用户可以使用 OPTIMIZE TABLE 或 ALTER TABLE <table> …

MariaDB 10.1.1: 监控 InnoDB Online DDL 的进度和临时内存使用情况

简介

Online DDL 是 MariaDB 10.0 中的新功能。Online DDL 按照以下 4 个任务顺序处理。

  1. InnoDB::ha_prepare_inplace_alter_table(..)
  2. InnoDB::ha_inplace_alter_table(..)
  3. InnoDB::ha_commit_inplace_alter_table(..)
  4. mysql_rename_table(..)

在第 1 阶段,InnoDB 存储引擎会为事务日志分配临时内存缓冲区,用于记录此阶段的行更改。此缓冲区的大小初始为 sort_buffer_size,可增长到 innodb_online_alter_log_max 大小。在第 2 阶段,处理 ALTER 语句的线程会将旧表的行复制到新修改的表中。之后,MariaDB 会对目标表加排他锁,并将行日志缓冲区应用到新修改的表中。…

MariaDB 10.1 和 MySQL 5.7.4-labs-tplc 性能测试更新

简介

本博客是对我之前发表在 https://blog.mariadb.org/performance-evaluation-of-mariadb-10-1-and-mysql-5-7-4-labs-tplc/ 的博客的后续。首先,我想感谢我收到的所有评论。基于评论,有人担心观察到的性能差异是否是由于不同的配置设置造成的。此外,我之前并不知道 MySQL 中存在一个配置变量,可以实现类似 MariaDB 的多线程刷写机制。为了确定不同的配置变量或不同的默认设置是否是性能差异的原因,我进行了几轮新的测试。…