模式:数据库对象的集合
表空间 → 簇 → 页 → 数据
- 表空间:是数据库的 “大文件夹”,逻辑上分组数据。隔离数据,方便管理和备份。
- 簇:是硬盘上的 “小册子”,物理上连续存储一组页。固定大小,简化硬盘读写操作。
- 页:是数据的 “集装箱”,固定大小,存储实际记录。优化物理存储,让经常一起访问的数据更快被找到
比如:
- 你在数据库里创建了一个 用户表,存了 1000 条记录:
- 这个表属于某个 表空间(比如
<font style="color:rgb(0, 0, 0);">USERS</font>
)。 - 表的数据被拆分成 10 个 页(每页存 100 条记录)。
- 这 10 个页被分配到 2 个 簇 中(每个簇 8 页,其中一个簇只用了 2 页)。
- 这个表属于某个 表空间(比如
重点:BUFFER9会修改,sql缓冲区
如何查看
内存结构
内存结构
共享内存池
其它缓冲区不够用时调用,可以一直扩充
查看内存池情况
数据缓冲区(buffer)
缓冲区就是数据页,参数是buffer,单位是MB
执行一条sql,在buffer里去找有没有对应的记录,有的话就返回客户端,
没有的通过IO线程将磁盘对应的数据页加载到buffer里再返回给客户端
通过三条链表管理数据页
内存满了不会找共享内存池申请内存,会淘汰lru链未使用的数据页
数据库4个类型
noraml:满了就淘汰很少使用的数据页
keep(管理表空间):表放某个表空间,表空间放在buffer里,就不会被淘汰
中间两个,自动管理
大小建议:
交易型系统:物理内存的40-60%
分析型:60-80%
修改缓冲区内存大小(重点)
修改数据缓冲区大小为800M,修改参数命令(重启生效)
重启数据库,重新连接实例
重做日志缓冲区
单位是页,缓存的是重做日志的信息
满了会向服务器申请内存
当事务提交和执行检查点时,会触发缓冲区的内容写到日志文件中
+磁盘区满,触发缓冲区中的页更新到磁盘的数据文件中
当DML语句执行后,先写进缓冲区,当提交后会写到磁盘的文件中
SQL缓冲区
单位是MB,用来存储包信息(PKG),执行计划和结果缓存的区域
3条路径,内存不够时会找内存池申请内存
查看方式
字典缓冲区
字典:数据库的运行信息,单位MB
查看方式
其它内存池,HASH区
从操作系统来申请内存使用,需要时创建,用完就销毁
考点:参数,兼容模式,密码策略,缓冲区大小
线程结构
单进程多线程
监听线程
查看全部线程列表
IO线程
处理缓冲区的数据页,当执行查询语句时,先在缓冲区找,如果没有找到对应数据页,那就通过IO线程去磁盘的数据文件的数据页上找,然后通过IO线程加载到缓冲区返回客户端。
修改后,数据页不一致,那就是脏页,那需要IO线程把缓冲区的脏页更新到磁盘的数据文件
1、当缓冲区满了
2、当正常关闭的时候
3、到检查点的时候
日志刷新线程
缓冲区的记录更新到重做日志中(也叫刷盘)
当事务提交和执行检查点,缓冲区的内容会更新到磁盘的重做日志中
日志归档线程
redo日志在覆盖前,拷贝实时的redo日志到归档路径下
日志重做线程
异常关闭时,再次启动时,系统自动进行实例恢复,通过redo和undo信息恢复到一致性的状态,事务提交了通过redo信息前滚重新做一遍,事务没提交,事务在undo日志中。
如果自动无效,则需要手动来备份恢复
调度线程
工作线程