![](https://img-blog.csdnimg.cn/7dc18d38c5a44580be74d35b7eb9f566.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据库
文章平均质量分 70
此专栏收录MySQL、Postgresql、Oracle等关系型数据库文章、笔记
鮀城小帅
在工作中一步步学习、进步,充实工作也充实生活。
展开
-
H2(Server版):Win/Linux环境安装及一键部署脚本
参考 linux安装后的连接方式,是一样的。本机安装可以使用localhost:8082 进行页面登录。(2)DBeaver访问H2,这里使用19200端口。下载后,双击运行,一直点击 next 安装即可。sa是默认的账号,密码为NULL。(1)网页访问,这里使用8082端口。原创 2023-05-22 10:00:00 · 712 阅读 · 0 评论 -
SQL表字段类型提取:SqlFileParser
根据以下正则匹配与if校验逻辑,可提取SQLServer的脚本文件里CREATE TABLE的字段类型,比如:varchar、datetime等。原创 2023-05-22 22:22:56 · 159 阅读 · 0 评论 -
MySQL:Win/Linux环境安装及一键部署脚本
RPM是RedHat Package Manager的缩写,相当于Windows系统中的*.exe安装程序。(3)在打开的服务列表中查找mysql服务,如果没有mysql服务,说明本机没有安装mysql,反之,说明本机安装了mysql服务。用户:user01,密码:123456,这样就添加了一个新的用户,不会出以上的错误了。(4)以管理员权限打开cmd,进入mysql的bin文件下,依次执行命令。如果使用文本形式上传,上传过程中会被重新编码,程序将不能正常工作。mysql初始密码必须记住!原创 2023-04-10 16:21:02 · 3004 阅读 · 0 评论 -
批量操作数据库的多个表新增字段
【代码】给数据库的多个表增加相同字段。原创 2023-01-12 17:10:13 · 950 阅读 · 0 评论 -
高性能可扩展mysql 笔记(一)数据库表、索引、SQL语句设计规范
项目说明:该笔记的背景为电商平台项目,电商项目由于其高并发、多线程、高耗能等特性,在众多的项目类型中涉及的技术面最广,故以此为例作为案例:项目说明: 主要功能模块: 对于一个项目的立项,从需求分析到技术栈的决定,其中的业务执行都离不开持久层中对数据库的操作,数据库的库、表设计等规范对项目的高效、可用...原创 2019-10-08 00:38:06 · 209 阅读 · 0 评论 -
高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区
一、MySQL分区表操作1、定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件,在逻辑上表现为一个表;2、表分区的弊端: 要谨慎选择分区键,错误的操作可能导致跨分区查询效率降低。 建议 采用物理分表的方式管理大数据。3、确认MySQL服务器是否支持分区表 使用 SHOW PLUGINS;在mysql命令行查看是否具有分区表的功能:...原创 2019-10-08 21:50:17 · 1351 阅读 · 0 评论 -
高性能可扩展mysql 笔记(五)商品实体、订单实体、DB规划
一、商品模块 商品实体信息所存储的表包括:品牌信息表:create table `brand_info`( brand_id SMALLINT UNSIGNED auto_increment not null comment '品牌', brand_name varchar(50) not null comment '品牌名称', tel...原创 2019-10-09 23:38:21 · 677 阅读 · 0 评论 -
高性能可扩展mysql 笔记(六) SQL执行计划及分页查询优化、分区键统计
常见业务处理一、使用数据库处理常见业务:案例: 如何对评论进行分页展示使用 EXPLAIN 获得sql的执行计划 EXPLAIN SELECT customer_id,title,content from `product_comment` where audit_status = 1 and product_id = 1...原创 2019-10-10 16:09:02 · 194 阅读 · 0 评论 -
高性能可扩展mysql 笔记(四)项目分区表演示
登录日志的分区如何为Customer_login_log表分区?从以下两个业务场景入手: 用户每次登陆都会记录customer_login_log入职 用户登录日志保存一年,一年后可以删除1、登录日志表的分区类型及分区键确定: 分区类型: 使用RANGE分区 以login_time作为分区键2、创建分区表:CREATE TAB...原创 2019-10-08 22:17:01 · 108 阅读 · 0 评论 -
高性能可扩展mysql 笔记(二)用户模型设计、用户实体表结构设计、设计范式
一、用户模型设计电商羡慕中用户模型的设计涉及以下几个部分: 以电商平台京东的登录、注册页面作为例: 用户的基本模块涉及用户的账户名、密码、以及手机号码、所在地等信息。 由个人后台信息截图可知,用户的实体信息其实很多,不仅仅是当前页面所看到的,如下图: 二、用户实体属...原创 2019-10-08 12:34:59 · 451 阅读 · 0 评论 -
Leetcode题库(数据库详解)难度等级-简单
如果 personId 的地址不在 Address 表中,则报告为空 null。用左外连接,以左表为准,右表不符合条件默认会返回null。比如:PersonId=2的city、state字段都是空的。地址表中没有 personId = 1 的地址,所以它们的城市和州返回 null。该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。该表包含一些人的 ID 和他们的姓和名的信息。addressId 是该表的主键列。personId 是该表的主键列。表: Address。原创 2022-11-01 10:57:58 · 809 阅读 · 0 评论 -
MySQL: 3 Innodb存储引擎的架构设计
1.一条SQL语句在MySQL中的执行过程update users set name='xxx' where id=10上面这条SQL语句的执行过程如下:系统通过一个数据库连接发送到了MySQL上,然后经过SQL接口、解析器、优化器、执行器几个环节,解析SQL语句,生成执行计划,,接着去由执行器负责这个计划的执行,调用InnoDB存储引擎的接口去执行。下面将深入去了解基于存储引擎完成一条更新语句的执行。2.InnoDB的重要内存结构:缓冲池InnoDB存储引擎中有一个非常重要的放原创 2021-07-05 23:13:25 · 145 阅读 · 1 评论 -
MySQL:35 RAID锂电池充放电导致的MySQL数据库性能抖动的优化
1.回顾前面的内容前面几章学完了MySQL磁盘读写的机制,Linux存储系统的原理,RAID磁盘阵列的介绍,RAID锂电池定时充放电的原理。2.案例讲解RAID锂电池充放电对性能抖动的优化假设有一个核心的业务,他的数据库是部署在高配置服务器上的,磁盘用的是RAID 10 的阵列技术,用了6块磁盘组成了RAID 10磁盘阵列架构。RAID 0的意思是,多个磁盘组成了一个阵列,然后所有的数据是分散写入不同磁盘的,因为有多块磁盘,所以磁盘阵列的整体容量就很大,而且同时写入多快磁盘,会让磁盘的读写并原创 2021-08-08 16:29:46 · 304 阅读 · 0 评论 -
MySQL:34 数据库服务器上的RAID存储架构的电池充放电原理
服务器使用多块磁盘组成的RAID阵列的时候,一般会有一个RAID卡,这个RAID卡是带有一个缓存的,这个缓存不是直接用服务器的主内存的那种模式的,而是一种和内存类似的SDRAM,当然也可认为他是基于内存来存储的。当我们把RAID的缓存模式设置为 write back,这样的话,所有写入到磁盘阵列的数据,会先缓存到RAID卡的缓存里,后续再慢慢写回磁盘阵列里去。这种写缓冲机制可以大大提高数据库磁盘的写性能。缓存丢失的问题假设突然断电了,或者服务器自己故障关闭了,那么这个RAID卡的缓存里的数据原创 2021-08-08 15:15:06 · 469 阅读 · 0 评论 -
MySQL:33 数据库服务器使用的RAID存储架构
MySQL是用编程语言写的一套数据库管理软件,其底层就是磁盘来存储数据,基于内存来提升数据读写性能,然后设计了复杂的数据模型,帮助我们高效的存储和管理数据。生产环境的MySQL数据库软件是安装在Linux服务器上的,然后启动MySQL的进程,就是启动了一个MySQL数据库。MySQL在运行过程中,需要使用CPU、内存、磁盘和网卡等硬件,但不是直接使用,都是通过调用操作系统提供的接口,依托于操作系统来使用和运行的,然后Linux操作系统负责操作底层的硬件。前面已经讲解过了MySQL层面的磁盘读原创 2021-08-08 14:53:03 · 384 阅读 · 0 评论 -
MySQL:32 Linux操作系统的存储系统软件层原理剖析以及IO调度优化原理
1. 操作系统的意义所谓的操作系统,无论是Linux也好,还是Windows也好,他们本身就是软件系统。由于我们不可能直接去操作CPU、内存、磁盘这些硬件,所以必须要用操作系统来管理CPU、内存、磁盘这些硬件设备。Windows操作系统提供了一个简单易用的可视化的操作界面,让普通人也能够操作台式电脑或者笔记本电脑内部的CPU、内存、磁盘等硬件。主要体现在编辑文件、上网、聊天等各种软件的使用,其中基于CPU执行文件编辑的操作,基于内存缓存对文件的编辑,基于磁盘编辑在文件里输入的内容,基于网卡去进行网络原创 2021-08-08 14:22:24 · 161 阅读 · 0 评论 -
MySQL:31 MySQL数据库的日志顺序读写以及数据文件随机读写的原理
1.MySQL数据库和底层的操作系统之间的交互原理MySQL在实际工作时候的两种数据读写机制,一种是对 redo log、binlog这种日志进行的磁盘顺序读写,一种是对表空间的磁盘文件里的数据页进行的磁盘随机读写。2.磁盘随机读写操作磁盘随机读操作MySQL在工作的时候,尤其是执行增删改操作的时候,肯定会先从表空间的磁盘文件里读取数据页出来,这个过程就是典型的磁盘随机读操作。在上图中,有一个磁盘文件,里面有很多的数据页,因为要读取的这个数据页可能在磁盘的任意一个位置,所以在读取磁盘原创 2021-08-07 22:56:02 · 740 阅读 · 0 评论 -
MySQL:30 阶段总结:MySQL存储模型以及数据读写机制
目前为止,初步学了MySQL存储模型以及对应的读写机制。可以知道的是MySQL的数据最终是放在磁盘文件里的。而数据在存储到磁盘文件的机制中,在逻辑层面是将数据插入一个一个的表中的;而在物理层面上,表对应的是表空间这个概念。也就是说数据在物理层面是存储到表空间的某个结构里了。他们的对应关系为,表空间对应着磁盘文件,在磁盘文件里就存放着数据。由于数据库存储的数据的复杂性,不只是多种字段类型的问题,还有索引这个概念的存在。所以实际上在磁盘文件里存放数据的时候,它从最基本的角度来看的话,就是被拆分为原创 2021-08-07 19:51:43 · 230 阅读 · 0 评论 -
MySQL:29 表空间以及划分多个数据页的数据区
表空间概念MySQL中,我们创建的每个表,有一个表空间的概念,每个表在磁盘上都会对应着“表名.ibd” 这样的一个磁盘数据文件。也就是说,在物理层面,表空间就是对应一些磁盘上的数据文件。表空间对应的磁盘文件数量不是固定一对一的。有的表空间,比如系统表空间可能对一个的是多个磁盘文件,而我们创建的表对应的表空间可能就只对应了一个“表名.ibd” 数据文件。表空间磁盘文件与数据页的关系在表空间的磁盘文件里,会有很多很多的数据页,从一个数据页不超过16kb可以得知,不可能一个数据页就是一个磁盘文原创 2021-08-07 19:14:54 · 241 阅读 · 0 评论 -
MySQL:28 用于存放磁盘上的多行数据的数据页的结构原理
1.执行SQL时,数据在磁盘与缓存的交互原理当执行CRUD操作的时候,会从磁盘上加载数据页到Buffer Pool的缓存页里去,然后更新了缓存页后,又会刷新回磁盘上的数据页里去。在MySQL中进行数据操作的最小单位应该是数据页,而数据是一行一行的在磁盘和缓存中进行存储的。2.数据页构成原理这里要引入一个问题,每个数据页的默认大小是16kb,那么这16kb的大小就全用来存放所有的数据行了吗?明显不是的,一个数据页拆分成了很多部分,主要包含了文件头、数据页头、最大记录和最小记录、多个数据行、原创 2021-08-07 18:47:16 · 131 阅读 · 0 评论 -
MySQL:27 数据在磁盘上存储的行溢出问题
数据页的默认大小是16kb,如果一行数据的大小超过了页的大小该怎么办?以一个表中的字段类型VARCHAR(65532)为例,它表示最大可以包含65532个字符,也就是65532个字节,这就远远大于16kb的大小了,也就是说这一行数据的这个字段就已经超过了一个数据页的大小。数据存储对行溢出的处理以上案例的一行数据在存储的时候,实际上 是在那一页里存储这行数据,然后在那个字段中,仅仅包含它一部分数据,同时包含一个20个字节长度的指针,指向了其他的一些数据页,那些数据页用链表串联起来,存放这个VARC原创 2021-08-07 18:03:55 · 884 阅读 · 0 评论 -
MySQL:26 每一行的实际数据在磁盘上是如何存储的?
一行数据在磁盘文件里传输的时候,首先会包含自己的变长字段的长度列表,然后是NULL值列表,接着是数据头,然后接着才是真实数据。以下是一行数据在磁盘上的存储机制:首先在存储真实数据的时候,就是按照字段的数据值去存储的。用前面的例子,有一行数据为:"jack NULL m NULL xx_school",那么它真实数据存储大致如下:0x09 0x04 00000101 0000000000000000000010000000000000011001 jack m xx_school刚开始原创 2021-08-06 07:01:01 · 163 阅读 · 0 评论 -
MySQL:25 磁盘文件中,40个bit位的数据头以及真实数据是如何存储的
在每一行数据存储的时候,还有着40个bit位的数据头存储着,这个数据头是用来描述这行数据的。这40个bit位里,第一个bit位和第二个bit位,都是预留位,是没任何含义的。接下来有一个bit位是delete_mask,它标识了这行数据是否被删除了。在MySQL里删除一行数据的时候,未必是立马把它从磁盘上清理掉,而是给他在数据头里搞1个bit标记它已经被删了。再下一个bit位是 min_rec_mask,这个bit位是说在B+树里每一层的非叶子节点里的最小值都有这个标记,后续深入理解。再接着有原创 2021-08-05 23:13:10 · 241 阅读 · 0 评论 -
MySQL:24 一行数据中的多个NULL字段值在磁盘上怎么存储
1. 一行数据里的NULL值不能直接存储在磁盘上存储的一行数据里有另一块特殊的数据区域,就是NULL值列表。这个所谓的NULL值列表,顾名思义,说的就是一行数据里可能有的字段值是NULL,比如有一个name字段,它是允许为NULL的,那么实际上在存储的时候,如果你没给它赋值,它这个字段的值就是NULL。由于它是个NULL,说明什么值都没有。实际上在磁盘上存储数据的时候,一行数据里的NULL值是肯定不会直接按照字符串的方式存放在磁盘上浪费空间的。2. NULL值是以二进制bit位来存储的一原创 2021-08-05 23:04:35 · 632 阅读 · 0 评论 -
MySQL: 23 VARCHAR可变长度字段在磁盘上的存储机制
1. 变长字段在磁盘中的存储机制在MySQL中有些字段的长度是变长的,也就是不固定的,以VARCHAR(10) 类型的字段为例,它里面存放的字符串的长度是不固定的,有可能是“hello” 这么一个字符串,也可能是“a” 这么一个字符串。案例,这里有一行数据,它的几个字段的类型为 VARCHAR(10), CHAR(1),CHAR(1) , 那么它第一个字段是VARCHAR(10),这个长度是可能变化的,所以这一行数据可能就是类似于: hello a a ,这样子,第一个字段的值是“hello” ,原创 2021-08-05 22:18:16 · 2185 阅读 · 0 评论 -
MySQL: 22 写入数据库的一行数据,在磁盘上是怎么储存的
1. 为什么不能直接更新磁盘上的数据因为来一个请求就直接对磁盘文件进行随机读写,然后更新磁盘文件里的数据,虽然技术上是可以做到的,但是那必然导致执行请求的性能极差。因为磁盘随机读写的性能是最差的,所以直接更新磁盘文件,必然导致数据库完全无法抗下任何稍微高并发一点的场景。所以MySQL才设计了如此复杂的一套机制,通过内存里更新数据,然后写redo log以及事务提交,后台线程不定时刷新内存里的数据到磁盘文件里。通过这种方式保证,每个更新请求,尽量就是更新内存,然后顺序写日志文件。而更新内存原创 2021-08-04 23:23:12 · 374 阅读 · 2 评论 -
MySQL: 21 生产经验:在生产环境中,基于机器配置来合理设置Buffer Pool
1.生产环境中应该给Buffer Pool设置多少内存在生产环境中,给Buffer Pool设置的内存不是占满整个机器的内存量,而是有一个合理、健康的比例,也就是给Buffer Pool 设置当前的机器内存的50%~60%左右。比如当前有32G的机器,那么给Buffer 设置个20GB的内存,剩下的留给OS和其他人使用,就比较合理了。2.buffer pool总大小=(chunk大小 * buffer pool数量)的2倍数在确定了Buffer Pool的大小之后,就得考虑设置多少个Buff原创 2021-08-04 22:57:28 · 345 阅读 · 0 评论 -
MySQL: 20 生产经验:通过chunk来支持数据库运行期间的Buffer Pool动态调整
1. Buffer Pool不能在运行期间动态调整Buffer Pool并不能在运行期间动态的调整大小。因为想要动态调整Buffer Pool大小,比如Buffer Pool本来是8G,运行期间调整为16G。这一实现是需要向操作系统申请一块新的16GB的连续内存,然后把现在的Buffer Pool中的所有缓存页、描述数据块、各种链表,都拷贝到新的16GB的内存中去,这个过程是极为耗时的,性能很低下,是不可以接受的。就目前所了解到的一整套原理,buffer pool 是绝对不能支持运行期间动态调整原创 2021-08-03 23:09:03 · 457 阅读 · 0 评论 -
MySQL: 19 生产经验:如何通过多个Buffer Pool来优化数据库的并发性能
1. Buffer Pool 在访问过程中的加锁机制Buffer Pool本质就是一大块内存数据结构,由一大堆的缓存页和描述数据块组成的,然后加上了各种链表(free、flush、lru)来辅助它的运行。如果MySQL同时接收到了多个请求,它就会用多个线程来处理这多个请求,每个线程会负责处理一个请求。这多个线程会同时去访问Buffer Pool,也就是同时去操作里面的缓存页,同时操作一个free链表、flush链表、lru链表。这里要注意的是,当多个线程来并发的访问这个Buffer P.原创 2021-08-03 22:22:44 · 370 阅读 · 1 评论 -
MySQL: 18 优化后的LRU链表中尾部的缓存页淘汰刷入磁盘的机制
1. Buffer Pool 的缓存页与几个链表的使用Buffer Pool在运行中被使用的时候,实际上会频繁的从磁盘上加载数据页到它的缓存页里去,然后free链表、flush链表、lru链表都会在使用的时候同时被使用。对于将数据加载到一个缓存页,free链表里会移除这个缓存页,然后lru链表的冷数据区域的头部会放入这个缓存页。如果修改了一个缓存页,那么flush链表中会记录这个脏页,lru链表中还可能会把你从冷数据区域移动到热数据区域的头部去。如果是查询了一个缓存页,就会把这个缓存页在lr原创 2021-08-03 07:01:28 · 217 阅读 · 0 评论 -
MySQL: 17 MySQL是如何将LRU链表的使用性能优化到极致的?
1. LRU链表的冷数据区域都是什么数据大部分都是预读加载进来的缓存页,加载进来1s之后都没人访问的,然后包括全表扫描或者一些大的查询语句,加载一堆数据到缓存页,结果都是 1s 之内访问了一下,后续就不再访问这些表的数据了。类似这些数据,统统都会放在冷数据区域里。2. Redis里存放了很多缓存数据,是否也有类似冷热数据的问题?如何优化和解决?以电商系统里的商品缓存数据为例,假设有1亿个商品,如果只要发起查询的商品都放到缓存里去,必然导致大量访问率低的商品都会被放在Redis里去。经常被原创 2021-08-02 23:05:37 · 244 阅读 · 0 评论 -
MySQL: 16 基于冷热数据分离方案优化后的LRU链表如何实现缓存页的淘汰机制
1. 对于预读机制以及全表扫描加载进来的一大堆缓存页在经过优化的LRU链表方案下,预读机制以及全表扫描加载进来的一大堆缓存页,都会被放在LRU链表的冷数据区域的前面。假设这个时候热数据区域已经有很多被频繁访问的缓存页了,就会发现热数据区域还是存放被频繁访问的缓存页的,只要热数据区域有缓存页被访问,它还是会被移动到热数据区域的链表头部去。而预读机制和全表扫描加载进来的一大堆缓存页,此时都在冷数据区域里,跟热数据区域里的频繁访问的缓存页,是没关系的。2. 预读机制和全表扫描加载进来的缓存页.原创 2021-08-02 22:47:54 · 313 阅读 · 0 评论 -
MySQL: 15 MySQL是如何基于冷热数据分离的方案去优化LRU算法的
1. 基于冷热数据分离的思想设计LRU链表MySQL在设计LRU链表的时候,采取的实际上是冷热数据分离的思想。前面的问题,都是由于所有缓存页都混在一个LRU链表里,才导致的。真正的LRU链表,会被拆分为两个部分,一部分是热数据,一部分是冷数据,这个冷数据的比例是由 innodb_old_blocks_pct 参数控制的,它默认是37,也就是说冷数据占比 37%。LRU链表实际上看起来是下面这样子的。2. 数据页第一次被加载到缓存的时候在知道LRU链表是按照一定的比例被拆分为了冷.原创 2021-08-02 22:21:53 · 881 阅读 · 0 评论 -
MySQL: 14 LRU链表在Buffer Pool实际运行中可能导致的问题
1. LRU链表在Buffer Pool的应用Buffer Pool在使用过程中如果缓存页都使用了,没有空闲的缓存页时,可以去LRU链表中的尾部找一个最近最少使用的缓存页,把它的数据刷入磁盘,腾出来一个空闲缓存页,然后加载需要的新的磁盘数据页到空闲缓存页里去。LRU链表的机制,只要是刚从磁盘上加载数据到缓存页里去,这个缓存页就放入LRU链表的头部,后如果对任何一个缓存页的访问,都会把缓存页从LRU链表中移动到头部去。这样在LRU链表的尾部,一定是最近最少被访问的那个缓存页。2.LRU机制在实原创 2021-08-01 23:40:31 · 165 阅读 · 0 评论 -
MySQL: 13 基于LRU算法淘汰Buffer Pool中的部分缓存
1. Buffer Pool中的缓存页不够了怎么办?在加载数据到缓存页的时候,必然是要加载到空闲的缓存里去的,所以必须要从free链表中找一个空闲的缓存页,然后把磁盘上的数据页加载到那个空闲的缓存页里去。缓存页不够用了随着不停的把磁盘上的数据页加载到空闲的缓存页里去,free链表中的空闲缓存页会越来越少,最终会发现free链表中已经没有空闲缓存页了。此时面临的问题是,我还要加载数据页到一个空闲缓存页里该怎么办?2.如果要淘汰掉一些缓存数据,淘汰谁?如果所有的缓存页都被写满了数据.原创 2021-08-01 21:54:06 · 246 阅读 · 0 评论 -
MySQL: 12 当更新Buffer Pool中的数据时,flush链表的作用
1. Buffer Pool中的内存碎片问题在Buffer Pool中是存在内存碎片的。由于Buffer Pool大小是固定的,当Buffer Pool划分完全部的缓存页和描述数据块之后,还剩一点点的内存,而这一点点内存又放不下任何一个缓存页,就只能放着不能用,这就是内存碎片。数据块在Buffer Pool中划分缓存页的时候,会让所有的缓存页和描述数据块都紧密的挨在一起,从而尽可能的减少内存浪费,来减少内存碎片的产生。2. 脏数据页在执行增删改的时候,如果发现数据页没缓存,就会基于fre原创 2021-08-01 20:34:49 · 308 阅读 · 2 评论 -
MySQL: 11 从磁盘读取数据页到Buffer Pool的时候,free链表的作用
1. 数据库启动的时候,初始化Buffer Pool的过程Buffer Pool 中包含很多个缓存页,同时每个缓存页还有一个描述数据,也可以叫做是控制数据或元数据。在MySQL启动的时候,它会按照你设置的Buffer Pool大小,稍微再加大一点,去向操作系统申请一块内存区域,作为 Buffer Pool的内存区域。然后当内存区域申请完毕之后,数据库就会按照默认的缓存页的16KB的大小以及对应的800个字节左右的描述数据的大小,在Buffer Pool中划分出来一个一个的缓存页和一个一个的对应他原创 2021-08-01 18:25:03 · 195 阅读 · 0 评论 -
MySQL: 10 Buffer Pool的内存数据结构
1. Buffer Pool大小的配置Buffer Pool是数据库的一个内存组件,可以理解为一片内存数据结构,这个内存结构是有一定大小的。Buffer Pool的默认大小是128MB,可根据实际生产环境进行调整。调整Buffer Pool的配置如下:[server]innodb_buffer_pool_size=2147483648 # 这里调整为2GBWindows下MySQL的配置文件是my.ini,一般会在安装目录的根目录。 Linux下MySQL的配置文件是my.cnf,一般原创 2021-08-01 16:21:22 · 228 阅读 · 0 评论 -
MySQL: 9 为数据库部署Prometheus+Grafana监控系统
1.Prometheus和Grafana的介绍Prometheus是一个监控数据采集和存储系统,它可以利用监控数据采集组件(比如mysql_export)从你指定的MySQL数据库中采集他需要的监控数据,然后他自己有一个时序数据库,它会把采集到的监控数据放入自己的时序数据库中,本质上就是存储在磁盘文件里。Grafana是一个可视化的监控数据展示系统,他可以把Prometheus采集到的大量的MySQL监控数据展示成各种精美的报表,让我们可以直观的看到MySQL的监控情况。不只是对数据库监控可以采原创 2021-07-10 19:20:23 · 325 阅读 · 1 评论 -
MySQL: 8 在数据库的压测过程中,观察机器性能
1. 观察机器性能的必要性上一节中是使用10个线程去压测数据库,如果有性能更高的机器,那么就可以通过在sysbench中不停的增加线程的数量,比如使用20个线程,甚至100个线程去并发的访问数据库,知道发现数据库的QPS和TPS上不去了。注意:在不停的压测获取更高的QPS和TPS时,还要同步对机器性能表现做观察。之所以说要去观察机器性能,似乎因为一味的在压测过程中增加sysbench的线程数量,然后数据库勉强扛到了每秒5000的QPS了,但是这个时候就会发现机器的CPU已经满负荷运行了,内存使用原创 2021-07-08 22:11:41 · 369 阅读 · 0 评论