2024.12.27复习日记
os
进程管理:
首先是操作系统,cpu
,进程三者之间的关系
操作系统操作cpu
,去执行进程,其中进程执行顺序,执行多长时间,以及进程间的调度都是由操作系统完成的,cpu
只负责执行。不过进程本身也具有储存数据的功能,比如说储存自己执行到哪里了,以便下一次执行时从该位置往下继续执行
进程的状态
创建状态,运行态,就绪态,阻塞态,就绪挂起态,阻塞挂起态,结束状态
预读失效和缓存污染
预读失效主要原因是cpu
从硬盘读数据到内存中时,由于计算机的局部性原理,常常会用到读取的那一页数据的相邻数据,所以会连着读取除了要用的数据之外的几页数据到内存中。假如LRU缓存可以存10页的数据,读来了5页的数据,那连着读过来的那4页数据放在LRU缓存中的头部,就把原来的6,7,8,9,10都给挤掉了,但是连着读来的那几页后续又没有被访问到,热点数据又被挤掉了,后续访问热点数据就又要1次磁盘I/O严重影响了速度。
为了解决这个问题,Linux
用两个LRU链表来缓存数据,一个是ActiveLRU
,一个是InActiveLRU
,假如读来的数据页是11-15,11数据页读完后立刻被使用了,也就放入ActiveLRU
,而12-15就放在InActiveLRU
。这样连着读来的数据页也不会挤掉热点数据。MYSQL
则是在LRU中分为YOUNG和OLD两块区域,其占比位63:37,读来的没有被访问的数据放在OLD区,被访问的数据放在YOUNG区
缓存污染主要是在执行SQL语句的时候如果进行全表扫描并且索引失效,会连续读来非常多的页数据,这样的话所有的数据都被干到ActiveLRU
和YOUNG区,把热点数据又给挤掉了,究其原因是升级的条件不够苛刻。所以为了解决这个问题Linux将升级的条件设为InActiveLRU
中的数据被访问两次,MYSQL将升级条件设为被访问两次,且第二次访问与第一次访问相距的时间小于1秒
数据库
- ER图,关系模式,函数依赖,1NF,2NF,3NF
判断2NF:看是否有包含函数依赖。1NF没有包含函数依赖就是2NF
判断3NF:看是否有传递函数依赖。2NF没有传递函数依赖就是3NF - REDO和UNDO
这是基于日志的数据库故障恢复。REDO即重做,UNDO即回滚。
REDO适用于已提交的事务,事务已经提交,但是由于系统故障,可能更新的数据未能完全写入数据库,因此重做该事务将数据库恢复到最新的提交状态
UNDO适用于未提交的事务,用于撤销未提交的事务操作 - 关系代数和SQL语句
没什么好说的 - 磁盘块索引运算和B+树
- 语法树优化