tune 06 Database Configuration and I/O Issues

本文介绍了Oracle数据库性能优化的关键策略,包括合理分配表和索引的位置以减少I/O冲突、调整redologfile和data文件的放置策略、设置合适的DB_FILE_MULTIBLOCK_READ_COUNT参数以及管理检查点等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

image

1. 尽量读内存中的数据

2. 尽量减少IO矛盾, 即多个任务同时读写一块磁盘

image

image

image

image

image

表和索引要尽量分开在不同磁盘, 因为表和它的索引是同时读取的, 所以分磁盘后, 对性能会提高.

物理磁盘的调优相关

redo log file 放在最快的磁盘上, data 放在容量大, 速度慢一点也没关系

表和索引是同时读取的,所以表和索引分开磁盘比较好

image

image

image

image

image

image

image

image

image

FTS 就是全表扫描的意思

并不是所有时刻都要避免全表扫描,通常来说需要避免不必要的全表扫描

一次性读取多少块这个参数的设置(DB_FILE_MULTIBLOCK_READ_COUNT),是需要和操作系统配合的,必须在操作系统准许的范围内

是server process 去读这个磁盘的块, 所以可以设置session 级别来设置这个参数, 如果你要设置这个参数, 那么就在操作系统准许的情况下设置最大值.

image

image

image

image

image

image

image

一般都是 incremental checkpoints 这种情况, 因为 full checkpoint 很费时, 这样虽然是提高了效率, 但是这个有个问题就是如果数据库出现问题, 那么recovery 时就要费更多时间. 那么这种情况是一般DBWn 会慢慢的或者数据库空闲时将实际数据写到磁盘上.

image

ALTER SYSTEM CHECKPOINT; 全检查点

Tablespace 只是把相关的 tablespace 的数据写到磁盘上.

image

image

fast_start_mttr_target 这个参数比较重要, 断电到正常工作恢复所需要的时间, 这个参数是recovery database 的秒数, 比如 600秒, 你设定这个参数以后, oracle会自动调整其他指标来满足用户的要求.

image

LGWR 写的信息从 group1 到 group2 的同时, archivelog 将 group1 中的内容归档, 所以这里有个时间同步利用. 另外, 当 group1 要被覆盖时, 要确定它所对数据库做的修改而触发的 checkpoint 是否完成, 如果没有完成表示DBWn 还没有把信息写到磁盘, 这时候 group1 就不能被覆盖, 那么这时候数据库就hang在这了.

image

image

image

image

image

转载于:https://www.cnblogs.com/moveofgod/p/3245106.html

<think>好的,用户现在问的是如何判断磁盘I/O延迟。之前他提到系统操作卡顿但日志监控不卡,现在可能是在深入排查资源瓶颈中的磁盘I/O问题。我需要回顾之前的回答,确保内容一致,同时更详细地解释如何判断磁盘I/O延迟。 首先,用户可能不太熟悉Linux命令,需要给出具体的命令和解读方法。比如用iostat,但要解释每个参数和指标的意义,比如await、svctm、%util这些。此外,用户可能需要了解其他工具,比如iotop、sar,或者更高级的工具如blktrace,这样他们可以选择适合自己的方法。 另外,用户可能遇到不同场景,比如物理机、虚拟机或云环境,需要指出不同环境下的注意事项。比如云环境中可能受到共享磁盘的影响,这时候需要看AWS的CloudWatch或者其他云服务提供的监控指标。 还要考虑用户的实际操作步骤,是否需要分步骤说明,从基础命令到高级分析,逐步深入。比如先使用iostat快速查看,如果发现问题再用更详细的工具进一步排查。 用户可能还想知道哪些指标是关键的阈值,比如await一般超过多少算有问题,%util达到多少表示磁盘繁忙。这些具体的数值可以帮助用户快速判断。 此外,结合之前的案例,比如MySQL的binlog写入问题,可以举一个实际例子,说明如何通过这些工具发现并解决问题,这样用户更容易理解。 还要注意用户的潜在需求,比如他们可能不仅想知道如何判断延迟,还想知道如何解决。虽然问题没有直接问解决方法,但可能在回答中简要提及,比如调整IO调度器、优化应用写入模式等,这样回答会更全面。 最后,确保语言通俗易懂,避免太多专业术语,或者在必要时解释术语,比如解释什么是await,什么是IOPS,这样用户即使没有很深的技术背景也能理解。</think>判断磁盘I/O延迟的完整方法体系(附关键指标阈值): --- **一、基础诊断工具** 1. **iostat黄金参数法** ```bash $ iostat -xmdz 1 # -x 扩展统计 -m MB单位 -d 设备详情 -z 过滤空闲设备 ``` **核心指标解读**: - `await` = (读写等待时间)/IO次数 *机械盘 >15ms | SSD >5ms* 即异常 - `svctm` = 磁盘处理IO的平均时间 *该值持续接近await说明无排队* - `%util` = 磁盘繁忙度百分比 *>70% 表示接近饱和* *案例:MySQL写入卡顿时,发现`await=320ms`,`%util=98%`,定位到RAID卡缓存故障* 2. **进程级IO监控** ```bash $ iotop -oPa # -o 只显示活跃进程 -P 只显示进程 -a 累计统计 ``` - 重点关注`SWAPIN`和`IO>`列,>10MB/s的进程需审查 --- **二、高级追踪手段** 1. **blktrace全链路追踪** ```bash $ blktrace -d /dev/sda -o trace | blkparse -i trace ``` **关键阶段耗时分析**: ``` Q2S: 从IO进入队列到开始服务的时间(调度延迟) S2C: 磁盘实际服务时间(物理延迟) Q2C: 总延迟 = Q2S + S2C ``` *当Q2S占比>30%时,说明存在排队瓶颈* 2. **BCC工具集实时分析** ```bash $ /usr/share/bcc/tools/biolatency -m Tracing block I/O... Hit Ctrl-C to end. usecs : count distribution 0 -> 1 : 0 | | 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 2 |**** | 16 -> 31 : 3 |******* | 32 -> 63 : 6 |*************** | 64 -> 127 : 12 |****************************** | 128 -> 255 : 24 |*******************************************************| ``` - 直方图显示64-127μ秒的IO占主流(SSD正常范围) --- **三、云环境特殊考量** 1. AWS EBS监控要点: - `VolumeQueueLength` > 64 表示排队严重 - `BurstBalance` < 80% 时性能会下降 2. 阿里云云盘: ```bash # 查看预配置IOPS利用率 $ aliyun ecs DescribeDisks --DiskId=d-xxx ``` - 当`IOPSConsumption` > 90% 需扩容 --- **四、性能基线参考值** | 存储类型 | 随机读延迟 | 顺序写延迟 | |---------------|-----------|------------| | 7200转SATA | 8-12ms | 120MB/s | | NVMe SSD | 150-250μs | 2.5GB/s | | AWS gp3 | <3ms | 1000MB/s | | Azure Premium | <2ms | 750MB/s | --- **五、根因诊断流程** 1. 区分应用模式: ```bash # 查看读写比例 $ iostat -x 1 | grep -v "^$" | awk '/sd[a-z]/ {print $6/$5}' ``` - 随机读写密集型(OLTP)关注IOPS - 顺序读写型(日志服务)关注吞吐量 2. LVM层检查: ```bash $ dmsetup status stripe-vol: 0 209715200 striped 3 64 8:16 384 8:32 384 8:48 384 ``` - 条带不均匀会导致热点盘 3. 文件系统检测: ```bash $ tune2fs -l /dev/sda1 | grep 'Filesystem features' Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize ``` - `has_journal`开启会增加约10%写开销 --- **典型案例**:某视频网站转码集群出现周期性卡顿: 1. 通过`$ pidstat -d 1`发现ffmpeg进程IO占用率达98% 2. `$ iostat -x 1`显示`%util`持续100%,但`await`波动在5ms-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值