我的问题是,在Oracle数据库中,如果有一个5Gb表,并且SGA大小为10GB,如果我选择5Gb表格,它将适合10GB的SGA大小。
但是,如果我的表超过10GB,SGA大小为5Gb,那么选择查询如何工作,它是否显示10GB表的所有行,以及缓冲区CACHE如何工作?
如果我们有一个比SGA大的表,那么我们必须将SGA的大小重新定义为所需的大小,然后问题就解决了。
我们可以在创建数据库的同时定义SGA和PGA的大小。
缓冲缓存工作:
当我们从磁盘请求数据时,oracle至少读取一个块。即使我们只请求一行,也可能检索到同一表中的多行,这些行位于同一块中。专栏也是如此。
缓冲缓存中的块可以处于以下三种状态之一:
- 免费:当前未使用
- 锁定:当前正在访问
- 脏:块已被修改,但当前尚未写入磁盘
发生以下情况之一时,会触发块写入:
- 向数据库发出关闭命令
- 出现完整或部分检查点
- 出现恢复时间阈值,该阈值由我们再次设置
- 需要一个空闲块,在给定的时间后找不到任何空闲块(我们在这里使用LRU算法)
- 某些数据定义语言命令(DDL)
- 每三秒。还有许多其他原因,算法很复杂,每次发布oracle都会发生变化