Community journal

The latest from the MySQL community

Ideas, releases, practical guides, and perspectives from the people building with MySQL.

Follow the feed
Showing entries 1 to 10 of 1218 « Previous | Next »
Displaying posts with tag: innodb (reset)
MySQL 大事务的 Recovery 优化

本文也有英文版:English version

你有没有碰到过 mysqld 进程启动了很长时间也起不来的情况?这时候我们可以用 perf top 命令查看一下 MySQL 进程主要在干什么事情。如果你查看到的信息如下图所示,启动过程中 MySQL 的 主线程(mysqld_main函数开始的线程) 绝大多数的时间都花在了回滚事务上,那么很可能是遇到了大事务回滚。

这种情况最常见的一个场景是一个大事务在写 Binlog 时把磁盘空间占满了,导致了实例的宕机重启。我曾经遇到的最大的 Binlog 文件超过了 114GB。由于 Binlog Cache 的临时文件在写完 Binlog 后才被清理,所以这个事务总共占用了 228GB 的空间。MySQL 的参数 binlog_error_action

[获取更多]
MySQL Online DDL "Duplicate Key" 优化

MySQL 在执行 Online DDL 重建表的时候,可能会碰到 Duplicate Entry 错误,从而导致 DDL 中途失败。失败信息如下所示:

1
2
mysql> alter table tt add c3 int, algorithm=inplace;  
ERROR 1062 (23000): Duplicate entry '1' for key 'tt.uk_c2'

这是一个非常知名的问题,自从 MySQL-5.6 引入了 Online DDL 之后就一直存在。相关的Bug包括:

  • BUG#76895[1] Adding new column OR Drop column causes duplicate PK error
  • BUG#77572[2] The bogus duplicate key error in online ddl with incorrect key name
  • BUG#98600[3] Optimize table fails with duplicate entry on UNIQUE KEY
  • BUG#104626[4] Remove failure of Online ALTER because concurrent Duplicate entry.

BUG#76895[5]最早报告了这个问题。BUG#76895 上提到的是 Duplicate PRIMARY …

[获取更多]
MySQL DROP TABLE 的性能问题与优化

以下信息是在测试一个 SQL 时,AliSQL 的 Performance Agent 功能采集的 buffer pool 相关的监控信息。你能从这些监控信息看出是什么样的 SQL 在执行吗?

图中:bp = buffer pool, pg = page。

  • bp_pg_total 是 buffer pool 的总 page 数,一般不会变化的,除非修改了 buffer pool 的大小。

  • bp_pg_data 指的是 buffer pool 中数据文件的 page 的数量,包括 undo page。

  • bp_pg_dirty 指的是数据页中的脏页(被修改了,但还没有写入数据文件的页)的数量。

  • bp_pg_free 是 buffer pool 中空闲的 page 数量,这部分是没有被使用的部分。

  • bp_wait_free 当从存储上 读一个 page 到 buffer pool 时,如果没有空闲的 page 也没有净页(没有被修改的) …

[获取更多]
如何获取 MySQL innodb 的 B+tree 的高度

前言

MySQL 的 innodb 引擎之所以使用 B+tree 来存储索引,就是想尽量减少数据查询时磁盘 IO 次数。树的高度直接影响了查询的性能。一般树的高度在 3~4 层较为适宜。数据库分表的目的也是为了控制树的高度。那么如何获取树的高度呢?下面使用一个示例来说明如何获取树的高度。

示例数据准备

建表语句如下:

CREATETABLE`user` (
  `id` int(11) NOTNULLAUTO_INCREMENT,
  `name` varchar(100) CHARACTERSETlatin1 DEFAULTNULL,
  `age` int(11) DEFAULTNULL,
  PRIMARYKEY(`id`),
  KEY`name` (`name`),
  KEY`age` (`age`)
) ENGINE=InnoDB DEFAULTCHARSET=utf8

表中插入100万条数据。数据如下:

mysql> select* fromuserlimit 2\G
*************************** 1. row ***************************
  id: 110000
name: ab
 age: 100
*************************** 2. row ***************************
  id: 110001
name: ab
 age: 100
2 …
[获取更多]
MySQL:Innodb 关于Handler_commit每次DML增加2的原因

简单描述一下,也是本人的问的,水平有限,如果有误请谅解。 原问题如下@mysqDBA: 请教一个问题。我每次insert一条语句,查询show global status like 'Handler_commit'; 发现每次增加值是2,难道不应该是1吗?

最简单的insert into tab.

【mysql】  【innodb】  【SQL】  【DML】  【binlog】  【handler】   …

[获取更多]
MySQL:Innodb DB_ROLL_PTR指针解析

源码版本5.7.22 此处简单记录一下DB_ROLL_PTR指针解析的方法,水平有限,如果有误请谅解。 一、引入 我们知道每一条记录在聚集索引上都有如下的分布: rowid(主键)+DB_TRX_ID+DB_ROLL_PTR+其他字段这样格式其中DB_TRX_ID+DB_ROLL_PTR作为MVCC的关键信息存储下来,其中DB_TRX_ID在存储上占用6字节,DB_ROLL_PTR在存储上占用7字节。

【mysql】  【innodb】  【index】  【page】  【存储】   …

[获取更多]
MySQL逻辑备份的过程及相关重要参数说明

本文主要介绍使用mysqldump命令的逻辑备份

【大数据】  【mysql】  【innodb】  【线程】  【数据库】  【binlog】  【dump】  【myisam】   点击查看原文>

MySQL优化系列(五)--数据库存储引擎(主要分析对比InnoDB和MyISAM以及讲述Mrg_Myisam分表)

MySQL优化系列(五)--数据库存储引擎(主要分析对比InnoDB和MyISAM以及讲述Mrg_Myisam分表)

之前一直是使用默认MySQL的InnoDB存储引擎,没有思考过为什么使用,也没思考过其优缺和其他数据库存储引擎。

【mysql】  【innodb】  【数据库】  【索引】  【数据库存储】  【存储过程】   …

[获取更多]
《叶问》第4期

《叶问》是知数堂新设计的互动栏目,不定期给大家提供技术知识小贴士,形式不限,或提问、或讨论均可,并在当天发布答案,让大家轻轻松松利用碎片时间就可以学到最实用的知识点。

【云栖社区】  【linux】  【mysql】  【innodb】  【hadoop】  【性能】  【线程】   …

[获取更多]
《叶问》第4期

《叶问》是知数堂新设计的互动栏目,不定期给大家提供技术知识小贴士,形式不限,或提问、或讨论均可,并在当天发布答案,让大家轻轻松松利用碎片时间就可以学到最实用的知识点。

【云栖社区】  【linux】  【mysql】  【innodb】  【hadoop】  【性能】  【线程】   …

[获取更多]
« Previous | Next »