当前位置:网站首页>GBase 8s中IO读写方法

GBase 8s中IO读写方法

2022-08-11 05:21:00 蜻蜓队镸

GBase 8s读写磁盘采用两种方式。

  • 内核IO(Kemal AIO)–通过操作系统来进行非阻塞的磁盘读写操作,传统的读写方式中,当数据要写到磁盘或者从磁盘读数据时,进程将处于等待的状态,内核IO代替了传统的这种方式,数据库递交了读写请求之后可以继续处理,当IO结束之后,数据库将被通知。需要浏览machine notes文件了解内核IO在你的操作系统上是否可以使用,并且只有裸设备才可以使用KAIO.
  • 异步IO–数据库通过AIO虚拟处理器完成磁盘读写操作。当没有配置KAIO时,AIO VP会生效。另外,熟文件只能通过AIO VPs来完成读写操作。

image.png
1.通过AIO VPs完成磁盘读写操作
(1)在CPU VP上的sqlexec线程解析和优化select语句
(2)sqlexec线程尝试从缓存池中读取满足查询的页面
(3)如果sqlexec线程在缓存池中找不到所需要的页面,它会放一个AIO的请求到AIO VP的队列中,目的是要访问磁盘中的信息
(4)sqlexec线程会让位于就绪队列中的另外一个线程,把自己放到等待队列中,等待AIO VP完成读页面的请求。
(5)AIO VP从磁盘中读出数据,并把它放到缓存池中。
(6)一旦读操作完成,sqlexec线程将被到就绪队列中,因此可以继续执行select语句。
(7)sqlexec线程从缓存池中抓取了数据返回给客户端。


image.png
2.内核IO
KAIO是由操作系统内核协调完成的,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时,操作系统的上下文切换会减少,从而可以提高性能。

原网站

版权声明
本文为[蜻蜓队镸]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_37004539/article/details/126124955