GBase8s中的IO读写方法

GBase8s读写磁盘采用下面的两种方式之一。

内核 IO(Kernal AIO)——通过操作系统来进行非阻塞的磁盘读写操作,传统的读写方式中,当数据要写到磁盘或者从磁盘读数据时,进程将处于等待的状态,内核IO代替了传统的这种方式,数据库递交了读写请求之后可以继续进行处理,当IO结束之后,数据库将被通知。需要浏览machine notes文件了解内核IO在你的操作系统上是否可以使用,并且只有裸设备才可以使用KAIO。

异步IO ——数据库通过AIO虚处理器完成磁盘读写操作。当没有配置KAIO时, AIO VP会生效。另外,熟文件只能通过AIO VPs来完成读写操作。

1.通过AIO VPs完成磁盘读写操作

为了显示不同VPs上的线索如何协同工作,如图所示,显示了一个select语句如何被数据库处理。

(1)在CPU VP上的sqlexec线索解析和优化select语句。

(2)sqlexec线索尝试从缓冲池中读取满足查询的页面。

(3)如果sqlexec线索在缓冲池中找不到所需要的页面,它会放一个AIO的请求到AIO VP的队列中,目的是要访问磁盘中的信息。

(4)sqlexec 线索会让位于就绪队列中的另外一个线索,把自己放到等待队列中,等待AIO VP完成读页面的请求。

(5)AIO VP 从磁盘中读出数据(5a),并把它放到缓冲池中(5b)。

(6)一旦读操作完成,sqlexec线索将被放到就绪队列中,因此可以继续执行select语句。

(7)sqlexec线索从缓冲池中抓取了数据返回给客户端。在数据库中,每个chunk有一个AIO请求队列。

2.内核IOKAIO是由操作系统内核协调完成的,KAIO调用通过kio线索来处理,当第一个裸设备被打开时kio线索会启动,除了AIO VP完成的那些步骤以外,如图所示,使用KAIO还会发生下面的一些操作。

(1)当一个用户连接请求写或读时,这个请求会放到AIO队列中。

(2)kio 线索读到这些请求,然后递交一个消息给操作系统去完成磁盘读写的操作,此时,kio已经完成了任务。

(3)操作系统负责完成缓冲池和磁盘之间的I/O操作。

(4)CPU VP发现IO操作已经完成。

(5)CPU VP把线索放到就绪队列中。每个CPU VP会有一个AIO队列和一个kio线索,由于sqlexec线索也是在CPU VP上,当执行内核I/O时,操作系统的上下文切换会减少,从而可以提高性能。

每个CPU VP会有一个AIO队列和一个kio线索,由于sqlexec线索也是在CPU VP上,当执行内核I/O时,操作系统的上下文切换会减少,从而可以提高性能。

3.配置AIO虚处理器如果数据库所有的chunk都是使用裸设备,并且你的操作系统支持内核I/O,那么AIO VP所做的工作不多,大部分磁盘读写是由操作系统来完成的,配置1到2个AIO VP已经足够,如图所示。

如果数据库的有些chunk使用了熟文件,刚开始时可以为每个包含熟文件的磁盘配置一个AIO VP,这样AIO VP可以并行进行磁盘操作。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值