在Oracle数据库中,执行计划的统计信息描述了SQL执行期间的资源消耗情况。以下是各项统计含义:
1. **recursive calls**: 递归调用次数。指的是Oracle服务器在解析和执行SQL语句过程中进行的递归SQL调用次数。递归调用可能发生在递归SQL、动态SQL、触发器、存储过程等场景。
2. **db block gets**: 数据库块读取次数(缓冲区缓存命中)。这是从数据库缓冲缓存(buffer cache)中读取数据块的次数。如果该值为0,说明所有需要的数据都在内存中,不需要从磁盘读取。
3. **consistent gets**: 一致性读取次数。Oracle为了保证事务的一致性,对数据进行一致性读取。当一个事务读取数据时,读取的是某一时间点的数据快照。这个数值较高说明在执行SQL时有很多对数据块的读取操作。
4. **physical reads**: 物理读取次数。指从磁盘直接读取数据块到数据库缓冲缓存中的次数。这个数值较高可能表示SQL执行期间I/O压力较大,或者相关数据在内存中的缓存效果不佳。
5. **redo size**: 重做日志大小。在本次SQL执行过程中产生的重做条目大小。此处为0,表示此次执行没有产生重做日志记录或者产生的记录很小。
6. **bytes sent via SQL*Net to client**: 发送给客户端的网络传输字节数。这是Oracle服务器通过网络发送给客户端应用程序的数据总量。
7. **bytes received via SQL*Net from client**: 从客户端接收到的网络传输字节数。这是Oracle服务器从客户端应用程序接收的数据总量。
8. **SQL*Net roundtrips to/from client**: SQL*Net往返客户端次数。表示执行SQL过程中与客户端的交互次数,每次交互可能涉及查询、提交事务、获取结果等操作。
9. **sorts (memory)**: 内存排序次数。表示在内存中进行排序操作的次数,不需要使用临时表空间进行排序。
10. **sorts (disk)**: 磁盘排序次数。表示在临时表空间中进行排序操作的次数,当内存不足以完成排序时,会写入磁盘。此处为0,说明所有的排序都在内存中完成。
11. **rows processed**: 处理的行数。这是SQL执行过程中实际处理过的行数,不一定等于最终返回给客户端的行数,特别是在有WHERE条件、GROUP BY、JOIN等操作时。