茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671601 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_2498236.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

DB研討會 : [分享]Informix概論

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]Informix概論
第一节 磁盘数据组织结构
在INFORMIX-OnLine的磁盘数据组织结构中的最上层为逻辑概念上的数据库空间dbspace, 每一个数据库空间都有一个或若干个物理单位数据存储块chunk组成, 镜像数据存储块mirror保证 当根数据存储块故障时,OnLine 能够继续工作。每一个数据存储块都有若干个数据页 page 组成, 为了提高输入和输出效率,若干个连续的数据页组成数据连续页extent。用户的数据库 database 和 数据表 table 存储在缺省的或者指定的数据库空间中,数据表的逻辑概念上的存储空间数据表空间 tblspace 有 一个或若个安数据连续页 extent 组成,数据记录 row 存放在数据页 page 中。

为更好的的支持多媒体应用,多媒体数据可以存放在二进制大对象数据页Blobpage中,若干个 二进制大对象数据页在此二进制大对象空间Blobspace。
OnLine 使用逻辑日志 Logical log、物理日志 Physical log来管理数据库日志操作。
1. 数据存储块 chunk
INFORMIX-OnLine的数据存放在物理上连续的数据存储块 chunk中,数据存储块是 OnLine 数据存储的最大的物理单位。数据存储块可以有两种构造方法,其一是直接构造在系统的物理磁盘上, 其二是构造在操作系统的文件或者卷上。
在第一种情况下,在操作系统上仅仅定义了这个 (块) 磁盘但没有格式化这个 (块)磁盘,因 此在这上面的所有数据操作都有 OnLine 来完成,操作系统对它不存在任何管理,数据空间在物理 磁盘上连续,这种数据的存储空间称为原始空间raw space。

而在第二种情况下,操作系统不仅定义了这个数据存储空间(文件), 还管理这个数据存储 空间(文件),数据文件操作时的内存缓冲、输入与输出。数据空间的建立受操作系统的制约,在物理存储上不连续。我们称这种数据存储空间为非原始空间 cooked space。
比较这两种数据的存储空间,原始空间在磁盘上连续,没有操作系统的缓存和制约,非原始空间在磁盘上不连续,存在着操作系统的缓存和操作系统的输入/输出的制约,因此在实际应用中, 采用 原始空间效率高于非原始空间,由于原始空间与系统设备有关, 同时不同操作系统对设备的 定义的不 一致性,定义非原始空间比定义原始空间来得简单。 我们将原始空间所对应的磁盘称原 始设 备 raw device,而将非原始空间所对应的操作系统文件称操作系统文件cooked file。
为了进一步提高数据库运行的效率,我们通常选用字符设备作为存放实际的原始设备,这样在我们输入/输出数据时,可以充分发挥系统的DMA能力。
当我们使用原始设备时,可以在同一个原始设备上建立多个数据存储块。通过对数据存储块的参数 OFFSET和 SIZE的定义,其单位为KB,我们可以定义多个数据存储块在同一个磁盘或磁盘块 上,参数OFFSET 定义数据存储块的起始位置,参数SIZE定义数据存储块的大小,用户在设置参数 OFFSET 和SIZE时 必须保证在物理磁盘上没有相互覆盖。
在下图所示的原始设备/dev/rdsk/c0t1d1s0 上建立三个数据存储块 chunk1、 chunk2和 chunk 3,它们的大小分别为50MB、30MB和50MB,由于chunk 的SIZE单位为KB,因此 chunk1、chunk2 和chunk3的SIZE分别为50000、30000和50000。在通常情况下, 第一个数据存储块chunk1的OFFSET 为0,这样第二个数据存储块 chunk2 的OFFSET应为第一个数据存储块chunk1的SIZE,而第三个数 据存储块 chunk3的OFFSET则为第二个数据存储块chunk2的OFFSET加上第二个数据存储块chunk2 的SIZE。 为保证在两个数据存储块的相邻边界处不发生重叠,可以将后一个数据存储块的起始位 置稍 微挪后一点。
如果采用操作系统文件作为数据存储空间时,一般不在一个文件中建立多个数据存储块。一个文件中建立多个数据存储块,操作系统对文件中数据的定位时间将更长。
不管是原始设备还是非原始设备,OnLine的概念是一致的。在实际应用中,可以一部分数据存储块用原始设备而另一部分用非原始设备,只是原始设备采用OnLine的管理的I/O机制,而非原始设备采用操作系统 unix 的I/O机制。

2. 数据页 page
INFORMIX-OnLine在数据存储块中以数据页page为单位来组织存放数据,并以数据页为单 位来输入输出数据,它的大小与数据在共享内存中数据缓冲区相一致,所以 OnLine 的数据页的大小 是不可以改变的。数据页是OnLine 组织存放数据的最小的物理单位。
根据不同从操作系统,OnLine的数据页的大小是不同的。例如在SCO、AT&T、UNISYS 和HP等操作系统平台上,每一个数据页的大小为2KB,而在IBM和SEQUENT等操作系统平台上, 每 一个数据页的大小则为4KB。同时数据在共享内存中的缓冲区的大小也是根据操作系统的不同 而不同,其值与数据页的大小一致。

3. 数据连续页 extent
为提高数据操作的效率,OnLine将若干个在物理磁盘上连续的数据页组成一个数据连续页 extent。当用户创建一个数据表时,OnLine以数据连续页为单位在数据存储块中分配一块连续的空 间,当用户的数据写满了这个数据连续页后,OnLine 将以数据连续页为单位在数据存储块中申请 一块连续空间,以存放更多的用户数据。在缺省情况下,初始化时第一个数据连续页为8个数据页。
数据连续页不能跨越数据存储块,当OnLine需要申请较多的数据页构成数据连续页时,如 果 OnLine 找不到如数的在物理设备上连续的数据页时,OnLine将放弃这些不够构成一个数据连续页的数 据页,OnLine 将去下一个数据存储块去申请如数的在物理设备上连续的数据页。因此在实 际系 统中,过小的数据存储块将不利于数据操作性能和数据存取效率。

4. 数据库空间 dbspace
在INFORMIX-OnLine 的磁盘数据组织中,数据库空间 dbspace 处于一个比较上层的位置。 数 据库空间是数据库在逻辑概念上的存储空间,一个或若干个数据库空间组成OnLine数据实体。在 物理 磁盘上, 每一个数据库空间总对应于一个或几个数据存储块, 在这些与数据库空间对应的数 据存储块 中,一定有一个数据存储块是根数据存储块, 而其它的则是后继数据存储块。 从功能上来 看,根数据 存储块除了具有后继数据存储块能够存储用户数据外,它还具有管理本数据库空间的功 能;从数据存 储块的保留页来看,根数据存储块具有 56 个保留页,而后继数据存储块仅有3个保留 页。当然不同版 本的OnLine在主、后继数据存储块的保留页的数量可能不同,但是根数据存储块需 要更多的保留页来 保存本数据库空间的定义。
在OnLine初始化后有一个称为根数据库空间rootdbs的数据库空间,它是OnLine系统的第一个 数据库空间。当建立根数据库空间时,它的根数据存储块将被建立,所有数据库的日志和所有的定 义信息都必须存放在该数据存储块中,它比所有其它根数据存储块的保留页更多。由于数据库日志 定义的需要,因此对根数据库空间的根数据存储块的定义尤其重要,关于如何正确地定义根数据库 空间的 根数据存储块将在后面详细介绍。
为了提高数据库系统运行的效率,INFORMIX新的动态服务器OnLine Dynamic Server 7.1中 引入了临时数据库空间的概念。在没有临时数据库空间的系统中,临时数据将建立的缺省的根数据 库空间中,由于临时数据操作需要频繁的增加、删除,会给根数据库空间的数据存储块中造成很多 碎片,将导致数据库操作效率的降低;另外当数据库备份时,那些临时数据也一起作备份,从而增 加了数据备份量,降低了数据备份的效率。引入临时数据库空间后,用户的临时数据或者数据操作 的中间 结果 将被存放在临时数据库空间中, 同时当数据备份时临时数据库空间将不再被 备份。

5. 数据存储块镜像 mirror
为提高 OnLine 运行时的数据高可靠性,OnLine在数据存储上引入了数据存储块镜像的机 制。OnLine数据存储的镜像是对数据存储块而言的,但是其定义是对数据库空间的。当一个数据库 空间被定义为镜像时,它下面的所有数据存储块全部镜像;当一个数据库空间被定义成没有镜像的 时候, 它下面的所有数据存储块全部没有镜像。
当 OnLine在运行时,一旦数据存储块所在的物理磁盘发生读写故障,对于没有数据库空间 没有镜像的系统,OnLine将自动关闭,并等待恢复。而对于具有镜像的数据库空间,OnLine将把存 在读写故障的数据存储块标识为Down,同时 OnLine 将继续运行,用户完全可以根据需要,在适当 的时候,恢复存在读写故障的数据存储块所在的磁盘,然后重构继续。因此一个具有镜像的数据库 空间,其运行时的可靠性将大大高于不具有镜像的数据库空间。

6. 数据表空间 tblspace
在逻辑上,数据库存放在数据库空间dbspace中,数据表存放在数据表空间tblspace中。数据 库空间是由数据存储块组成,数据表存在于这些数据存储块中,数据表空间是由连续存放该数据表 记录的数据连续页组成。

第二节 共享内存数据组织结构
OnLine能高效地执行联机事务处理的第二个机制是数据库服务器系统的共享内存。在一些 不使用共享内存的数据管理系统中,管理进程只能在需要数据的时候,将该记录和索引的最新值读 入该进 程 所占有的私用数据缓存中进行操作,由于频繁的磁盘I/O,使系统的运行效率降低,同时 由于那些管 理进程都各占一份数据缓存,使得系统内存的有效使用率降低。因此使用共享内存 会有 以下三方面的 好处:
(1)数据缓存不再属于某个进程,所有的数据库进程均共享这块内存,降低了磁盘的 I/O;
(2)所有数据库进程访问相同的访问,它们的值和索引在内存中只有一份拷贝,提高了内 存的有效使用率;
(3)操作的相关记录被预读进共享内存中,由于内存的I/O效率极高,因而系统并发除了数 据的能力得到提高。

随着OnLine功能和性能的不断提高,OnLine的共享内存也有所不同。尤其是INFORMIX的动态服务器OnLine Dynamic Server (ODS)在其共享内存的结构上增加了两个功能模块。在OnLine5 中, 其共 享内存仅有一个区域,驻留区Resident portion;动态服务器ODS 7.1除了驻留区 Resident portion 外还增 加了虚拟区 Virtual portion 和通讯区 Communication portion。

操作系统参数对数据库服务器共享内存的影响
操作系统的共享内存参数对数据库服务器的共享内存的定义和建立会产生极大的影响。对 INFORMIX来说,数据库服务器的共享内存绝对不能超过操作系统共享内存定义的允许范围。一个 OnLine 动态服务器7.1的共享内存不能超过操作系统所定义的一个UNIX进程所允许访问共享内存的 极大值,由于操作系统对共享内存的定义往往不能满足OnLine动态服务器7.1的需要,因此,数据库 管理员通 常需要在建立其数据库应用系统以前,首先调谐操作系 统的共享内 存参数。
对于OnLine动态服务器7.1来说,操作系统的参数对它们的影响,在共享内存锁资源管理方 面 和虚拟处理器对共享内存访问操作方面是不全部相同的。它们对操作系统参数的要求也是不一样 的, 因此需要数据库管理员根据产品来决定操作系统的参数,在决定这些操作系统的参数前,请先 阅读产 品说明文件。例如OnLine动态服务器7.1的$INFORMIXDIR/release/ONLINE_7.1,在这个文件 中它向数据库管理员阐述该INFORMIX产品在该机器平台上对操作系统参数的要求。同一种产品在 不同的平台上,对该平台操作系统参数的要求非常有可能是不一样的;在同一平台上,同一产品的 不同版本对操 作系统参数也很有可能是不同的。

第三节 处理器资源组织结构
OnLine 动态服务器7.1采用多进程 Multi-processes 多线索 Multi-treads 的数据库服务器机制 , 将每一个服务器进程根据用户定义分解成若干个线索,每一个线索响应一个用户的设计访 问的 请求。 INFORMIX将每一个 进程称作一个虚拟处理器Virtual process。
在以前的多处理器系统中,往往将用户的应用程序和系统的处理器CPU对应起来,每一个处理器都分别处理一个用户的应用程序; 当应用程序数量多于处理器数目时,应用程序为争夺处理器 资源CPU,而引起应用程序在运行时间上的不平衡;同时当应用程序的数量少于处理器数目时,由 于一 些 处理器资源得不到运用而空闲,导致处理器资源运用上的不平衡。一种比较好的方法是将处 理器与应 用所需要的处理器分离开来,然后由数据库系统来平衡这种需求。 在 INFOR MIX 动态服 务器中,用 户应用程序发出的数据操作请求被称作虚拟处理器的服务器进程所接收, 然后 OnLine均 匀地将这些 服务器进程分配到系统实际的处理器CPU上。这样就较好地解决了上面 所提到的两种不 平 衡状态。
在ODS 7.1中每一个数据库服务器进程都称作一个虚拟处理器 Virtual process,简称 VP。 若干个相同功能的虚拟处理器组成一个虚拟处理器类Virtual process Class,简称VP Class, 每一个 VP Class 都表示一种功能的虚拟处理器。OnLine 一共有七种虚拟处理器,它们是:
处理器虚拟处理器 CPU VP,响应所有用户和OnLine系统对CPU资源的操作和协调。
磁盘输入输出虚拟处理器 Disk I/O VP,响应用户和 OnLine系统的磁盘输入输出请求,磁 盘输 入输出处理器分三种,异步输入输出 Asynchronous I/O、物理日志输入输出 Physical-log I/O 和逻辑日志 输入输出Logical-log I/O。
网络通讯虚拟处理器 Network VP,响应用户的网络联接的请求。 ODS 的网络虚拟处理器 有三种, 它们分别用于管理 tli、soc和ipc三种网络通讯接口。
系统管理虚拟处理器Adminstration VP,运行OnLine 系统管理程序和一些专职程序。
光盘虚拟处理器 Optical VP,当用户运行OnLine/Optical时管理光盘系统的运转。
审计虚拟处理器 Audit VP,当用户系统需要一定的运行时数据安全性的时候,审计虚拟处 理器在后台帮助检查每一个用户操作的合法性。
杂项管理虚拟处理器 Miscellaneous VP,用于管理所有以上虚拟处理器不作的工作。

第三章 数据库服务器的初始化

第一节 数据库服务器初始化时的考虑
用户在建立和初始化其数据的时候,最重要考虑的问题是:数据存储实体选用哪种方案,rawevice 还是cookedfile,是否对数据库空间建立镜像,怎样建立?对于OnLine动态服务器7.1的使用者 还可以考虑数据库系统是否需要数据复制的安全系统以及 如何建立数据复制等等问题。
Raw device和cooked file对于OnLine来说其概念和管理是一致的,因此对较小的数据库系统 其效果相差无几,但对大数据库系统,由于cooked file采用unix的I/O机制,而raw device则采用On-Line自身的I/O机制,因此在效率上raw device会明显快于cooked file,且raw device的数据安全性也 高于cooked file,假设用户不小心删除数据储存实体chunk的文件名后,以cooked file方式定义的数 据库将被删除,而以raw device方式定义的数据储存实体 Chunk 只是描述它的设备文件名被删除, 作为真正的存储数据的数据库空间并没有受到影响, 通过重新建立设备文件名的方法,该数据储 存实体不难恢复,而 cooked file 则无法恢复。
另外从效率上考虑,Raw device的使用在unix系统上还有块设备和字符设备之分,用unix命 令ls-l列设备目录,我们可以看到,有些设备文件名的标识为b而另一些则为c,其中标识为c的设备 为字符设备,作为OnLine数据储存实体来说,字符设备更有利于发挥主机服务器的DMA能力,所以 我们总是定义字符设备为数据储存实体。
数据存储空间的镜像与数据库服务器的复制是OnLine的数据安全机制,我们将在数据安全的章节中给以详细的讲述。

第二节 操作系统上的准备工作
在建立和初始化数据库服务器系统的时候,需要作的准备工作有以下几点:
1 为数据库所使用原始设备计划磁盘空间,并使得在UNIX操作系统上取得该原始设备的描 述。
2 修改INFORMIX环境下的配置文件$INFORMIXDIR/etc/sqlhosts和计算机系统对网络节点、 网络端口的定义文件/etc/hosts、/etc/hosts.equiv和/etc/services。
$ vi $INFORMIXDIR/etc/sqlhosts 
online7 ontlitcp changsha sqlexec7
(虚拟服务器名) (网络协议类型) (主机名) (服务端口名) 
# vi /etc/hosts 
132.147.162.1 changsha 
(网络结点) (主机名) 
#    vi  /etc/hosts.equiv 
changsha  
(主机名) 
# vi /etc/services 
sqlexec7 8888/tcp 
(服务端口名) (端口号) 
 

3 调节操作系统的核心参数,以适应OnLine动态服务器7.1对unix在共享内存及信号量等方面 的需要。
用系统提供的参数管理的工具 ( 例如SCO UNIX的sysadmsh)来进行调整。需要调整的参数也 因数据库产品的版本不同而有所不同,具体可以在成功地安装了数据库服务器后,查看$INFORMIX-DIR /release/ ONLINE_ 7.1中对操作系统参数要求的说明。
例如对于在SCO UNIX 3.2.4.2平台上使用OnLine7的用户, 需要调整的核心参数有SHM- MAX、SHMSEG、SHMMNI、SEMMNI和SEMMSL。因此用户可注册到 root,然后运行 sysad- msh ,在菜单中选择System,然后选择Configure,再选择Kernel,在Kernel选项中选择Parameter, 然后调 整第9项Shared Data中的参数SHMMAX、SHMSEG和SHMMNI以及第8项Semphore中的参数 SEMMNI和 SEMMSL,设置完毕后在Kernel选项中选择 Rebuild,重新构造unix引导核心。 然后退 出sysadmsh,并重新启动 unix。同时需要注意的是,在重新构造核心后,数据库服务器存储 原始设 备名的属主和组定义的改变。

第三节 建立数据在磁盘上组织实体
数据在磁盘上以数据存储块的形式存在,但在逻辑上则是以数据库空间的形式存在。 每 一个数据库空间至少有一个数据存储块,其中最先定义的数据存储块为主数据存储块,而其它的 数据存储块则为附加数据存储块。同时在所有的数据库空间中必定有一个根数据库空间(rootdbs)。 建立数据在磁盘上的组织实体是建立与逻辑概念的数据库空间相对应的数据存储块。数据存储块 的组织方式 有两种:原始磁盘设备形式和 UNIX文件形式。相比起来,原始磁盘设备形式具有较 高的运行效率和可靠性,但是原始磁盘设备形式的数据存储块的建立需要数据库管理员对数据库 服务器所运行的系统的磁盘设备的描述具有足够的知识和经验。
原始磁盘设备形式的数据存储实体的建立方法是将一个特定的原始磁盘 (或部分磁盘) 用 UNIX的链接命令ln链接到一个便于记忆和管理的设备文件。例如在 AT&T SVR4系统中, 有一个 磁盘/dev/rdsk/c0t1d1,而定义中的原始磁盘设备名为rootdbs1,因此数据库管理员以root用户注册, 然后用以下的命令来 构造数据存储实体,
# cd $INFORMIXDIR 
# ln /dev/rdsk/c0t1d1 rootdbs1 
# chmod 660 rootdbs1 
# chown informix rootdbs1 
# chgrp informix rootdbs1  

UNIX文件形式的数据存储实体的建立方法是产生一个0字节的UNIX文件,使用命令如下:
# cd $INFORMIXDIR 
# cat /dev/null > rootdbs1 
# chown informix rootdbs1 
# chgrp informix rootdbs1  


第四节 建立数据库服务器共享内存
至此,我们可以开始初始化数据库服务器,以informix用户注册,用命令onmonitor命令。 在初始化前必须正确地定义了环境变量INFORMIXDIR、PATH和INFORMIXSERVER以及文件 $INFORMIXDIR/etc/sqlhosts、/etc/hosts、/etc/hosts.equiv和/etc/services。
首先注册到 informix,运行 onmonitor,在菜单中选择 Parameter,然后选择Initialize,便进 入数据库空间初始化的屏幕。然后设置在屏幕上显示的参数。
---------------------------------------------------------------------------
INTIALIZATION: Make desired changes and press ESC to record changes. 
 Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
                         DISK PARAMETERS 
Page Size     [       2] Kbytes                       Mirror [N] 

Tape Dev.     [/dev/rct0                                       ] 
Block Size    [      16] Kbytes       Total Tape Size [  150000] Kbytes 
Log Tape Dev. [/dev/rct0                                       ] 
Block Size    [      16] Kbytes       Total Tape Size [  150000] Kbytes 

Boot Name     [rootdbs        ]             Root Size [   20000] Kbytes 
Primary Path  [/usr/informix/rootdbs1                          ] 
                                               Offset [       0] Kbytes 
Mirror Path   [                                                ] 
                                               Offset [       0] Kbytes 

Phy. Log Size [    1000] Kbytes         Log. Log Size [     500] Kbytes 
                                    Number of Logical Logs [  6] 
---------------------------------------------------------------------------  


第一屏设置完成后按ESC,onmonitor在完成数据库空间初始化以后便接着要求用户设置共享内存。如果用户在以后需要调整共享内存时可以运行onmonitor,然后选择Parameters菜单,再选 择 Shared-Memory项。对于初次调整共享内存,用户需要注意的是Server Number是不可以重复的,并且 Server Name以小写为好,尤其是对于用户需要建立分布式数据库系统的情况更为重要。可以说对用 户影响最大的BUFFERS和LOCKS。
--------------------------------------------------------------------------- 
SHARED MEMORY: Make desired changes and press ESC to record changes. 
 Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
                      SHARED MEMORY PARAMETERS 
Server Number                  [  10]       Server Name [online7          ] 
Server Aliases [                                                          ] 
Dbspace Temp   [                                                          ] 
Deadlock Timeout               [  60] Secs  Number of Page Cleaners   [  1] 
Forced Residency                  [N]      Stack Size (Kbytes)       [  32] 
Non Res. SegSize      (Kbytes) [8000] 

Physical Log Buffer Size [        32] Kbytes 
Logical Log Buffer Size  [        32] Kbytes 
MAX # of Logical Logs         [    6]      Transaction Timeout       [ 300] 
MAX # of Transactions    [        20]      Long TX HWM               [  50] 
MAX # of Userthreads     [        20]      Long TX HWM Exclusive     [  60] 
MAX # of Locks           [      2000]      Index Page Fill Factor    [  90] 
MAX # of Buffers         [       200]      Add SegSize  (Kbytes) [    8192] 
MAX # of Chunks               [    8]      Total Memory (Kbytes) [       0] 
MAX # of Open Tblspaces       [  200] 
MAX # of Dbspaces             [    8] 
                         ============ 
Shared memory size       [       864] Kbytes       Page size [   2] Kbytes 
Enter a unique value to be associated with this version of INFORMIX-OnLine. 
--------------------------------------------------------------------------- 

设置完共享内存后按ESC键,OnLine便初始化共享内存,当OnLine成功地初始化共享内存 后,OnLine便进入第三个屏幕数据库服务器性能参数调整。在这个屏幕中用户说明OnLine 动态服务 器 7.1所运行的计算机是否一个SMP体系结构的计算机,若是则置 Multiprocessor Machine 为 Y,否 则为N。当 Multiprocessor Machine 为Y时,用户可以进一步地设置有多少个服务器进程与 CPU 结合 (Num Procs to Affinity),并且从第几个CPU开始与数据库服务器进程结合 ( Proc num to start with)。 如果该 计算机为单处理器计算机系统,则设置 Single CPU VP为Y,否则为N。 怎样设置 CPU VP 和AIO VP,在“Informix ODS 性能指南”一书中有详细介绍。在屏幕的右下方是该数据库服务器 的网络 链接形式的定义,它必须与$INFORMIXDIR/etc/sqlhosts中的设置相符。例如在$INFORMIX- DIR /etc/sqlhosts中定义数据库服务器online的网络链接形式为onsoctcp,则在 NETTYPE settings中 设置Protocol 为soctcp ,其它项可先用其缺省 值。
--------------------------------------------------------------------------- 
PERFORMANCE: Make desired changes and press ESC to record changes. 
 Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
                    PERFORMANCE TUNING PARAMETERS 

Multiprocessor Machine      [N]    LRU Max Dirty             [ 60] 
  Num Procs to Affinity   [  0]    LRU Min Dirty             [ 50] 
  Procs num to start with [  0]    Checkpoint Interval      [ 300] 
                                   Num of Read Ahead Pages   [  4] 
CPU VPs                   [  1]    Read Ahead Threashold     [  2] 
AIO Vps                   [  2] 
Single CPU VP               [Y]    NETTYPE settings: 
Use OS Time                 [N]      Protocol Threads Users VP-class 
Disable Priority Aging      [N]      [soctcp] [   ]   [   ] [   ] 
Off-Line Recovery Threads [ 10]      [      ] [   ]   [   ] [   ] 
On-Line Recovery Threads  [  1]      [      ] [   ]   [   ] [   ] 
Num of LRUS queues        [  8]      [      ] [   ]   [   ] [   ] 
--------------------------------------------------------------------------- 

设置完这一屏参数后,按ESC。 接下来我们将设置动态数据复制、运行监控和并行数据操 作等参数, 由于目前数据库系统处于初建阶段, 暂不考虑动态数据复制,当系统进入该屏幕后按 ESC。
--------------------------------------------------------------------------- 
DATA REPLICATION: Make desired changes and press ESC to record changes. 
 Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
                      DATA REPLICATION PARAMETERS 

Interval       [   30] 
Timeout        [   30] 
Auto           [0] 
Lost & Found   [/usr/informix/etc/dr.lostfound                           ] 
--------------------------------------------------------------------------- 

这时系统进入运行监控屏幕,在这屏幕中我们将定义系统运行的信息日志文件以及当系统运行发现问题时,系统的运行状态将写到那一个目录下。
--------------------------------------------------------------------------- 
DIAGNOSTICS: Make desired changes and press ESC to record changes. 
 Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
                          DIAGNOSTIC PARAMETERS 

Message Log   [/usr/informix/online.log                                 ] 
Console Msgs. [/dev/console                                             ] 
Alam Program  [                                                         ] 

Dump Shared Memory       [Y] 
Dump Gcore               [N] 
Dump Core                [N] 
Dump Count               [   2] 
Dump Directory           [/tmp                              ] 
--------------------------------------------------------------------------- 

设置完运行监控参数后,按ESC键。这时系统进入最后一个设置屏幕,并行数据操作屏幕 , 由于我们刚开始建立数据库系统,暂不考虑并行数据操作参数的设置。 因此我们按ESC键来结束我 们的数据库服务器初始化操作过程。
--------------------------------------------------------------------------- 
PDQ: Make desired changes and press ESC to record changes. 
 Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
                    PARALLEL DATABASE QUERIES PARAMETERS 

PDQ Priority                      [100] 
Maximun Priority                  [100] 
Decision Support Queries          [       10] 
Decision Support Memory (Kbytes)  [     8192] 
Maximun Decision Support Scans    [        4] 
Dataskip [                                                              ] 
Optimizer Hint                    [0] 
--------------------------------------------------------------------------- 

当数据库服务器初始化成功时,系统处于quencent状态。这时用户可在菜单上选择Exit, 退出Parameters,然后选择Mode, 再选择 Online,INFORMIX-OnLine便进入online状态。

第五节 初始化处理器资源
OnLine动态服务器7.1采用多进程 多线索体系结构, 即用较少的数据库服务器进程来作所有 的数据库操作, 因此处理器资源的利用 将直接影响用户系统的运行性能。 处理器资源的初始化可以 的数据库系统初始化的过程中实现,也可以 在以后用onmonitor实用程序的Parameters菜单中的 Perf -ormance项来进行,参数调整以后需重新启动数据库服务器才能有效。同时在系统的运行过程中,用户可以根据自己的需要,通过 onmonitor 实用程序的Mode菜单中的 Add-proc和 Dropproc 随时调整系 统的处理器资源,而不需要重新启动数据库服务器。

第六节 数据库服务器的状态
INFORMIX-OnLine具有五个不同的状态,它们分别是online、quiesent、recovery、shut- down 和offline。这五个状态分别是为OnLine运行中不同目的而设计的。
---------------------------------------------------------------------------- 
Mode: Startup On-line Graceful-shutdown Immediate-shutdown Take-offline ... 
---------------------------------------------------------------------------- 

online 状态是系统响应联机用户数据库访问的状态。 在这个状态下,用户可以查询、插入 、 修改和删除他们的数据,以及各种简单或复杂的事务处理。
quiesent 状态是数据库管理员管理系统的状态。在这个状态下,除了数据库管理员,任何 普通用户都不能进入数据库系统,不能对数据库作任何的访问和操作。 通常在这个状态下,数据 库管理员进行数据备份、批量处理、调整 OnLine 参数以及其它各种数据 库系统的管理。
recovery 状态是OnLine为保持数据库一致性而进行的内部事务处理状态,因此这个状态拒 绝任何人访问数据库系统,包括数据库管理员。
shutdown 状态是 OnLine关闭前的一个等待联机退出的状态。在这个状态下,已经进入数 据库系统,并且正在进行数据库访问或操作的用户被要求尽快结束工作,退出数据库系统,而尚 未联机 和那些没有进行数据库访问和操作的用户将被拒绝进入数据库系统。
offline 状态是 OnLine 处于关闭的状态。
第七节 数据库服务器的启动与关闭
启动和关闭OnLine最简单的方法 onmonitor,选择Mode,然后用Startup和Online来启动数据 库服务器。 或者用Take-offine来关闭 数据 库服务器。
通过命令形式,oninit 启动数据库服务器;onmode -ky 关闭 数据 库服务器。
从系统管理的角度来看,最好是在系统启动的最后自动启动数据库服务器和在系统关闭时最先关闭数据库服务器。这样便需要建立启动文件和关闭文件。
以SCOUNIX为例,启动文件建立在/etc/rc2.d目录下,其名字可以是S99informix,启动文件 如下:
INFORMIXSERVER=online7 
INFORMIXDIR=/usr/informix 
PATH=$PATH:$INFORMIXDIR/bin 
export INFORMIXSERVER INFORMIXDIR PATH 
exho "Start up OnLine Dynamic Server " 
oninit& 
ipcs -bm 

命令ipcs用于检查unix系统的共享内存和信号量,用这种方法可以很容易地知道数据库服 务器 是否正常地启动。
关闭文件建立在/etc/rc0.d目录下,其名字可以是K01informix,关闭文件的内容如 下:
INFORMIXSERVER=online7 
INFORMIXDIR=/usr/informix 
PATH=$PATH:$INFORMIXDIR/bin 
export INFORMIXSERVER INFORMIXDIR PATH 
echo "Stop OnLine Dynamic Server" 
onmode -ky& 
ipcs -bm

第四章 数据库服务器系统的管理
通过上一章的实践,用户可以建立起一个最初步的数据库服务器系统,它有一个数据库空间 Dbspace,该数据库空间被称作rootdbs。rootdbs有一个数据存储块chunk。数据库服务器系统的定 义、用户数据库和数据库日志都存放在这个chunk中。然而对于一个实际的数据库应用系统,希望数据库服务器系统的定义、 用户数据库和数据库日志分别存放在不同的数据空间中, 以达到比较理 想的运行效率和方便简洁的数据库系统管理。 本章中我们将讨论如何为一个数据库服务器系统增 加 一个数据库空间Dbspace和如何为一个数据库空间增加一个数据存储块chunk。

第一节 增加数据库空间 Dbspace
在自定义Dbspace前,用户必须为用户自定义的Dbspace定义一个数据储存块Chunk,然后启 动 onmonitor,用Dbspaces中的Craete将该 Chunk赋予用户自定义的Dbspace。
例如在一个 SCO UNIX 应用系统中, 用户需要为其应用数据库系统定义一个数据库空间 Dbspace, 其名字为 workdbs1,并且这个Dbspace的第一个Chunk的大小为100MB,其名字为 work dbs1_ primary。现在用户决定将 workdbs1_primary定义在/dev/rdsk/0sa所对应的磁盘空间上, 环境 变量 INFORMIXDIR=/usr/informix。步骤如下:
1.1 注册到 root,
# cd /usr/informix 
# ln /dev/rdsk/0sa workdbs1_primary 
# chown informix workdbs1_primary 
# chgrp informix workdbs1_primary 
# chmod 660 workdbs1_primary 
# exit 

1.2 注册到 informix,
$ onmonitor 

选择Dbspaces后按Enter键,再选择Create,屏幕上显示出增加Dbspace的格式。
用户在Dbspace Name中输入workdbs1,在Mirror中输入Y。在PRIMARY CHUNK INFORMATION下面的Full Pathname中输入/usr/informix/workdbs1_primary,在 Size 中输入 100000。MIRROR CHUNK INFORMATION下面的Full Pathname为镜像数据存储块的全路径名, 在这里没有输入。 然后按ESC键,数据库服务器系统就将用户自定义的数据库空间workdbs1 加入 rootdbs的管理区(保留页)中。
OnLine动态服务器7.1允许用户定义临时数据库空间 Tempdbs,如果某一个数据库空间是临 时数据库空间则置Temp为Y,否则为N。当某一个数据库空间为临时数据库空间时,它同时需要在 共享内存的设置屏幕中的Temp Dbspace有正确的描述。
Press ESC to build a new dbspace. 
Press Interrupt to cancel the option and return to the Dbspace menu.  
Press F2 or CTRL-F for field level help. 

                         CREATE DBSPACES 

    Dbspace Name [workdbs1    ]                 Mirror [N]      Temp [N] 

PRIMARY CHUNK INFORMATION: 

    Full Pathname [/usr/informix/workdbs1_primary               ] 

           Offset [        ] Kbytes             Size [    100000] Kbytes 

MIRROR CHUNK INFORMATION: 

    Full Pathname [                                             ] 

           Offset [        ] 
--------------------------------------------------------------------------- 

或者通过命令形式增加Dbspace
$  onspaces -c  spacename [-t] -p pathname -o offset -s size [-m path offset] 


1.3 在用户自定义的数据库空间中建立数据库
启动isql或dbaccess,选择Query-language后,再选择New项,输入
CREATE DATABASE stores IN workdbs1 WITH  BUFFERED LOG 

然后按ESC,运行这个SQL命令,一个带BUFFERED日志的数据库stores建立在数据库 空间workdbs1中。启动tbmonitor或onmonitor,用户可以在Status中的Database项中看到自己所定义 的数据库。

第二节 增加数据储存实体 Chunck
数据库空间 Dbspace 仅仅是数据库存在的逻辑空间,数据库存在于真正的物理空间是数据 储存块 Chunk, 因此它的空间总是有限的,当数据储存接近它的限度时,数据库管理员就要考虑 为这个数据库空间增加一个数据储存块 Chunk。
增加一个数据存储块,其做法如下:
2.1 注册到 root;
# cd /usr/informix 
# ln /dev/rdsk/1sa workdbs2_primary 
# chown informix workdbs2_primary 
# chgrp informix workdbs2_primary 
# chmod 660 workdbs2_primary 
# exit 

2.2 注册到 informix,
$  onmonitor 

选择 Dbspaces 菜单后,再选择 Add_chunk,屏幕上显示出当前系统中所有的数据库空间, 移动光标上下键,将选中项移到需要增加 Chunk 的Dbsapce 上,按 Ctrl-B 键,在屏幕的Full Path- name 中输 入/usr/informix/workdbs2_primary,并在Size项中输入100000,然后按ESC键。于是数据 库服务器系 统为数据库空间 workdbs1 增加一个数据存储块 workdbs2_primary的定义。我们可以在 Status 菜单的 Spaces 选项中看到自己刚才为 workdbs1 定义的数据存储块 workdbs2_primary。
--------------------------------------------------------------------------- 
Press ESC to build a new dbspace. 
Press Interrupt to cancel the option and return to the Dbspace menu.  
Press F2 or CTRL-F for field level help. 

                              ADD CHUNKS 

     Dbspace Name [workdbs1  ]                  Mirror [N]      Temp[N] 

PRIMARY CHUNK INFORMATION: 

    Full Pathname [/usr/informix/workdbs2_primary               ] 

           Offset [        ] Kbytes             Size [    100000] Kbytes 

MIRROR CHUNK INFORMATION: 

    Full Pathname [                                             ] 

           Offset [        ] 
--------------------------------------------------------------------------- 

或者通过命令形式增加chunk
$  onspaces -a  spacename -p pathname -o offset -s size [-m path offset] 


第三节 日志管理
日志是数据库服务器保证当数据库或Unix或主机服务器系统故障恢复后,用户数据库快速复原的安全机制。数据库服务器的日志有两种:物理日志Physical Log和逻辑日志Logical Log。 当用户 需要取数据而该数据又不在共享内存时,数据库服务器将它从磁盘读出并放入共享内存。这时,如 果用户需要修改该记录,数据库服务器在该记录尚未被修改前,将该记录所在的数据页拷贝到物理 日志,然后数据库服务器响应用户的修改要求,并将数据修改的轨迹写入逻辑日志。 当用户想要滚 回操作时,并且在数据修改的过程中数据库服务器没有做过Checkpoint, 数据库服务器将物理日志拷 贝回该数据页,如果在数据修改的过程中数据库服务器已经做过Checkoint,数据库 服务器将根据数 据修改时记录在逻辑日志中的数据变化轨迹来恢复原来的数据。不过大家要知道 这种机制只有在用 户数据库是带日志的情形下才会起作用,由于需要比不带日志的数据库多写日志文件,因此它的效 率会低于不带日志的数据库。但是一旦数据库服务器非正常关闭, 在后一 次启动数据库服务器的时 候, 数据库服务器会根据上次系统非正常关闭时留下来的日志文件来 恢复 数据的一致性,这种安全 机 制是以牺牲数据库操作效率为代价的。
物理日志保存数据在修改前的映像,一般情况下它占整个日志空间尺寸的1/4,当数据储存 实体空间增加后,日志空间的尺寸也需要调大。 改变物理日志空间的大小可使用onmonitor 工具包, 启动 onmonitor,选择 Parameters菜单项后,再选择 Physical-log, 按回车,将物理日志的尺寸设置成需要的值,同时也可以将物理日志移到指定数据库空间中。
--------------------------------------------------------------------------- 
Press ESC to add physical log. 
Press Interrupt to cancel the option and return to the Parameters menu.  
Press F2 or CTRL-F for field level help. 

                         ADDING PHYSICAL LOG 

            Physical Log Size   [       5000] Kbytes 

            Dbspace Name        [rootdbs           ] 
--------------------------------------------------------------------------- 

或者通过命令形式改变物理日志文件的大小与位置:
$  onparams -p -d dbspace_name -s phy_log_size 


逻辑日志保存数据在修改后的映像,一般情况下它占整个日志空间尺寸的3/4。逻辑日志空 间的尺寸为逻辑文件尺寸与逻辑日志文件个数的乘积。逻辑日志文件的个数不 得少于 3个。
启动 onmonitor,如果需要增加逻辑日志文件数选择 Parameters菜单项后再选择 Add-log,如果需要减 少逻 辑日志文件数选择 Parameter 菜单项后再选择Drplog。增加逻辑日志时只需在 键盘上输入逻辑日志文件将加入的数据库空间名。如果用户需要将全部逻辑日志移到指定的数据库 空间中去,则需要现在指定的数据库空间中加入足够的逻辑日志文件,然后作一次实际的0级备份和逻辑日志的自动备份(这两项备份将在下一节中讲述),最后将原来的数据库空间中逻辑日志文件删 除。
--------------------------------------------------------------------------- 
Press ESC to add a logical log. 
Press Interrupt to cancel the option and return to the Parameters menu.  
Press F2 or CTRL-F for field level help. 

                        ADDING A LOGICAL LOG 

              Logical Log Size    [       5000] Kbytes 

              Dbspace Name        [rootdbs           ] 
--------------------------------------------------------------------------- 


或者通过命令形式改变逻辑日志文件的大小,位置与个数:
$ onparams -a -d dbspace_name -s log_size  (增加逻辑日志) 
$ onparams -d -l log_id  (删除逻辑日志) 


第四节 数据备份和恢复
OnLine动态服务器7.1为数据库管理员提供一种联机的增量备份工具,在命令行时,数据库 管理员可以用ontape来作数据备份和逻辑日志备份。还提供了一个具有交互界面和菜单驱动数据库 备份工具onarchive。
OnLine 动态服务器7.1提供的增量的数据备份,它分成三级,即0级 (Level 0)、1 级(Level 1)和2级(Level 2)。0级备份为数据库空间的全备份,1级备份是最近一次的0 级备份以来的被修改数 据备份,2级备份为最近一次0级备份或1级备份以来被修改数据的备份。在连续的两次同一级备份 中,后一个备份将备份前一个备份已经备份了的数据,例如昨天和今天都做2级备份,则今天的备份必然包含昨天备份的数据。 一次在同一个时候,数据库管理员所保留的数据备份磁盘最多应为三 个,即0级备份带、1级备份带和2级备份带。 一套完整系统备份还应该包括逻辑日志备份带。

1 建立数据备份
OnLine动态服务器7.1的命令行数据备份的方法使用ontape命令,数据备份的参数选项为-s,
$ ontape -s  

这时数据库服务器会提示你将作哪一级的数据备份,你只需在键盘上输入0、1或2,然后按 回车即可。
2 恢复数据备份
OnLine 动态服务器7.1的数据恢复既可以在 offline 状态下进行也可以在 online 状态下进行。
OnLine动态服务器7.1采用ontape来恢复数据,在命令行状态下,数据恢复的选项参数为-r,
$ ontape -r  


3 数据备份计划
有了一个良好的备份和恢复的工具以后,数据库管理员如何用好这个工具将是非常重要了。 能否用最少量的磁带、用最短的备份时间来保存最新的时间备份,其关键还在于数据备份的规划。
例如这样一个数据备份规划,每月的第一天作0级数据备份,每周的第一天作1级数据备份,每天作2级数据备份,当一天中同时需要作多个数据备份时,只做等级较低一级的数据备份。

第五节 数据储存实体镜象管理
数据储存块Chunk的镜像为数据库服务器系统的高可靠性和高可用性提供了必要的条件。 数据储存块的镜像保证了数据库服务器系统在一部分数据磁盘或磁盘控制器故障的时候, 数据 不受损失和数据库服务器系统的继续运行。
1 为数据储存实体增加镜像实体
数据储存块Chunk的镜像必须首先在定义该实体所在的数据库空间Dbspace是镜像的,也就是说如果整个数据库空间Dbspace没有定义成镜像的话,那么组成这个Dbspace的数据存储块Chunk也就不能作镜像。
1.1 数据库空间首先被定义为镜像
这就需要在定义rootdbs和在增加Dbspace时将该Mirror定义成Y。那么对于那些在定义和在 增加数据库空间Dbspace时没有定义Mirror为Y的情况怎样改成允许Mirror呢?这时需要数据库管理员首先将数据库服务器系统关闭,修改$INFORMIXDIR/etc/onconfig中的MIRROR。当数据库服务器系 统没有被定义为镜像的系统中,该项为0,而被定义为镜像的系统中,该项为1,因此对于那些需要 为没有定义成镜像的数据库服务器系统作数据库 空间镜像时,数据库管理员必须首先将该项改成1。

1.2 构造镜像
启动onmonitor,选择Dbspace菜单中的Mirror项打开数据库服务器系统镜像的开关。再选择 同一菜单中的Status选项,这里列出了所有的数据库空间的镜像情况,刚才增加镜像的数据库空间的状态为X,说明这个数据库空间Dbspace增加了新的镜像数据存储块。移动上下光标键,将选中项移 到Mirror为X的行,按Ctrl-B,管理员可以看到原数据储存块的Status为PO,而刚才增加的镜像数据存储块的Status为MD,标识该镜像实体还没有激活。移动上下光标键,将选中项移到刚才增加的镜 像数据存储块上,按Ctrl-B,这时数据库服务器系统自动进入recovery状态,在这个状态下,数据库 服务器系统将完成将原数据存储块中信息拷贝到镜像数据存储块的操作。等到全部操作结束,数据 库管理员完成了为一个数据库服务 器系统增加镜像 的工作。
或者通过命令形式构造镜像。
$  onspaces -m spacename -p path -o offset -m path offset [-y] 


2 恢复损坏的数据储存实体和镜像实体
当镜像中一对实体之一出现故障时,数据库服务器系统允许继续工作的,不必立即重构镜 像。 数据库管理员在一个适宜时候对这对实体重构镜像。
恢复损坏的镜像,需要首先确认实体所对应的磁盘介质是否已经恢复。
当更换了实体对应的磁盘介质后,需要操作系统上重新定义这个磁盘介质。在一般情况下,用户所定义的数据储存实体和镜像实体的名字是逻辑的, 因此只要重新将这个设备连接到原来 的逻 辑名字即可。对于那些在数据库服务器系统中直接定义物理设备名为数据存储块的用户,则必须把 新设备定义成原来损坏的设备名。
启动onmonitor,在 Dbspaces 菜单中选择Status项,这里列出了所有在数据库服务器系统中 定义的数据库空间Dbspace 的状态,可以看到镜像损坏的数据库空间的Mirror项为M*。移动上下光 标键,将选中行移动改行 ,按Ctrl-B。 这时管理员可以看到有损坏的数据存储块的 Status项为PD 或MD, 前者表示原数据储存实体损坏, 而后者表示数据镜像实体损坏。
--------------------------------------------------------------------------- 
Press ESC to return to the Status Menu. 
Move arrow keys to move the cursor 

                        CHUNKS FOR  account 

Chunk   Chunk       Pages    Pages   Full Pathname of Chunk       Status 
 id    Offset    In Chunk     used 

  1         0       50000    25000   /usr/informix/workdbs1_primary PO 
  2         0       50000    50000   /usr/informix/workdbs1_mirror  MD 
--------------------------------------------------------------------------- 


移动上下光标键,将选中行移至损坏的数据存储块上(/usr/informix/workdbs1_mirror),按 Ctrl-B。这时数据库服务器系统自动进入recovery状态,Status为MR,在这个状态下,数据库服务 器将完成这个数据库空间表的两个数据存储块的镜像重构的操作。完成这个操作后,数据存储块 /usr/informix/workdbs1_mirror的状态便从MR变成MO状态。
这样,数据库管理员完成了对损坏数据储存实体或数据镜像实体中数据的重构。

第五章 数据库服务器系统的安全机制
在一个运行的数据库服务器系统中,有可能会出现以下三种数据库服务器系统故障:
1. 由于主机服务器的非正常停机,例如断电等,而导致的数据库服务器系统异常;
2. 由于主机服务器系统的存放数据磁盘故障,而导致的数据库服务器系统异常;
3. 由于主机服务器的关键部件故障,而导致的数据库服务器系统异常。
对于以上三种数据库服务器系统异常,OnLine采用如下四种方案来实现数据库服务器系统高可靠性:
1.快速数据恢复机制使得主机服务器在非正常停机后的重启时,将未提交的事务滚回,以 恢复停机前的数据一致性;
2.数据库空间镜像机制使得主机服务器在存放数据一个磁盘发生故障时,能借助镜像数据 空间继续工作,数据库系统管理员可以在适当的时候去恢复故障的磁盘;
3.远程数据复制机制将一个主机服务器上数据库系统复制到远地的备份服务器上,当本主机 服务器故障时,数据库服务器系统借助远地的备份服务器继续工作;
4.增量数据备份,使得数据库系统管理员可以在监控和联机状态下进行三个等级的数据备 份。当系统需要使用磁带数据备份恢复时,快速而有效。 OnLine 动态服务器 7.1不但支持数据库系 统的冷恢复,还支持数据库系统管理员的热恢复,即允许数据库管理员在联机状态下,恢复损坏的 数据库空间。

远程数据复制
镜像数据存储块是数据库服务器系统的高可用性的一种方案。 OnLine 动态服务器7.1为数 据 库系统提供的另一种高可用性方案是远程数据复制。 通过网络连接起来的计算机系统的互为备 份 来 提高数据库服务器系统的可用性。

在这两个数据库服务器系统中,主数据库服务器Priamry Server可以接受数据的读写操作, 例如select、insert、update和delete,而备份数据库服务器Second Server仅可以接受读的操作,例如 select。 通常有主数据库服务器来承担企业事务处理的操作和批量数据修改的操作,备份数库据服 务 器承担企业内部的决策支持作业。为了提高主机服务器的利用率,
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]Informix入門-日誌分析.空間管理.SQL函數整理
Informix入門之---日誌分析

大家都知道informix是需要日誌的,但各日誌都做什麼用,各有什麼意義等等,我們在下面做一個探討:
首先需要說明的是informix的日誌有兩種:一種是物理日誌,用來存放數據的前映象;另一種是邏輯日誌,用來存放所有事物的操作過程。
在初始化的配置中,物理日誌和邏輯日誌的不是存放在根的磁盤空間的。默認的大小物理日誌2M,邏輯日誌6個,每個日誌文件2M。但在實際的生產環境中,這兩個參數一般是需要調整的。
從informix的本身的建議來說,要求邏輯日誌的大小一般是要求一天的業務量,邏輯日誌滾一圈,物理日誌/邏輯日誌=1/3。但是有的數據量很大的業務系統,這樣做是不可能的,要做適當的調整。
物理日誌文件的個數僅為1,邏輯日誌文件的個數最小為3,最大為32767。
關於物理日誌和邏輯日誌的改變,我們可以使用onparams命令來完成。
C:\Informix>onparams --
Usage: onparams -a -d <DBspace> [-s ] [-i] |
-d -l <log file number> [-y] |
-p -s [-d <DBspace>] [-y]
-a - Add a logical log file
-i - Insert after current log
-d - Drop a logical log file
-p - Change physical log size and location
-y - Automatically responds "yes" to all prompts

上面是onparams的幫助文件,
下面我們首先來改變物理日誌的位置和大小:
C:\Informix>onparams -p -s 40000 -d phydbs -y
Shutting down, please wait ...
Initializing, please wait ...
Recovering, please wait ...

可以通過onstat –l 中的phybegin來查看物理日誌當前存在了哪個chunk上。Physize來查看當前物理日誌文件大大小,單位是頁。
在這之前我們創建了phydbs,並指定了他大小。我們在-s後指定物理日誌文件的大小,在-d後指定物理日誌文件的位置。
接著我們來做邏輯日誌位置和大小的改變:
C:\Informix>onparams -a -d logdbs -s 30000 -i
Logical log successfully added.

然後用onstat –l來查看新加的邏輯日誌:
C:\Informix>onstat -l
IBM Informix Dynamic Server Version 9.40.TC2E1 -- Quiescent -- Up 00:08:10 -- 25728 Kbytes
Physical Logging
Buffer bufused bufsize numpages numwrits pages/io
P-1 0 8 8 7 1.14
phybegin physize phypos phyused %used
3:53 10000 12 0 0.00

Logical Logging
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io
L-3 0 8 37 14 14 2.6 1.0
Subsystem numrecs Log Space used
OLDRSAM 37 2628

address number flags uniqid begin size used %used
0CB37CA8 1 U-B---- 1 1:763 500 500 100.00
0CB37CE8 2 U-B---- 2 1:1263 500 500 100.00
0CB37D28 3 U-B---- 3 1:1763 500 500 100.00
0CB37D68 4 U-B---- 4 1:2263 500 500 100.00
0CB37DA8 5 U-B---- 5 1:2763 500 284 56.80
0CB37DE8 6 U---C-L 6 1:3263 500 315 63.00
0CED8B98 12 A------ 0 2:37553 7500 0 0.00
0CED8B58 11 A------ 0 2:30053 7500 0 0.00
0CED8B18 10 A------ 0 2:22553 7500 0 0.00
0CED8AD8 9 A------ 0 2:15053 7500 0 0.00
0CED8A98 8 A------ 0 2:7553 7500 0 0.00
0CED8A58 7 A------ 0 2:53 7500 0 0.00
12 active, 12 total

可以發現新加的邏輯日誌狀態都是A,先做0級備份ontape –s –L 0之後用onstat –l可以發現所有日誌的flag位都變成了F狀態。
然後用onmode –l切換邏輯日誌到新加的邏輯日誌,用onmode –c強製做檢查點操作。
最後用onparams –d –l log_file_num –y來刪除原來的邏輯日誌文件。
這樣就完成了informix日誌的遷移。
在onstat –l中,flag位表示了邏輯日誌的狀態,
A表示新加了還不能使用的日誌
F表示空閒的可以使用的日誌,一般是在0級備份之後才有這樣的狀態
U表示已經使用的邏輯日誌
L表示當前的日誌文件包含一個檢查點
C表示正在使用當前的日誌文件
B表示已經備份的日誌文件
一般在新增或刪除日誌文件之後都要做0級備份。
在onconfig文件中,LOGFILES指定了IDS邏輯日誌的個數,LOGSIZE指定了邏輯日誌的大小,PHYSDBS指定了物理日誌的位置, PHYSFILE指定了物理日誌大小。LTAPEDEV指定了邏輯日誌備份的位置,LTAPEBLK指定了每個block塊的大小,LTAPESIZE指定了備份文件的大小。
下面我們討論數據庫的日誌模式:
無日誌
無緩衝日誌
緩衝日誌
ansi模式
我們可以通過ontape 來改變日誌的模式
採用無日誌的方式時,所有的DML語句都不寫日誌,也就是說此時,數據庫不支持事物。當數據庫恢復系統備份的時候,無日誌的數據庫不能完全恢復。因為在備份中只記錄了備份時的狀態,備份後的數據庫的變化必須從邏輯日誌中恢復,所以這些改變是不可恢復的。
緩衝日誌:
所有的DML語句都寫入log buffer,當log buffer寫滿的時候,就開始寫入磁盤。這樣就可以大大減少磁盤的I/O,從而提高數據庫的性能。
但是在系統發生問題恢復的時候,緩衝區內的數據將丟失。這些數據是不可能恢復的。
無緩衝日誌模式:
所有的 DML語句在發生的時候是寫到緩衝裡的,但事物commit之後就立刻寫回磁盤,這樣在系統發生問題就保證了數據丟失的最少,但是增加了磁盤的I/O,所以數據庫的性能會受到一定的影響。
Ansi模式:
此模式和無緩衝日誌模式具有相同的日誌緩衝處理方法,但是此模式是不可逆的。
另外BLOB日誌的處理也是十分特別的,他不需要物理日誌,不寫前映象。BLOB頁是直接寫磁盤的,不經過共享內存的處理。任何BLOB空閒映象的改變都將記錄到邏輯日誌中,所有的blob spaces數據刷新到硬盤上是隨邏輯日誌的的備份而寫下去的。

Informix入門之---空間管理
說起數據庫就不能不說數據庫的存儲,說存儲就不能不說數據庫對空間的管理。這裡我們主要談的是IDS對空間的管理的相關問題。
從物理上來說,IDS管理的主要是page,chunk;從邏輯上來說主要是extent,tablespace,dbsapce。連續的page組成 extent,多個extent組成tablespace,dbspace用來邏輯的管理chunk,而每個tablespace又是建立在 dbsapce上的。
Chunk:一個單位的物理磁盤空間,在9.4版本之前不應許超過2G。一個chunk由path,offset,size三部分組成。因此我們在使用 onspaces命令來加chunk的時候這三個參數是必不可少的。理論上一個數據庫服務器上最多有2048個存儲塊,但是實際上由UNIX內核規定的一個進程所能打開的文件數來確定的。如果是使用cooked file來做為存儲,那麼offset可以設置為0,如果使用raw device來做為存儲,那偏移量不能為0,至少第一個CHUNK的offset不能為0。
Page:是一最基本的I/O單位。一個page的大小是由OS來決定的,有2K的,也有4K的。我們拿2K的來舉例說明。一個page有2048個 bit,頁頭由24bit組成,頁尾有一個4bit的時間戳,也就是說每一個page剩餘的空間只有2020個bit,另外在每一個page上還有一個槽表,一個槽表4bit,一條記錄對應一個槽表,這樣在每一個page上存放的記錄數就可以定下來。說這些的目的是為了說明在我們建表的時候儘量表不要建的太大,有的表一條記錄的大小就超過了一個page,這樣在讀取的效率上並不是太高。另外還有一個FILLFACTOR的參數決定了數據頁的填充程度,如果此值設置的不是太合理,經常上現節點分裂的情況,那對錶的讀取效率肯定是有影響的。
Extent:是磁盤上連續page的一組集合。在每個extent內的page都是連續的,在表中默認的extent的大小是16K, extent&的大小決定了表中數據存放的集中程度。如果數據存放的過與分散在做磁盤I/O的時間肯定會變長,一般的情況下每個表的extent 的大小建議不要超過50,如果太大,就需要做合理的調整。另外不能不提的是在隨著extent數目的增長,每次分出的空間的大小是不不一樣的,在每到16 的時候,就翻倍。例如第一個extent是16K,第17個extent就是32K,第33個就是64K了,在翻倍的增長。
Tablespace:是extent的邏輯集合。各個extent在物理上不一定是連續的。
Dbspace:是一組chunk的邏輯集合。一般是把裸設備的chunk放在一個dbspace中,或者把一組熟文件放在一組chunk中,也有的把裸設備和熟文件放在一組dbspace中,但不建議這麼做。
其實在dbsapce中又有三類,一類就是一般的存放數據的dbsapce,另一類就是tempdbspace,還有一種是blobspace。第一種我就不說了。我們先說blobsapce.
Blobspace:blobspace是一組邏輯組織的chunk,但是是用來存儲byte和text類型的數據。Blobspace中不能存放行或索引,只能存放存儲了blob的頁面和存儲了關於BLOB的系統信息頁面。因為blobspace中的BLOB頁面的大小是在創建的時候指定的,所有一個 blobspace中的所有BLOB頁面大小相同。對BLOB的寫,是沒有在緩衝池中緩衝的,因此BLOB的值不寫邏輯日誌文件。當修改了BLOB的值之後,應該在磁盤上流出足夠的空間以放BLOB的初始值和修改值。
Tempdbspace:是一組臨時的dbspace。他在DBSPACETEMP參數中指定。需要在onspaces創建的時候加上-t的參數。對 tempsaces的操作是不寫邏輯日誌的。在創建臨時表和做group by ,order by,使用join語句,創建index的時候都是需要臨時空間的。一般的情況下所有的tempspace的大小為正常業務數據的10%。如果太小了很大的操作就會出問題。
Select * from tab_a insert into temp tab_b是不寫到tempdbspace的。
Select * from tab_a insert into temp tab_b with no log才寫到tempdbspace。

Informix入門之---SQL函數整理
聚集函數:
avg,求平均值
count,統計記錄的條數
max,求最大值
min,求最小值
range,計算所選行的最大值與最小值的差
stdev,計算所選行的標準偏差
sum,求和函數
variance,函數返回值樣本的方差做為所有選擇行的方差的無偏估計。
它的公式,(sum(xi**2)-sum(xi)**2)/N)/(N-1)
其中xi是列中的每個值,N是列中值的總和。
時間函數:
day,mdy,month,weekday,year 這些函數返回與用來調用函數的表達式或自身變量的值。Current返回當前的日期和時間值,可以用extend函數來調整date或datetime值的精度。
使用day和current 函數來將列值與當前日期進行比較。
Date函數將字符串函數轉換為DATE值。例date(『12/7/04’)
To_char函數將datetime和date值轉化為字符值。
To_date函數將字符值轉化為datetime類型的值。例to_date(「1978-10-07 10:00」 ,」%Y-%m-%d %H:%M)
基數函數:
cardinality(僅適用IDS)函數對集合包含的元素數目計數。
智能大對象函數,(僅適用與IDS)
filetoblob( ),將文件複製到BLOB列中
filetoclob( ),將文件複製到CLOB列中
locopy( ),將BLOB或CLOB類型的數據複製到另一個BLOB或CLOB列中
lotofile( ),將BLOB或CLOB複製到文件中
字符串處理函數:
lower,將字符串中每個大寫字母轉換為小寫字母
upper,將字符串中每個小寫字母轉換為大寫字母
initcap,將字符串中每個詞的首寫字母轉換成大寫
replace,將字符串中的某一組字符轉換成其他字符,例replace(col,」each」,」eve」)
substr,返回字符串中的某一部分,例substr(col,1,2)
substring,返回字符串中的某一部分,例substring(col,from 1 to 4)
lpad,使用lpad函數已用重複次數達到必要次數的字符序列在左邊填充或截斷的字符串的副本,這取決於字符串中填充部分的指定長度。
舉例:字段 col 為char(15)類型,select lpad(col,21,」_」) from tab_name則顯示為在col前加上六個_。
Rpad,使用rpad函數已用重複次數達到必要次數的字符序列在右邊填充或截斷的字符串的副本,這取決於字符串中填充部分的指定長度。
舉例:字段col為char(15)類型,select rpad(col,21,」_」) from tab_name則顯示為在col後邊加上六個_。
其他函數:
hex,返回表達式的十六進制數
round,返回表達式的四捨五入值
trunc,返回表達式的截斷值
length,計算表達式的長度
user,返回執行查詢的用戶的用戶名(登陸帳戶名)
today,返回當前系統日期
dbservername,返回數據庫服務器的名稱,同sitename
dbinfo,返回數據庫的相關信息
decode,函數來將一個具有一個值的表達式轉換為另一個值
decode(test,a,a_value,b,b_value,c,c_value……),decode函數不支持TEXT和BYTE類型。
Nvl,來將求值為空的表達式轉化為另一個想要指定的值。
另外還可以在select語句中使用存儲過程,如select spl($test) from tab_name

如有不對或不全面的地方請大家跟貼說明,謝謝。
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|