当前位置: 首页 > news >正文

优化06-物理读和IO

物理读和IO

在Oracle中,物理读是将磁盘中的数据块(block),读取到内存中的过程,一个块的读取就是一次物理读。物理读不等于IO数,因为Oracle中对磁盘中连续的块可以使用多块读,由db_file_multiblock_read_count 参数控制,一般不建议修改。

SQL> show parameter db_file_multi      NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count        integer     128

这里,db_file_multiblock_read_count为默认的128个数据块。

物理读效率

对于单块读,IO的响应时间就是一个物理读的响应时间,因此IO响应时间直接影响物理的的效率。

一般影响IO响应时间的有以下指标:

  • 磁盘类型:机械盘和固态盘,而机械盘的转速直接影响IO读取速率,机械盘的转速由rpm表示,常见的机械盘的rpm有7500、15000。
  • 磁盘接口:常见机械盘的接口有STAT、SAS等,常见的固态盘接口有PCIe、NVMe等,不同接口支持最大速度不一样。
  • IO类型:单块读/多块读、顺序读/随机读。

对于机械磁盘,一次IO的响应时间一般为4ms-8ms。

单块读和多快读

#清空buffer cache 确保全部数据物理读
alter system flush buffer_cache
SQL> set autotrace traceonly;
#开启全量统计
SQL> alter session set statistics_level=all;
#查看全表扫描的统计信息
SQL> select * from tab2;Execution Plan
----------------------------------------------------------
Plan hash value: 2156729920--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      | 72729 |  9446K|   396   (1)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| TAB2 | 72729 |  9446K|   396   (1)| 00:00:01 |
--------------------------------------------------------------------------Statistics
----------------------------------------------------------131  recursive calls1  db block gets1578773  consistent gets361722  physical reads184  redo size1278647716  bytes sent via SQL*Net to client13654258  bytes received via SQL*Net from client1241243  SQL*Net roundtrips to/from client10  sorts (memory)0  sorts (disk)18618624  rows processed#再次清空buffer cachealter system flush buffer_cache;#查看索引扫描的统计信息select /*+ index(t2,idx_objid) */ * from tab2 t2 where object_id>0;Execution Plan
----------------------------------------------------------
Plan hash value: 2653761239-------------------------------------------------------------------------------------------------| Id  | Operation                           | Name      | Rows  | Bytes | Cost (%CPU)| Time     |-------------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT                    |           | 72728 |  9446K|  9331K(1)| 00:06:05 ||   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| TAB2      | 72728 |  9446K|  9331K (1)| 00:06:05 ||*  2 |   INDEX RANGE SCAN                  | IDX_OBJID |  9309K|       | 20641 (1)| 00:00:01 |-------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - access("OBJECT_ID">0)Statistics
----------------------------------------------------------1  recursive calls0  db block gets19863223  consistent gets402506  physical reads0  redo size394392655  bytes sent via SQL*Net to client13654071  bytes received via SQL*Net from client1241226  SQL*Net roundtrips to/from client0  sorts (memory)0  sorts (disk)18618368  rows processed#通过查询v$sql 确定两个SQL的SQL_ID 为fvu2sdrakwgfn和4kxudxqvgn7q7#查看逻辑读和IO次数SQL> select sql_id,disk_reads,direct_reads,physical_read_requests from v$sqlstats where sql_id in('fvu2sdrakwgfn','4kxudxqvgn7q7');SQL_ID        DISK_READS DIRECT_READS PHYSICAL_READ_REQUESTS
------------- ---------- ------------ ----------------------
4kxudxqvgn7q7     402506            0                 402506
fvu2sdrakwgfn     361722       361528                   3045#DISK_READS:物理读
#DIRECT_READS:直接路径读
#PHYSICAL_READ_REQUESTS:物理请求次数,也就是IO次数由此可以发现单块读一般是索引扫描,而多块读是全表扫描。

思考:为什么通过IOSTAT查看磁盘IO只有4MB/s,但是磁盘就已经100% busy(util%)了呢?

如果当前IO多为单块读8K,要读取4M数据,IOPS为(4192/8K)=500,而一般机械磁盘最大IOPS只能达到250左右,所以磁盘很繁忙,积压下来会100% busy;

如果当前IO对多块读,最大一次IO可达128*8k=1M,读取4M数据IOPS为4,所以磁盘会很空闲。

http://www.xdnf.cn/news/760951.html

相关文章:

  • Markdown笔记
  • 81、使用DTU控制水下灯光控制
  • 商品模块中的多规格设计:实现方式与电商/ERP系统的架构对比
  • [AD] Reaper NBNS+LLMNR+Logon 4624+Logon ID
  • GNSS终端授时之四:高精度的PTP授时
  • PINN for PDE(偏微分方程)1 - 正向问题
  • io流2——字节输入流,文件拷贝
  • Docker容器创建Redis主从集群
  • 卢昌海 | 质量的起源
  • 基于FashionMnist数据集的自监督学习(生成式自监督学习VAE算法)
  • [蓝桥杯]螺旋折线
  • 2024 CKA模拟系统制作 | Step-By-Step | 8、题目搭建-创建 Ingress
  • win32相关(互斥体)
  • 大模型赋能低空经济:从技术突破到应用场景拓展
  • 【C语言练习】077. 理解C语言中的嵌入式编程
  • Python实例题:Python3实现图片转彩色字符
  • 【Hexo】4.Hexo 博客文章进行加密
  • python汉语编程,将关键字与文言文对应
  • Claude 4 升级:从问答助手到任务执行者 | AI大咖说
  • Python入门手册:类和对象
  • Spring是如何实现属性占位符解析
  • 如何下载python的第三方类库
  • Day 36训练
  • Linux epel-release 详解
  • 多线程——定时任务ScheduledThreadPoolExecutor用法
  • 深度学习---负样本训练
  • 字符串相关的方法有哪些?
  • 基于LLM的智能客服系统开发全流程:技术架构、落地挑战与行业实践
  • 智能体觉醒:AI开始自己“动手”了-自主进化开启任务革命时代
  • 【强化学习哲学 Day 1】Q-Learning - 在不确定中寻找确定