数据库性能
1.cpu选择:
计算密集型或者复杂SQL可以选择频率更高的,并发量大的可以选择核心数多的
2.内存
肯定是越大越好啦,但是如果你整个数据库就10G,你选择512 G的内存,也就没那么重要了。。
MySQL逻辑架构
1.无论是命令行启动一个 “mysql> ”,输入命令,还是使用navicat这种连接工具,或者是使用编程语言,去操作mysql数据库,统一都是 客户端。
2.连接器:建立连接、获取权限、维持和管理连接。
* 修改用户权限后,已经连接的会话不会受到影响哦
* 连接分为长连接和短连接,各有利弊,短连接不断创建销毁连接,存在开销,长连接可以复用连接,但是连接占据的资源要在连接释放后才会归还,因此会占据大量资源。解决:定期清理长连接,或者重置长连接里占用的资源
* 连接没有操作时会处于sleep状态,默认time out为8小时
3.缓存
不建议使用,8.0以后直接将缓存模块删除了,因为很大概率你辛辛苦苦存的数据,表一变动,所涉及到的缓存都是直接无效的,利用率极低
4.分析器
词法分析 跟语法分析,分辨你这一对字符串,想要干啥,有没有语法错误
5.优化器
分析器只是了解你要做什么,但是有可能有多种方法都能做,通过优化器选择一种最好的。
6.执行器
真正的去执行sql啦,这个时候才会去检查对表有没有权限,然后使用存储引擎提供的接口,去操作存放在磁盘上的数据。
tip:如果表不存在某个字段,是哪一步报错?
首先肯定不是执行器,因为字段不是数据,不需要执行器去执行才知道不存在,所以在分析器的时候
,可以知道字段是否存在。
存储引擎
上面的东西可以叫做服务层,搞了半天也就是他们都不接触真实数据的,存储引擎用来存储和处理数据文件的,插件式存储引擎
MYISAM
myd myi 两个文件
表级锁
支持地理空间函数和全文索引(但是后面版本的innodb也支持了,所以不能算是优势?)
适合非事务型应用,只读类的,比如日志?
Innodb
主流
行级锁
但是远远没有行级锁那么简单,举个例子:
事务A修改了一行数据 但是没有提交,此时从行级锁角度看,这行没法查看吧,但是事务B是可以查看的,不会阻塞,原因是MVVC多版本并发控制,undo.log记录了没有提交的事务,用来回滚,所以事务B读到的是undolog之前的版本的数据。
尽量使用独立表空间,首先,系统表空间无法简单的收缩文件,独立表空间可以通过optimize table来收缩,其次,系统表空间会有io瓶颈(毕竟用了同一个表空间),独立表空间可以多个文件刷数据
本文地址:https://blog.csdn.net/weixin_34431783/article/details/112566690