MySQL
文章平均质量分 86
MySQL 使用技巧、调优、笔记
mooddance
面向保安编程
展开
-
MySQL- 优化文章系列
【1】前言通常情况下,我们要求数据库读写延迟越低越好。但往往受到数据量、硬件、数据库配置等等因素,数据库总会到达其瓶颈。但是可以通过一些优化从而延缓其达到天花板,所以本文中系列文章则介绍从以下各个方面对使用 MySQL 进行优化表诉。【2】SQL优化【3】索引优化【4】数据库结构优化【5】引擎优化【6】缓冲和缓存优化 InnoDB - 缓冲池优化 - 预读【7】锁优化【8】MySQL级优化...原创 2021-06-29 21:35:32 · 103 阅读 · 0 评论 -
MySQL - undo log 图文详解
回滚和多版本控制(MVCC)。是事务特性的重要组成部分,在数据发生更新操作时候(INSERT、DELETE、UPDATE)时会产生undo记录。先于redolog被记录。事务回滚这里的回滚不仅代表程序进行的主动回滚,也包括比如事务进行中数据库宕机后恢复时对部分不满足继续提交事务条件的事务进行回滚。MVCC提供快照读条件,以实现非锁定一致性读。如一个事务读被其他事务占用的记录时候,可以通过undolog链拿到之前的数据。......原创 2022-07-17 17:59:59 · 2047 阅读 · 2 评论 -
MySQL - redolog 图文详解
和binlog不同,redolog不是二进制日志。它是物理日志,记录数据页的物理修改。用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置)。redolog是innodb为了支持崩溃恢复而出现的,只记录innodb存储引擎中表的修改。层面不同binlogMySQL本身实现的日志模块,而redolog是innodb引擎层实现的。记录内容不同binlog记录的是逻辑性语句,即便是行格式形式。写入形式不同两阶段提交,后续章节会详解。写入时机不同。......原创 2022-07-17 17:54:01 · 2304 阅读 · 0 评论 -
MySQL - binlog 图文详解
binlog是MySQL的一种二进制日志,记录引起或可能(更新删除没有匹配的记录)引起数据库变动的事件信息。binlog以事件形式记录,不是事务日志。对于非事务表的操作,每当语句执行完成则直接写入;对于事务表的操作则会在事务提交时(先记录到缓存中)一次性写入。......原创 2022-07-17 17:50:55 · 4430 阅读 · 0 评论 -
InnoDB - 如何计算 B+树层高
如何计算 InnoDB B+树 层高原创 2022-07-12 16:06:13 · 501 阅读 · 0 评论 -
(超详细)五万字多图详解 MySQL 事务核心知识点
以图文形式讲解 MySQL 事务相关的核心知识点。原创 2022-06-29 21:48:11 · 505 阅读 · 0 评论 -
InnDB - 如何估算最大记录总数
如何估算一张 InnoDB 表最大存储数据量。原创 2022-06-29 15:16:20 · 416 阅读 · 0 评论 -
MySQL 优化 - 数据大小
看到这个标题,不要惊讶哦。或许有部分人会疑问,存入的数据已经固定了,怎么还能优化尼?是的,还是可以优化的。这里引出我最常说的一句话数据库优化的本质就是在减少数据量。接下来的篇幅介绍从哪些方面可以从数据上做调优。......原创 2021-07-06 22:42:40 · 294 阅读 · 0 评论 -
InnoDB - Buffer Pool
【1】前言InnoDB Buffer Pool 是 InnoDB 缓冲池。里面保存热数据,旨在减少直接查询磁盘的操作。【2】读前须知缓冲池大小必须始终等于或为 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 的倍数。【2-1】Buffer Pool Instance其实可以理解类似为 Redis 有 16个库一样。 InnoDB 将缓冲池划分为单独的实例可以通过减少不同线程读取和写入缓存页面时的争用来提高并发性。使用散列原创 2021-06-29 23:06:50 · 1054 阅读 · 0 评论 -
InnoDB - Buffer Pool - 预读
【1】介绍InnoDB维护一个称为缓冲池的存储区域, 用于在内存中缓存数据和索引。利用它将经常访问的数据保存在内存中,是 MySQL 调优的一个重要方面。【2】缓冲池预取(Read-Ahead)【2-1】含义预读是当发起一个 I/O 请求时候,它异步地预取缓冲池中的多个页面。也就是认为你接下来很有可能会查询当前请求后面的数据,所以预先把接下来的部分数据页读取出来。InnoDB 以 64 个 page 为一个 extent。以按 page 或 extent 为预读单位分为两种预算算法 线性预读 和原创 2021-06-29 21:33:02 · 512 阅读 · 0 评论 -
MySQL 规范和优化建议
目录范式字符集、排序表列索引参数调优本文所写内容在于限制一些数据库规范及优化建议,可以留言提出建议。范式范式作为本文的第一小节,旨于在设计数据表时候尽可能符合三大范式。第一范式(1NF)每一列属性都是不可再分的属性值,确保每一列的原子性。两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。第二范式(2NF)第二范式就是在第一范式的基础上属性完全依赖于主键。实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这原创 2021-04-04 22:45:03 · 143 阅读 · 0 评论 -
Innodb 行模式
前言众所周知,Innodb 采用的是行式存储方式存储数据。每个表中的数据被分为页面。组成每个表的页面被安排在一个称为b树索引的树数据结构中。表数据和二级索引都使用这种结构。代表整个表的B-tree索引称为聚集索引,它是根据主键列组织的。聚集索引数据结构的节点包含行中所有列的值。二级索引结构的节点包含索引列和主键列的值。但变长列(VARCHAR, VARBINARY, BLOB, TEXT)是列值存储在B-tree索引节点规则的一个例外。如果变长列太长,无法装入B-tree页面,则存储在单独分配的称为原创 2021-03-03 14:34:48 · 293 阅读 · 1 评论 -
MySQL - 大量 sending data 状态进程,让数据库性能急剧下降。
问题现象日志库大量进程阻塞,导致服务不可用。日志库状况描述数据特点数据库是用于存储用户点击、激活、登录、付费等所有日志,使用了 Tokudb 存储引擎。特别是点击数据,现在已经达到 2亿 量级。进程状态当时登录到数据库中查询到有很多进程处于 Sending data 和 open table 状态,数据库处于极度阻塞的状态。Sending data 和 open table 状态的进程是来自 select 语句,加上其他 insert 语句带来的进程,数据库实时的进程数在百级别了(这里稍微记一原创 2021-02-27 17:01:48 · 11674 阅读 · 0 评论 -
Innodb、Tokudb、Myisam目录结构
Innodb从物理意义上来讲,InnoDB表由共享表空间、日志文件组(redo文件组)、表结构定义文件组成。innodb 有着比较不同的目录结构,分为共享表空间、独立表空间。由参数:innodb_file_per_table 控制类型。0:使用共享表空间;1:使用独立表空间可使用 show variables like “innodb_file_per_table”; 查看下面的文件目录均在 data_dir 定义中。独立表空间:开启了独立表空间,每个数据库会创建同名文件来存储该库中表结构文件原创 2021-02-26 10:36:22 · 221 阅读 · 0 评论 -
Innodb 和 Tokudb 基本性能对比
然后,Root节点做了大量的分裂操作之后,产生大量的height=1的节点,然后height=1的节点被撑爆满之后,又会产生大量height=2的节点,最终树的高度越来越高。TokuDB解决随机写入的问题得益于其索引结构,FractalTree和B-Tree的差别主要在于索引树的内部节点上,B-Tree索引的内部结构只有指向父节点和子节点的指针,而FractalTree的内部节点不仅有指向父节点和子节点的指针,还有一块Buffer区。INPLACE方式。...原创 2021-02-23 16:41:30 · 2149 阅读 · 2 评论 -
MySQL 客户端常用选项
本文为整理 mysql 可用选项,排序以 a-z 排序举例。–help, -?显示帮助消息并退出。–auto-vertical-output如果结果集对于当前窗口而言太宽,则导致结果集垂直显示,否则使用常规表格格式。(这适用于以 ; 或终止的语句 \G。)–batch, -B使用tab作为列分隔符打印结果,每一行都换行。有了这个选项, mysql 不使用历史文件。–binary-as-hex给出此选项后,mysql将使用十六进制表示法(0xvalue)显示二进制数据。无论整体输出显示格式是表原创 2020-11-22 20:45:36 · 1006 阅读 · 0 评论 -
MySQL 输入查询
上一章 仔细说了连接 MySQL 的各种选项,这这一章聊些使用的小技巧。原创 2020-10-17 21:34:54 · 319 阅读 · 0 评论 -
MySQL 命令行连接选项
文章开始之前,先贴一份命令:root@764df9acf820:/# mysql -uroot -p相信大多数人都是这样使用的,同时我也猜到大多数人(菜鸟的我)会有很多疑问。如:-uroot 之间应不应该有空格、-h 和 --host 又有什么区别… 接下来我们就带着这些疑问开始了解吧。一、首先我们了解下命令行参数的规则选项在命令名称后给出。选项参数以一个破折号或两个破折号开头,这就是短格式、长格式两种形式。如 -h 和 --host。选项名称区分大小写。-v并且 -V都是合法的,并有不同的原创 2020-10-17 21:20:02 · 366 阅读 · 0 评论