高性能Mysql 笔记 (1)

这里写图片描述

应用和mysql的连接 是长连接还是短连接?

大部分是长连接,并且现在应用很少直连mysql而都是通过开源数据库连接池,比如c3p0

mysql服务端使用 典型的 “线程池” 实现伪异步IO。
mysql server监听进程,监听到新的请求,然后mysql为其分配一个新的 thread,去处理此请求。

MySQL为什么使用线程的模型而不是epoll之类的技术?
mysql的瓶颈一般是在磁盘IO,
使用epoll后只是能处理的连接请求变多了,
这些请求在磁盘IO已到瓶颈的时候被mysql处理时,只会使得IO更繁忙。

client连接mysql 后,所有的 sql命令 已 String 字符串的 参数形式, 传到服务器端 。

事务&&锁的粒度

表锁 行锁

事务的四大特性ACID 具体指什么?
对隔离有多少了解?隔离级别有哪些?mysql默认是哪一个?
简单实现:
read uncommitted : 对事务的处理不加锁,而仅使用volitale
read committed:数据的读取都不做任何限制,但是数据的写入、修改和删除是需要加锁的。也就是被加锁的数据是可以被读的。
repeatable read: 事务涉及的地方可能是一个范围,这个范围在事务执行期间会发生变化。 这种变化是否要通知其他事务? rr 级别要求不通知。既在不同的事务看来,同一时刻看到的相同行的数据可能是不一样的。其实现借助了mvcc
串行:读加共享锁,写加排他锁,读写互斥。就是java 中的 读写锁。
Serializable
这个级别很简单,读加共享锁,写加排他锁,读写互斥

事务自动提交
如果不是显式的开启事务, 系统会将 每个查询语句都当成事务。
锁都是针对于某个事务而言的,一个事务可以看出是一个线程,锁会在事务提交或者回滚时释放。

行级锁 并不是直接锁记录,而是锁索引。
mysql 主键索引 是聚簇索引,因此 锁非主键索引也会锁上 主键索引

MVCC

由于隔离性的存在,每个事务对同一张表,在同一个时刻看到 数据是不一样的
读操作不加锁, 写操作尽量少加锁。
Innodb通过添加系统版本号实现MVCC

存储引擎

负责Mysql中数据的存储和提取
Innodb : 用来处理 大量 短期事务。数据库行锁,会在事务提交或者回滚之后释放本事务占有的行锁

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值