OWI - db file parallel read/write 等待事件

本文介绍了Oracle数据库中dbfileparallelread及dbfileparallelreadwrite两个等待事件的特点与应用场景,包括它们如何在数据库恢复操作期间产生,以及与DBWR进程的关系。
一 .  db file parallel read
   db file parallel read等待事件不与任何操作相关哦,既不是并行 DML操作也不是并行查询,而是在进行数据库恢复操作期间,当作为恢复的一部分而需要更改的数据块从数据文件中并行读取时产生这个等待的。当一个进程从一个或多个数据文件读取多个非连续的单独数据块时也产生该事件。
 
 等待参数:
   db file parallel read 的等待参数
   p1 ,读取文件的号码
   p2 ,读取的块总数
   p3 , i/o请求的总数

 等待时间
   会话会一直等到所有的i/o操作完成,没有超时


二  . db file parallel read write
     db file parallel read write和上面一样,不与任何操作相关哦,既不是并行 DML操作也不是并行查询。该事件属于DBWR进程,该进程是向数据文件写入脏数据的唯一进程,阻塞者是操作系统的i/o子系统,这会对i/o子系统造成影响,因为写入操作可能会影响从同一磁盘进行读取操作的会话的读取时间。
      DBWR将一组脏数据编译成“写入批量”,它利用多个i/o请求利用“写入批量”写入数据文件,然后以此事件等待直到i/o请求都完成,但是,当使用异步i/o时,DBWR不等待整个批量写入的完成,在将空闲缓冲区回到LRU链,以使其在可用之前,仅等待一定百分比的批处理完成



等待参数:
   db file parallel read 的等待参数
   p1 ,读取文件的号码
   p2 ,读取的块总数
   p3 , i/o请求的总数

 等待时间
   会话会一直等到所有的i/o操作完成,没有超时


更加详细的内容,可以阅读这篇文章,需要mos账号
Understanding and Tuning Buffer Cache and DBWR (文档 ID 62172.1)

后期,我也会把这篇文章整理出来

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30430420/viewspace-1788931/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30430420/viewspace-1788931/

#include <STC15F2K60S2.H> #include <intrins.h> // 引脚定义 #define OWI_PIN P32 // 单总线数据引脚 #define TM1637_CLK P30 // TM1637时钟线 #define TM1637_DIO P31 // TM1637数据线 #define KEY_ADD P34 // 加按键 #define KEY_SUB P35 // 减按键 unsigned char data // 存储3字节原始数据 unsigned long value // 时序参数 (1T=25us) #define T_CYCLE 600 // 25us对应的机器周期数(24MHz) #define WAKE_TIME 8 // 0.2ms唤醒时间(200us/25us=8T) #define START_HIGH 2 // 开始信号高电平时间(2T) #define START_LOW 2 // 开始信号低电平时间(2T) // 全局变量 unsigned long pressure = 300; // 默认气压值(1013.25hPa) unsigned char display_buf[4]; // 显示缓冲区 // 精确延时函数 void delay_t(unsigned char t) { unsigned int i; while(t--) { i = T_CYCLE; while(i--); } } // TM1637写字节 void tm1637_write_byte(unsigned char dat) { unsigned char i; for(i=0; i<8; i++) { TM1637_CLK = 0; TM1637_DIO = (dat & 0x01); // 发送最低位 dat >>= 1; delay_t(1); TM1637_CLK = 1; delay_t(1); } } // TM1637开始信号 void tm1637_start(void) { TM1637_CLK = 1; TM1637_DIO = 1; delay_t(1); TM1637_DIO = 0; TM1637_CLK = 0; delay_t(1); } // TM1637结束信号 void tm1637_stop(void) { TM1637_CLK = 0; TM1637_DIO = 0; delay_t(1); TM1637_CLK = 1; delay_t(1); TM1637_DIO = 1; delay_t(1); } // TM1637显示函数 void display_pressure(unsigned long value) { unsigned char digits[4]; unsigned char i; value /= 10; // 转换为xx.x格式 // 分离数字位 digits[0] = value % 10; // 个位 digits[1] = (value/10) % 10; // 十位 digits[2] = (value/100) % 10; // 百位 digits[3] = (value/1000) % 10; // 千位 // 数码管编码 (带小数点) display_buf[0] = digits[0]; // 个位 display_buf[1] = digits[1] | 0x80; // 十位+小数点 display_buf[2] = digits[2]; // 百位 display_buf[3] = digits[3]; // 千位 // 发送显示数据 tm1637_start(); tm1637_write_byte(0x40); // 写数据命令 tm1637_stop(); tm1637_start(); tm1637_write_byte(0xC0); // 地址命令 for( i=0;i<4; i++) { tm1637_write_byte(display_buf[i]); } tm1637_stop(); tm1637_start(); tm1637_write_byte(0x8F); // 显示控制(最大亮度) tm1637_stop(); } // 奇偶校验函数 (偶校验) unsigned char parity_check(unsigned char dat) { { unsigned char cnt = 0; unsigned char i=0; for(i=0; i<8; i++) { if(dat & (1<<i)) cnt++; } return (cnt % 2) == 0 ? 0 : 1; } } // 唤醒传感器并读取数据 unsigned long read_pressure(void) { unsigned char i, j; unsigned char data[3] = {0}; // 存储3字节原始数据 unsigned long value = 0; // 唤醒传感器 (拉低200us) OWI_PIN = 0; // 拉低总线 delay_t(WAKE_TIME); // 保持低电平200us OWI_PIN = 1; // 释放总线 // 等待传感器响应 (超时检测) for(i=0; i<200; i++) { delay_t(1); if(!OWI_PIN) break; // 检测到传感器响应 } if(i >= 200) return 0; // 超时返回0 // 接收开始信号 (高2T+低2T) while(OWI_PIN); // 等待高电平 delay_t(START_HIGH); while(!OWI_PIN); // 等待低电平 delay_t(START_LOW); // 接收3字节数据 (24位) for(i=0; i<3; i++) { for(j=0; j<8; j++) { while(!OWI_PIN); // 等待高电平 // 判断位类型 delay_t(1); // 延时1T if(OWI_PIN) { // 高电平持续3T为1 delay_t(2); // 再等2T data[i] |= (1<<j); // 设置数据位 while(OWI_PIN); // 等待低电平 delay_t(1); // 跳过1T低电平 } else { // 高电平持续1T为0 delay_t(3); // 等待剩余3T低电平 } } // 接收校验位并验证 while(!OWI_PIN); // 等待高电平 delay_t(1); // 延时1T if(OWI_PIN) { // 高电平持续3T为1 delay_t(2); if(parity_check(data[i]) != 1) return 0; // 校验失败 while(OWI_PIN); delay_t(1); } else { // 高电平持续1T为0 delay_t(3); if(parity_check(data[i]) != 0) return 0; // 校验失败 } } // 组合24位数据 value = ((unsigned long)data[2] << 16) | ((unsigned long)data[1] << 8) | data[0]; return value; } // 按键处理 void key_process() { static unsigned char key_flag = 0; if(!KEY_ADD) { if(!key_flag) { key_flag = 1; pressure += 10; // 增加0.1hPa display_pressure(pressure); } } else if(!KEY_SUB) { if(!key_flag) { key_flag = 1; pressure -= 10; // 减少0.1hPa display_pressure(pressure); } } else { key_flag = 0; } } // 主函数 void main() { unsigned long raw_pressure; // 初始化IO P3M0 = 0x00; // 设置P3为准双向口 P3M1 = 0x00; OWI_PIN = 1; // 总线默认高电平 // 显示初始值 display_pressure(pressure); while(1) { // 读取传感器数据 raw_pressure = read_pressure(); if(raw_pressure != 0) { pressure = raw_pressure; // 更新气压值 display_pressure(pressure); } // 按键处理 key_process(); // 延时200ms delay_t(8000); } }Rebuild started: Project: main Rebuild target 'Target 1' assembling STARTUP.A51... compiling mian.c... mian.c(11): error C141: syntax error near 'unsigned' mian.c(19): error C129: missing ';' before 'unsigned' Target not created. Build Time Elapsed: 00:00:00
最新发布
12-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值