Mysql命令大全
mysql服务的启动和停止
net stop mysql
net start mysql
net stop mysql
net start mysql
一般来说,事务越大,拿到的锁就越多,因此死锁的可能性就越大。
MySQL 以页作为数据的基本存储单位,每个页内包含两个主要的链表:正常记录链表和垃圾链表。每条记录都有一个记录头,记录头中包括一个关键属性——deleted_flag。
数据访问代理服务端内部使用连接池访问物理数据库。合理的连接参数配置不仅有助于提升数据访问性能,而且能够保障数据库的稳定性。
connectTimeout
:创建数据库连接超时时间。socketTimeout
:SQL 请求超时时间,操作系统 socket 的超时时间,即一次 SQL 请求如果在该时间内没有返回任何数据,操作系统会抛出 Read timeout 的异常。txTimeout
:数据访问代理事务超时时间,默认为 10 分钟。该参数是为了保护 ODP 的连接池不会被长事务占满,而影响业务的正常访问。目前该值不能修改,后续提供业务自定义配置。idleTimeoutMinutes
:连接空闲时间,超过该时间则会被剔除出连接池,默认为 12 分钟。connectionProperties
通过 KV 键值对进行配置。min
:单个分库的最小连接数。如果 min
> 0,启动时会自动创建 min
个连接。max
:单个分库的最大连接数。表空间由段(segment)、区(extent)、页(page)、行(row)组成,InnoDB存储引擎的逻辑存储结构大致如下图:
数据库表中的记录都是按行(row)进行存放的,每行记录根据不同的行格式,有不同的存储结构。
说白了索引就是数据的目录,根据索引去查数据必然比在库中一行记录一行记录的查更快
Mysql的数据是存储在磁盘中的,每次从磁盘中读取数据都需要进行一次IO。一个表的数据在磁盘上由于插入顺序的原因肯定不是顺序存放,如果按照表字段内容顺序查找,如果一个500万条数据的表,要找的刚好是第500万个值,则需要与磁盘做500万次IO,效率低下
因此在选择索引的数据结构时,应尽量减少IO次数,提高效率。而Mysql就是使用的B+树
这与hash表的原理有关。
虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。
要想提升查询性能,那就加个缓存。所以,当数据从磁盘中取出后,缓存内存中,下次查询同样的数据的时候,直接从内存中读取。
为此,Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能。
flush tables with read lock
加锁的对象是索引,加锁的基本单位是 next-key lock,它是由记录锁和间隙锁组合而成的,next-key lock 是左开右闭区间,而间隙锁是左开右开区间。
在只使用记录锁或者间隙锁就能避免幻读现象的场景下, next-key lock 就会退化成记录锁或间隙锁。
假设这个表,id 是主键索引(唯一索引),age 是普通索引(非唯一索引),name 是普通的列。数据如下: