南大通用GBase 8s数据库读写磁盘采用下面的两种方式之一。
● 内核 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线索从缓冲池中抓取了数据返回给客户端。