Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103703673
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-03-24 21:54:46

动态服务器的系统结构

      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上。

 

九 初始化Informix动态服务器

     步骤:

             onstat工具

              为每一台机器安装软件

              检查$INFOMRIXDIR/release目录下的release notes

              配置推荐的核心配置参数

              准备磁盘空间

              设置所需环境变量

              创建一个sqlhosts文件

              在$INFORMIXDIR/etc目录下设置onconfig文件

              利用oninit工具初始化online      

      初始化动态服务器的步骤如上所示。

      用户在初始化系统签应该执行阅读$INFORMIXDIR/release目录下的release note。在该文件中包括了许多与操作系统、内核参数以及系统更新相关的重要信息。

      机器在出厂时已预置了核心配置参数,但如果用户自己需要,则需要进一步调整这些参数。关于核心参数配置请检查release notes。

      为系统准备磁盘空间时,必须首先正确设置如下权限:

      chmod 660 device_name

      chgrp informix device_name

      chown informix device_name

      我们建议用户最好能为原始设备建立链接文件,原因有二个:

      1.可以利用链接命令描述设备使用信息,例如那一个chunk在使用那一个设备;

      2.便于恢复。

      在UNIX系统中利用ln命令建立链接

          环境变量

            INFORMIXDIR     设置为informix产品所在的目录

            PATH        包括INFORMIXDIR/bin

            ONCONFIG      设置onconfig文件名

            INFOMRIXSERVER   设为维onconfig参数中的DBSERVERNAM值

            PSORT_NPROCS     设置为物理CPU VPs数

      我们推荐所有的informix和数据库用户使用korn shell。注册环境必须在注册时自动设置。一般来说,所有环境变量在.profile中设置。我们希望所有系统用户使用同一注册文件。Informix必须设置的环境变量如上所示。

      连接三角

      客户与动态服务器的连接包括三个部分。环境变量INFORMIXSERVER是指向通讯配置文件内某一条目的指针。通讯配置文件的默认路径和名称为 

        $/INFOMRIXDIR/etc/sqlhosts。该文件的第一个字段包含了配置参数DBSERVERNAME或DBSERVERALIASES的值,其中DBSERVERNAME只能有一个,而用户可以通过环境变量INFORMIXSQLHOSTS改变通讯配置文件的存储路径及名称。

      通讯配置文件(sqlhosts)的记录格式如下:

      dbservername netttype hostsname servicename

      各字段的含义如下:      

        dbservername     onconfig 文件中的DBSERVERNAME或DBSERVERALIASES

        nettype                             

                      对于共享内存连接来说是onipcshm      

                      对于TLI TCP/IP连接来说是ontlitcp

                      对于sockets TCP/IP连接来说是onsockcp

         hostname       机器的主机名

        servicename     文件/etc/services中的服务名,对于共享内存连接方式无用

          系统初始化

            #root dbspace配置

            ROOTNAME       rootdbs       #root dbspace名

            ROOTPATH       /dev/online_root   #构成root dbspace的设备路径

            ROOTOFFSET      0          #root dbspace设备的偏移量(Kbyte)

            ROOTSIZE       50000         #root dbspace大小(Kbyte)

            #磁盘镜像配置参数  

            MIRROR        0           #镜像标志(YES=1,NO=0)

            MIRRORPATH                 #镜像root dbspace设备额路径

            MIRROROFFSET     0          #镜像root dbspace设备的偏移量

            #物理日志配置

            PHYSDBS       rootdbs       #物理日志(dbspace)的位置

            PHYSFILE       1000         #物理日志文件大小(Kbytes)

            #逻辑日志配置

            LOGFILES       10          #逻辑日志文件数量

            LOGSIZE       3000         #逻辑日志大小(Kbyte)             

      动态服务器的初始化包括两部分:磁盘初始化,创建root dbsapce。root dbspace中有12页专门用于存放系统信息,称为系统保留页。剩余空间中包含被称为chunk 

        free list的页,50页tblspace ,4页database tablespace。在root dbspace中还存储sysmaster和sysutils数据库。

      在系统初始化时,物理日志和逻辑日志都自动建立在root dbspace中。逻辑日志的最优大小很难确定,因为与各系统的事务活动状况紧密相关。刚开始时可以将其大小设置为3至5MB,如果不够可以随时追加。

      在初始化时应创建一个较小的物理日志。因为在DBMS系统中,尤其在OLTP环境下,数据库的操作非常频繁,日志中必须记录大量的信息,所以用户最好能将多个日志分布在不同的设备上。有一种非常简单的方法:既在系统初始化完毕后,将物理日志移至其它设备,并扩大其空间。一般来说物理日志大一些为好(300M-500M),这样可以避免频繁地初始化检查点(物理日志75%满时进行)。

      请一定牢记,root dbspace的位置和初始chunk的大小是无法改变的,除非重新初始化系统,但这将清除现有系统中的所有信息。

      root dbspace的镜像功能可以在初始化时打开也可以在以后打开。      

      消息和磁带参数

            #诊断

            MSGPATH       /dev/informix/online.log   #系统消息日志文件路径

            CONSOLE      /dev/console          #系统控制台消息路径

            ALARMPROGRAM    /usr/informix/log_full.sh   #报警程序路径及名称

            #系统归档磁带设备

            TAPEDEV       /dev/null           #磁带设备路径

            TAPEBLK       16              #磁带块大小(Kbytes)

            TAPESIZE       10240             #磁带最大容量(Kbytes)

            #日志归档磁带设备

            LTAPEDEV      /dev/null           #日志磁带设备路径

            LTAPEBLK      16               #日志磁带设备大小(Kbytes)

            LTAPESIZE     10240             #输出到磁带上的最大数据量(Kbytes)

            STAGEBLOB                     #INFORMIX光机缓冲区

               变量MSGPATH中记录了系统消息日志文件的位置和名称。在运行时应随时监控该文件。用户可以另开出一屏,对该文件运行tail -f。系统消息将不断地添加在消息文件后,用户应该经常注意该文件的长度。

      我们建议应将CONSOLE重定向到一个与MSGPATH同一目录下的文件上。

      磁带设备参数用户系统归档和逻辑日志备份。参数ALARMPROGRAM被自动设置为log_full.sh。该文件在逻辑日志满时,自动启动ON_BAR备份逻辑日志。如果不需要此功能,只需要将ALARMPROGRAM设置为no_log.sh文件。

      差数STAGEBLOB只对INFORMIX DYnamic Server/Optical系统有效。

      系统配置

            #系统配置

            SERVERNUM      1            #每个服务器的唯一值

            DBSERVERNAME     onlineshm        #数据库服务器主名

            DBSERVERALLASES   onlinesoc        #数据库服务器别名

            NETTYPE       ipcshm,,10,CPU      #为nettype配置轮询线索

            NETTYPE       soctcp,2.25.NET

            DEADLOCK_TIMEOUT  60            #在分布环境下等待锁的最长时间

            RESIDENT       1            #强制驻留标志(YES=1,NO=0)

            MULTIPROCESSOR   1             #0单处理器,1多处理器

            NUMCPUVPS      10            #用户cpu vps 数量

            SINGLE_CPU_VP    0            #如果非0,限制CPU VP为1

            NOAGE        1            #进程调度

            AFF_SPROC      0            #绑定初始处理器

            AFF_NPROCS     10            #绑定处理器数

          动态服务器必须具有唯一的SERVERNUM。给参数用作系统共享内存段的码(key)。客户连接时根据参数DBSERVERNAME确认服务器,所以该参数也必须唯一,同时它也必须与通讯配置文件中的条目匹配。DBSERVDERNAME或DBSERVDERALIASES都必须与一种通讯接口(共享内存,tli,sockets)相应。在通讯配置文件中必须包括所有的服务器名。

      如果系统内存严重不足,UNIX会将某些进程整个交换出实存。通过设置RESIDENT参数,可以保证共享内存的驻留段始终在共享内存中不会被交换到磁盘上,否则系统的性能将会受到极大的影响。

      许多UNIX操作系统会降低长时间运行的进程的优先级。组成服务器的oninit进程因而会受到影响,导致系统性能下降。参数NOAGE将禁止这种情况的发生。该参数与系统平台有关。如果在系统中出现上述现象,但系统又不支持NOAGE参数,可以利用renice命令提高优先级。ps命令的PRI列表示进程的优先级。在某些系统上,利用top命令也可以显示进程优先级。

      NETTYPE

      参数NETTYPE中定义了客户与动态服务器连接的方式。如果要与系统连接,就必须为每一类连接定义一个NETTYPE以记录网络和通讯协议的类型。

      NETTYPE的第二个字段指定了为该协议启动的轮询(poll)线索数。这些轮询线索负责客户与服务器间的通讯。一般来说,一个轮询线索最多可以为100个用户服务。关于如何配置线索数目才能达到最优,将在以后的章节中详细讨论。

      NETTYPE的第三个字段决定了该协议的连接数。共享内存协议利用此参数决定共享内存消息段的大小。NETTYPE的最后一个字段决定了轮询线索应在那一种VP类上运行。有两种VP类可以选择:CPU或NET。属于NET类的VP包括SOC,TLI或SHM。在CPU 

        VP上运行的效率最高,但只能运行一种通讯协议。

      如果轮询线索运行在CPU VP上,轮询线索数不能超过CPU VP数。但如果轮询线索运行在NET类VP上,轮询线索数将决定SOC,TLI,或共享内存VP的数量,意即系统将为每一轮询线索启动一个NET类VP

      如果如下设置NETTYPE

      sockcp,2,10,NET

      系统会启动两个SOC VP。

      注意每一轮询线索能支持的连接数即为最大用户数,所以上例中的设置能支持20个用户。请不要超过最大用户限制,否则会给轮询线索带来许多负担。

      配置CPU VP

      正确配置CPU VP的数量对于系统的性能有很大的影响。系统需要有足够多的CPU VP来加速线索的执行从而保证系统中其它进程能占用足够的CPU时间。

      具体的配置方法如下:

      利用onstat -g rea 命令监控线索就绪队列。检查CPU VP类线索的数目是否总是大于CPU VP地数量。若是,则表明总是有有一些CPU线索在等待CPU VP,应该增加CPU VP数量。

      命令onstat -glo可以显示CPU VP的信息。

      从系统的角度来说应随时监控分析CPU的使用情况,以了解系统是否还要潜力可挖。有很多系统提供这一类工具,例如sar。只要有CPU空闲时间或I/0等待时间,就说明可以增加CPU VP数量以完成更多的任务(在相同时间内)。但如果系统CPU资源已充分利用,增加CPU VP的数量也不会提高系统性能。

      处理器绑定

      所谓处理器绑定(processor affinity)是特定的进程只能在特定的CPU上执行。特定的CPU仍然能为其它进程服务,但特定的进程只能在该CPU上执行,如果平台支持,INFORMIX动态服务器可以将CPU VP(oninit)绑定到指定的处理器上。

      处理器从0开始连续编号。在某些SMP平台上,由一个CPU专门处理系统中断。如果配置的CPU VP数量小于物理处理器数量,则应避免将CPU VP绑定到处理中断的CPU上。利用mpstat 命令可以查出那一个CPU处理中断(由intr列标识)。

      如果系统用户非常多(>300).用户进程可能会与CPU VP争夺处理器。此时可以将CPU VP绑定到一些处理器上,而将用户进程绑定到另外的处理器上。例如,系统有16个CPU,则将CPU VP绑定到0至10号CPU上,而将所有的应用进程绑定到11-15号进程上。如何在这两类进程分配CPU数目,需要通过测试才能达到较优的性能。

      配置环境

      共享内存参数的最优配置依赖于动态服务器的运行环境。我们讨论的系统运行环境包括:数据载入,索引建立,OLTP和DSS。在实际的系统中,最好为上述不同的环境分别建立参数配置文件

      例如:

      数据载入:     onconfig.load

      索引建立:     onconfig.index

      OLTP:       onconfig.oltp

      DSS:        onconfig.dss

OnLine的操作模式      

        off-Line(离线模式)          

         Quiescent(静态模式)          

        On_Line(联机模式)          

        Shutdown(关闭模式)          

        Recovery(恢复模式)

      OnLine系统有以下几种工作模式

      脱机模式:    OnLine没有运行,共享内存没有分配

      初始化模式:   一种过渡模式,发生在OnLine进行初始化,脱机模式到静态模式转换过程中。

      静态模式:    oninit进程正在运行,共享内存资源已经分配,但是系统不允许数据库用户对数据库进行存取操作,只有管理员(由informix登陆的用户)能够存取                  OnLine系统。

      联机模式:    系统启动并且运行,数据库用户可以正常使用系统

      关闭模式:    系统已启动并且正在运行,当前的用户可以继续使用系统,但是新的用户不允许使用系统

      恢复模式:   系统正在进行快速恢复,或者由系统归档数据进行恢复。快速恢复是offline模式向静态模式转换过程的过程中发生。这个恢复过程需要一些时间,这个时间和要恢复的数据量的大小有关。

      2.普通OnLine进程

      INFORMIX-OnLine动态服务器使用几个叫oninit的进程来进行自身的操作。通常系统中都会有几个oninit进程存在;每一个进程都被称为OnLine系统的一个虚拟处理器。

      oninit进程是作为root来运行的。这是虚拟处理器初始化任务必须要使用的用户权限,另外,由于oninit进程时作为root用户来运行的,所以对于保护进程是有利的,因为普通用户不能够kill掉root用户的进程。

      onstat工具能够读取并报告OnLine系统的共享内存结构,-g glo选项会显示单独的oninit进程的信息,其中包括进程的ID,虚拟处理器的类,用户CPU,和系统CPU的情况。

      $ onstat -g glo

      3.UNIX级别的共享内存

      UNIX命令ipcs可以用来检查操作系统级别的共享内存段和信号量分配情况。有的平台上可能没有这个命令

      ipcs命令会打印出当前你的系统中处于活动状态的共享内存的信息。对每一个资源,这个命令会显示:

      TYPE        包括信息队列(q),共享内存段(m),或者信号灯(s)。

      ID         资源条目的唯一的表示号

      KEY        应用程序存取资源使用的参数。

      MODE        存取模式和许可权限的标记

      OWNER and GROUP   登录名和用户属主的组号,OnLine使用的所有的共享内存资源的属主的属主为root和informix组。

      OnLine共享内存使用的基本键值为0x52564801。SERVERNUM的值乘上0X10000并且加上这个值就为共享内存的键值。这就是,如果你的SERVERNUM的值为2,你的共享内存段的键值为0x52564801+(2*0x10000)=0x52584801。如果SERVERNUM的值为6,产生的键值就为0x525c4801。

      4.更改运行模式:MODE菜单

      $ onmonitor

      使用onmonitor命令的主菜单中的mode菜单可以显示如下的mode选项:

      startup     将OnLine从离线状态带到静态模式。它会启动OnLine进程并且分配共享内和信号量资源。

      On_Line   将系统由静态模式变为联机模式。在这种模式下用户可以使用系统。

      Graceful-Shutdown   被用来将系统由联机模式变为静态模式。这个命令让当前的用户继续工作但是拒绝新的用户使用系统。当所有的用户离开系统,就将系统变为静态        模式。5分钟显示一次当前的用户列表。

      Immediate-Shutdown  用来将系统由联机模式立即转换为静态模式。并且中断当前所有活动用户的操作,回滚任何打开的事务,并且将系统变为静态模式。

      Take_Offline     被用来将系统由静态模式变为离线模式。如果当前系统处于联机模式,首先要进行immediate-Shutdown操作。

      5.恢复模式

      在两种环境下,OnLine的操作模式会为恢复模式:      

        在恢复进行当中,系统会处于快速恢复模式直到恢复完成。

        在快速恢复中。

        6.使用oninit工具来改变OnLine模式

      oninit工具可以用来改变OnLine系统的操作模式。oninit工具的参数如下:

      oninit    将OnLine由离线模式变为联机模式

      oninit -s   将OnLine由离线模式变为静态模式

      oninit -i   初始化OnLine的root dbspace。

      oninit -p   在共享内存初始化的时候不搜寻和删除临时表。

      oninit -y   在系统提示的时候自动回答yes。

       警告:在通常情况下不要使用-i参数。因为它会破坏现有的所有数据。

      提示:如果你想要在你的机器重启动的时候就自动启动OnLine系统到联机模式,你可以将oninit命令,加入到你的系统的启动脚本中(多数UNIX机器是/etc/rc)。

      7.使用onmode工具来更改OnLine模式 

      使用命令onmode可以改变OnLine系统的操作模式:

      -k   执行一个Immediate-Shutdown并且将系统由静态模式变为离线模式。

      -m   将系统由静态模式变为联机模式

      -s   执行一个graceful_Shutdown.

      -u   执行一次Immediate-Shutdown

      -y   对所有的提示自动回答yes,必须和其他的选项一起使用。

      onmode命令还有许多其他和OnLine系统操作模式无关的的参数
阅读(523) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~