数据库
文章平均质量分 93
屁颠屁颠过日子
这个作者很懒,什么都没留下…
展开
-
数据库 - buffer pool
Buffer Pool本质是InnoDB向操作系统申请的一块连续的内存空间,在多线程环境下,访问Buffer Pool中的各种链表都需要加锁处理,所以在Buffer Pool特别大时,可以把它们拆分成若干个小的Buffer Pool,每个Buffer Pool都称为一个实例,它们都是独立的,独立的去申请内存空间,独立的管理各种链表,在多线程并发访问时并不会相互影响,从而提高并发处理能力。当需要访问某个页的数据时,把完整的页的数据全部加载到内存中,即使只访问一个页的一条记录,也要把整个页的数据加载到内存。原创 2024-04-02 21:28:46 · 672 阅读 · 0 评论 -
数据库-事务
如果开启了一个事务,并且已经敲了很多语句,忽然发现上一条语句有点问题,只好使用ROLLBACK语句来让数据库状态恢复到事务执行之前的样子,为避免一切从头再来,Mysql提出了一个保存点(英文:savepoint)的概念,在事务对应的数据库语句中打几个点,在调用ROLLBACK语句时可以指定会滚到哪个点,而不是回到最初的原点。可以看到默认值为ON,即如果不显式的使用START TRANSACTION或者BEGIN语句开启一个事务,那么每一条语句都算是一个独立的事务,这种特性称之为事务的自动提交。原创 2024-04-02 20:48:23 · 638 阅读 · 0 评论 -
数据库 -- 锁分析
MySQL 中提供了两种封锁粒度:行级锁以及表级锁。应该尽量只锁定需要修改的那部分数据,而不是所有的资源。锁定的数据量越少,发生锁争用的可能就越小,系统的并发程度就越高。但是加锁需要消耗资源,锁的各种操作(包括获取锁、释放锁、以及检查锁状态)都会增加系统开销。因此封锁粒度越小,系统开销就越大。在选择封锁粒度时,需要在锁开销和并发程度之间做一个权衡。1. 表锁开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低分为两种模式:表读锁(Table Read Lock)表写锁(T原创 2020-07-06 20:45:13 · 378 阅读 · 1 评论 -
数据库 -- explain
查询执行计划:explain + SQL语句以下对每个字段进行分析id: 编号:每出现一个select语句,便分配一个唯一的id值。每个表对应一条记录,若几个表在一个select语句中,则id值相同。注:查询优化器可能对涉及子查询的查询语句进行重写,转换成连接查询,所以如果有子查询,但id值相同,则说明查询优化器将子查询转换成了连接查询。select_type: 查询类型PRIMARY:包含子查询的主查询。SUBQUERY: 包含子查询的子查询,非最外层SIMPLE:简单查询(不包含un原创 2020-06-05 23:17:50 · 249 阅读 · 1 评论 -
数据库 -- 大表优化
性能状态关键指标QPS,Queries Per Second:每秒查询数,一台数据库每秒能够处理的查询次数TPS,Transactions Per Second:每秒处理事务数1. 什么是成本?I/O成本表使用的MyISAM、InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当查询表中的记录时,需先把数据或者索引加载到内存中然后再操作。从磁盘到内存这个加载的过程损耗的时间称之为I/O成本。CPU成本读取以及检测记录是否满足搜索条件、对结果集进行排序等操作损耗的时间称之为CPU成本。原创 2020-06-05 22:39:38 · 384 阅读 · 1 评论 -
数据库 -- MVCC 多版本并发控制
InnoDB的锁机制可以解决并发控制,但开销大,常常与MVCC结合使用,在大多数情况下代替行级锁,降低开销。只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作基本原理:通过保存数据在某个时间点的快照来实现,当我们对某条记录做了变更时,老版本的数据被放在Undo Log里,并且以指针的形式关联起来,形成一个链表。这样,在查找老的版本时,需要按链表顺...原创 2020-05-06 12:58:41 · 242 阅读 · 1 评论 -
数据库 -- redo log日志
1. 介绍若想让已提交的事务对数据库的修改永久生效,即使系统崩溃,重启后也可把这种修改恢复出来。没有必要在每次事务提交时就把该事务在内存中修改过的全部页面刷新到磁盘,只需要把修改的内容记录下来。称为redo log,好处如下:redo日志占用的空间非常小存储表空间ID、页号、偏移量以及需要更新的值所需的存储空间是很小的。redo日志是顺序写入磁盘的,使用顺序IO执行事务中,每执行一条语...原创 2020-05-08 12:13:49 · 5581 阅读 · 1 评论 -
数据库 -- 索引
一、索引的介绍1、索引分类主键索引:不能重复,不能为null唯一索引:不能重复,可以为null密集索引:每个数据记录都对应一个索引项稀疏索引:只为某些记录建立索引项2、创建索引:方式一:create 索引类型 索引名 on 表(字段)单值:create index id_index on student(id);唯一:create unique index name_...原创 2020-05-08 13:25:06 · 225 阅读 · 1 评论 -
数据库 -- InnoDB数据页结构
InnoDB是一个将表中的数据存储到磁盘上的存储引擎,采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16KB。1. File Header一个页只有16KB,可能需要好多页来存放数据,FIL_PAGE_PREV 和 FIL_PAGE_NEXT 这两个属性就分别代表本页的上一个和下一个页的页号。注:并不是所有类型的页都有上一个和下一个...原创 2020-05-08 13:54:11 · 197 阅读 · 0 评论 -
数据库 -- 常见表操作
数据库操作查看数据库信息 select database();查看所有库 show databases修改库信息 alter database 数据库名 选项信息删除库 drop database 库名选择库 use 库名表的操作创建表create table 表名(字段名 数据类型 [NOT NULL | NULL] [DEFAULT value] [AUTO_INCREMNT] [UNIQUE [KEY] | [PRIMARY] KEY] )表选项:CH原创 2020-06-05 22:06:16 · 174 阅读 · 0 评论