zoukankan      html  css  js  c++  java
  • INFORMIX 结构(转)

    INFORMIX动态服务器采用的是一种多线索体系结构,这就意味着一个进程利用自己的多个线索可以同时完成多个任务,因而整个系统只需要较少的进程就足以完成DBMS的任务。 
      
      动态服务器系统由三个主要组件构成:共享内存,进程和磁盘。共享内存包括三个段:驻留段。虚拟段和消息段。驻留段主要用作磁盘数据的缓存。虚拟段主要用作内存池以支持进程及相关的会话(session)和线索。当客户与服务器利用共享内存进行通信时,消息段将用作两者之间的消息缓冲区。 
      
      系统中还包括若干构成数据库服务器的UNIX进程,称为oninit.这些进程被称为虚拟处理器(VP)(virtual processors)。每一VP隶属于某一虚拟处理类。而每一虚拟处理器类都负责完成一类特定的任务。 
      
      系统的磁盘组件由多个原始磁盘空间组成,称为chunk,chunk以页(page)为基本单位。多个chunk集合逻辑上构成了数据空间(dbspace)。数据空间用于存储数据库、表、系统信息以及物理日志和逻辑日志。一个数据空间至少包括一个chunk. 
      
      共享内存段 
      
      动态服务器的共享内存由三个段构成: 
      
      驻留段主要用作缓冲池,内含逻辑日志和物理日志的缓冲区以及其他系统数据结构。驻留段的大小主要有系统参数BUFFERS决定。 
      虚拟段主要用作内存池以支持会话和线索。根据用途的不同,内存池可以进一步分为:会话池、多线索池、字典池、存储过程池、排序池、大缓冲池以及全局池。内存池的分配和释放是动态进行的。内存池分配单位大小为8k。如果已有虚拟段耗尽,动态服务器可以根据onconfig参数再次动态申请。虚拟内存段的初始大小由参数SHMVIRTSIZE决定,其增量由参数SHMADD决定,但整个共享内存段的大小不能超过SHMTOTAL。 
      如果客户与服务器利用共享内存进行通讯,消息段将用作通讯缓冲区。每一用户连接(利用共享内存进行通讯)大致占用12K空间。用户连接的数量在参数NETTYPE中定义。 
      用户可以利用ipcs或onstat -g seg 命令来监控共享内存段的状态。
      
      虚拟处理器(Virtual Processors) 
      
      虚拟处理器类 
      oninit cpu类: 运行所有用户线索和部分系统线索(所有线索的95%) 
      oninit AIO类: 运行所有内部线索以执行I/O,日志写除外 
      oninit PIO类: 运行内部线索写物理日志 
      oninit LIO类: 运行内部线索写逻辑日志 
      oninit SHM类: 运行共享内存通讯线索 
      oninit TLI类: 运行内部TLI网络通讯线索 
      oninit SOC类: 运行内部Sockets网络通讯线索 
      oninit MSC类: 运行其它任务线索 
      oninit ADM类: 运行时钟 
      oninit OPT类: 负责管理BLOB将传至光盘子系统 
      oninit ADT类: 运行安全审计线索 
      
      数据库系统服务器由若干称为oninit的UNIX进程组成,在系统中这些进程被称为虚拟处理器(VP)。所有VP都是可执行程序oninit的实体。每一VP属于一种特定的虚拟处理器类,而不同的虚拟处理器类分别完成不同的任务。每一虚拟处理器可含的VP数量由下列参数决定:
      
      CPU     NUMCPUVPS 
      AIO     NUMAIOVPS 
      PIO     自动启动一个VP。如果物理日志被镜像,将启动两个VP 
      LIO     自动启动一个VP。如果逻辑日志被镜像,将启动两个VP 
      SHM     NETTYPE 
      TLI     NETTYPE 
      SOC     NETTYPE 
      MSC     自动启动一个VP 
      ADM     自动启动一个VP 
      OPT     STAGEBLOB被设置,然后自动启动一个VP 
      ADT     ADTMODE被设置,然后自动启动一个VP 
      
      用户可以利用PS 或者onstat -g glo命令监控VP的状态 
      
      
      线索 
      
      onstat -g ath    显示所有线索 
      
      onstat -g act    显示活动线索 
      
      onstat -g rea    显示所有就绪线索 
      
      在动态服务器中,线索是在oninit中的一段被执行的指令流。通过多线索机制,可以让一个进程同时为多个任务服务而不必生成多个OS级进程。进程oninit可以启动多个线索,各线索顺序执行,并在适当地时候把控制权转移给其它线索。在多线索进程中每一线索都有自己的执行环境,包括自己的代码空间和自己的局部变量。一个多线索进程负责多个线索间的正文切换。 
      
      在系统中,线索只能有两种存在状态:要么正在某个VP上运行,要么在某一队列排队等待。在就绪队列中保存了所有已就绪只待执行的线索的正文。一旦出现空闲VP,该VP就从就绪队列中选取一个线索执行,而选取的标准由内部的优先机制决定。 
      
      在特定的时候,当前运行的线索会把对VP的控制权转移给其它线索。有如下几种可以导致控制权的转移: 
      
      等待磁盘读写操作 
      等待应用程序的请求 
      等待获得锁或其它资源 
      将运行机会转给其它线索 
      
      一旦线索交出控制权,该线索的context就将被列入等待或睡眠队列中。所有等待某种操作的线索进入等待队列,而所有需要稍后被唤醒的线索进入睡眠队列。 
      
      磁盘组件 
      
      在动态服务器中以页(page)作为基本存储和I/0单位。页大小因机器和操作系统的不同而不同,一般为2k,也可能为4k,用户无法改变页大小。 
      
      分配给系统使用的连续磁盘空间的单位称为chunk。chunk由多个页构成。它是一个典型的UNIX原始设备。chunk的大小由系统管理员设定。 
      数据空间(dbspace)是多个chunk的逻辑集合。每一数据空间至少包括一个chunk。数据库和表创建在指定的数据空间上。系统必须至少包括一个数据空间: root dbspace。在该空间中存储着关于系统的信息。 
      物理日志(physical log)由连续的磁盘空间构成,其存储着共享内存缓冲区中所有已修改的数据页(但尚未写入磁盘中)被修改前的映象。因而物理日志主要用于快速恢复。只有当数据页在首次被修改时,系统才会将其映象写入物理日志。 
      逻辑日志(logical logs)也是由连续的磁盘空间构成,其存储着事务记录、DDL语句和checkpoint记录。由管理员设定逻辑日志的数目。系统循环使用逻辑日志。在系统第一次初始化时,物理日志和逻辑日志都自动建立在root dbspace上。

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/SuperXJ/p/2334825.html
Copyright © 2011-2022 走看看