收藏 分享(赏)

informix-体系.doc

上传人:cjc2202537 文档编号:1411748 上传时间:2018-07-14 格式:DOC 页数:14 大小:125KB
下载 相关 举报
informix-体系.doc_第1页
第1页 / 共14页
informix-体系.doc_第2页
第2页 / 共14页
informix-体系.doc_第3页
第3页 / 共14页
informix-体系.doc_第4页
第4页 / 共14页
informix-体系.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、Informix 动态服务器采用的是一种多线索体系结构,这就意味着一个进程利用自己的多个线索可以同时完成多个任务,因而整个系统只需要较少的进程就足以完成 DBMS 的任务。 动 态服务器系统由三个主要组件构成:共享内存,进程和磁盘。共享内存包括三个段:驻留段。虚拟段和消息段。驻留段主要用作磁盘数据的缓存。虚拟段主要用作内 存池以支持进程及相关的会话(session) 和线索。当客户与服务器利用共享内存进行通信时,消息段将用作两者之间的消息缓冲区。 系统中还包括若干构成数据库服务器的 UNIX 进程,称为 oninit.这些进程被称为虚拟处理器(VP )(virtual processors)。

2、每一 VP 隶属于某一虚拟处理类。而每一虚拟处理器类都负责完成一类特定的任务。 系统的磁盘组件由多个原始磁盘空间组成,称为 chunk,chunk 以页(page)为基本单位。多个 chunk 集合逻辑上构成了数据空间(dbspace) 。数据空间用于存储数据库、表、系统信息以及物理日志和逻辑日志。一个数据空间至少包括一个 chunk. 共享内存段 动态服务器的共享内存由三个段构成: 驻留段主要用作缓冲池,内含逻辑日志和物理日志的缓冲区以及其他系统数据结构。驻留段的大小主要有系统参数 BUFFERS 决定。虚拟段主要用作内存池以支持会话和线索。根据用途的不同,内存池可以进一步分为:会话池、多线

3、索池、字典池、存储过程池、排序池、大缓冲池以及全局 池。内存池的分配和释放是动态进行的。内存池分配单位大小为 8k。如果已有虚拟段耗尽,动态服务器可以根据 onconfig 参数再次动态申请。虚拟内存段 的初始大小由参数 SHMVIRTSIZE 决定,其增量由参数 SHMADD 决定,但整个共享内存段的大小不能超过 SHMTOTAL。如果客户与服务器利用共享内存进行通讯,消息段将用作通讯缓冲区。每一用户连接(利用共享内存进行通讯)大致占用 12K 空间。用户连接的数量在参数 NETTYPE 中定义。用户可以利用 ipcs 或 onstat-gseg 命令来监控共享内存段的状态。 虚拟处理器(V

4、irtualProcessors) 虚拟处理器类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 将传至

5、光盘子系统 oninit ADT 类:运行安全审计线索 数 据库系统服务器由若干称为 oninit 的 UNIX 进程组成,在系统中这些进程被称为虚拟处理器(VP )。所有 VP 都是可执行程序 oninit 的实体。每一 VP 属于一种特定的虚拟处理器类,而不同的虚拟处理器类分别完成不同的任务。每一虚拟处理器可含的 VP 数量由下列参数决定:CPU NUMCPUVPS AIO NUMAIOVPS PIO 自动启动一个 VP。如果物理日志被镜像,将启动两个 VP LIO 自动启动一个 VP。如果逻辑日志被镜像,将启动两个 VP SHM NETTYPE TLI NETTYPE SOC NETTY

6、PE MSC 自动启动一个 VP ADM 自动启动一个 VP OPT STAGEBLOB 被设置,然后自动启动一个 VP ADT ADTMODE 被设置,然后自动启动一个 VP 用户可以利用 PS 或者 onstat-gglo 命令监控 VP 的状态 线索 onstat-gath 显示所有线索 onstat-gact 显示活动线索 onstat-grea 显示所有就绪线索 在 动态服务器中,线索是在 oninit 中的一段被执行的指令流。通过多线索机制,可以让一个进程同时为多个任务服务而不必生成多个 OS 级进程。进程 oninit 可以启动多个线索,各线索顺序执行,并在适当地时候把控制权转移

7、给其它线索。在多线索进程中每一线索都有自己的执行环境,包括自己的代码空间 和自己的局部变量。一个多线索进程负责多个线索间的正文切换。 在系统中,线索只能有两种存在状态:要么正在某个 VP 上运行,要么在某一队列排队等待。在就绪队列中保存了所有已就绪只待执行的线索的正文。一旦出现空闲 VP,该 VP 就从就绪队列中选取一个线索执行,而选取的标准由内部的优先机制决定。 在特定的时候,当前运行的线索会把对 VP 的控制权转移给其它线索。有如下几种可以导致控制权的转移: 等待磁盘读写操作 等待应用程序的请求 等待获得锁或其它资源 将运行机会转给其它线索 一旦线索交出控制权,该线索的 context 就

8、将被列入等待或睡眠队列中。所有等待某种操作的线索进入等待队列,而所有需要稍后被唤醒的线索进入睡眠队列。 磁盘组件 在动态服务器中以页(page)作为基本存储和 I/0 单位。页大小因机器和操作系统的不同而不同,一般为 2k,也可能为 4k,用户无法改变页大小。 分配给系统使用的连续磁盘空间的单位称为 chunk。chunk 由多个页构成。它是一个典型的 UNIX 原始设备。chunk 的大小由系统管理员设定。数据空间(dbspace) 是多个 chunk 的逻辑集合。每一数据空间至少包括一个 chunk。数据库和表创建在指定的数据空间上。系统必须至少包括一个数据空间:rootd bspace。

9、在该空间中存储着关于系统的信息。物理日志(physica llog)由连续的磁盘空间构成,其存储着共享内存缓冲区中所有已修改的数据页(但尚未写入磁盘中)被修改前的映象。因而物理日志主要用于快速恢复。只有当数据页在首次被修改时,系统才会将其映象写入物理日志。逻辑日志(logical logs)也是由连续的磁盘空间构成,其存储着事务记录、DDL 语句和 checkpoint 记录。由管理员设定逻辑日志的数目。系统循环使用逻辑日志。在系统第一次初始化时,物理日志和逻辑日志都自动建立在 root dbspace 上。Informix IDS 基本体系结构及调优简介 IDS 的基本体系结构包括三个主要组

10、件:数据存储器、内存结构和后台处理器或虚拟处理器。本文将详细地讨论每一个组件,并提供一些关于如何主动监控数据库引擎的性能,以及如何更为积极主动地进行调优的实用技巧。 确切地说,本文将详细地讨论下列主题: 数据存储器及调优指南 内存结构及调优指南 后台处理器及调优指南 数据存储器及调优指南磁盘是 IDS 的基本数据存储设备。IDS 可以使用两种类型的磁盘设备:成熟的(cooked)磁盘设备和原始的(raw)磁盘设备。成熟的磁盘设备指的是安装到操作系统的磁盘区域,其中包含了常规文件和文件系统。成熟的磁盘设备对用户来说是可视的。在 Unix 系统中,您可以使用命令 df -k 来显示系统上的所有成熟

11、磁盘设备。例如:sys3508:omcadmin df -kFilesystem kbytes used avail capacity Mounted on/dev/md/dsk/d0 1094523 669404 370393 65% /dev/md/dsk/d8 7560147 5601614 1882932 75% /usr/proc 0 0 0 0% /procfd 0 0 0 0% /dev/fdmnttab 0 0 0 0% /etc/mnttab/dev/md/dsk/d36 2285263 1440973 798585 65% /varswap 1025776 8 102576

12、8 1% /var/runswap 1060400 34632 1025768 4% /tmp/dev/md/dsk/d16 10912273 6242461 4560690 58% /usr/gsm/ne_data/dev/md/dsk/d12 3009327 1121085 1828056 39% /usr/gsm/logs以上输出指出了系统上所有的成熟磁盘设备。Filesystem 列显示了所有成熟磁盘设备,而 Mounted on 列显示了相应设备上安装的所有文件系统。例如,设备 /dev/md/dsk/d0 安装在 / 或根文件系统上,/dev/md/dsk/d36 安装在 /var

13、 文件系统上,/dev/md/dsk/d16 安装在 /usr/gsm/ne_data 文件系统上等。Kbytes 列展示了该设备所占的磁盘总空间,used 展示了该设备当前已使用的磁盘空间,而 avail 列则展示了该设备可用的剩余磁盘空间。另一方面,原始磁盘设备指的是无法安装到操作系统的磁盘片,对用户来说是不可视的。Informix 建议尽可能地使用原始磁盘设备,因为原始磁盘设备不用安装到操作系统上,并可以将数据服务器内存中的数据直接传送到磁盘上,而无需先将之复制到操作系统的内存池中,这比成熟的磁盘设备要快得多。此外,原始设备比成熟设备安全,因为对用户而言,它们是不可视的(除了 root

14、用户)。使用文件系统作为数据存储设备有一个潜在的危险,当文件系统由于某些操作系统的错误而崩溃,且有一个数据库事务正在进行时,数据库服务器将认为数据库事务已经成功完成,但实际上,该事务正陷入操作系统缓冲区中;这最终将导致数据库中的某些不一致。关于如何为 IDS 分配成熟和原始磁盘设备的详细过程,请参阅 IBM Informix Dynamic Server Administrators Guide,Version 9.4(本文后面将称作 Administrators Guide)。Informix Dynamic Server 在 dbspace 中存储其数据。dbspace 是 Informi

15、x 的数据存储单元,它包含一个或多个块(chunk),更确切地说是由一个或多个块来支持。块(chunk)在术语上是指磁盘上的连续空间。在 IDS 9.40 之前的 IDS 版本中,对于块的最大长度具有一个硬限制;一个块不能超过 2 G。从 IDS 9.40 开始,如果在大块(large chunk)模式下配置 IDS,则取消这一限制。这是一项革命性的提高;通过这项提高,IDS 可以更有效地利用磁盘空间,并更容易地管理它们。IDS 使用 onspaces 实用程序来配置和管理 dbspaces。以下是 onspaces 实用程序的用法:$ onspaces -Usage:onspaces -a

16、spacename -p path -o offset -s size -m path offset -Mo mdoffset -Ms mdsize | -U | -c -d DBspace -t-p path -o offset -s size -m path offset | -b BLOBspace -g pagesize-p path -o offset -s size -m path offset | -S SBLOBspace -t -p path -o offset -s size -m path offset-Mo mdoffset -Ms mdsize -Df default

17、-list | -x Extspace -l Location | -d spacename -p path -o offset -f -y | -fy off DBspace-list | on DBspace-list | -m spacename -p path -o offset -m path offset -y |-f filename | -r spacename -y | -s spacename -p path -o offset -O | -D -y | -ch sbspacename -Df default-list | -cl sbspacename -a - Add

18、a chunk to a DBspace, BLOBspace or SBLOBspace-c - Create a DBspace, BLOBspace, SBLOBspace or Extspace-d - Drop a DBspace, BLOBspace, SBLOBspace, Extspace, or chunk-f - Change dataskip default for specified DBspaces-m - Add mirroring to an existing DBspace, BLOBspace or SBLOBspace-r - Turn mirroring

19、off for a DBspace, BLOBspace or SBLOBspace-s - Change the status of a chunk-ch - Change default list for smart large object space-cl - garbage collect smart large objects that are not referenceddefault-list = LOGGING = ON|OFF ,ACCESSTIME = ON|OFF,AVG_LO_SIZE = 1 - 2097152 只有用户 Informix 或具有 DBA 权限的用户

20、可以使用此实用程序。那么,我们该如何配置 dbspaces 呢?没有一套硬性规则;适当的配置应基于您系统上的可用磁盘。但是为了最优化整体性能,Informix 为我们提供了一些指南,其中最为关键的就是为不同的数据配置不同的 dbspace。我们可以将 IDS 数据分成下列几类:逻辑日志数据;由逻辑日志生成的数据; 物理日志数据;由物理日志生成的数据; 表数据;数据库表中的数据; 索引数据;由表上的索引生成的数据; 二进制对象数据,如大型文本和内部图形; 临时数据;通过对表进行排序、更改和创建索引而生成的数据。 首次初始化 IDS 时,它会将其所有的数据、逻辑日志数据、物理日志数据和其他临时数据

21、放置在根 dbspace 中。为了获得高性能,我们需要创建不同的 dbspaces,并且将逻辑日志数据和物理日志数据从 rootdbspace 移出。将索引数据从表数据中分离出来也是有益的。在为临时数据创建临时 dbspace 之后,Informix 还建议将 DBSPACETEMP 配置参数设置为您系统上所配置的多个临时 dbspace 的名称,这将减少磁盘 I/O,如果将 PDQPRIORITY 设置为大于 0 的值,这将提高创建临时表的速度,并允许并行排序或插入。另一重要指南就是在磁盘中分散 dbspace。这当然要受到硬件拓扑的限制,但其思想就是将关键的 dbspace(例如根 dbs

22、pace、逻辑日志 dbspace 和物理日志 dbspace)放置在更快的磁盘上,因为那些 dbspace 将进行大多数的磁盘 I/O 活动,并且也会将磁盘 I/O 负载均衡地分散在磁盘中。创建了合适的 dbspace 之后,我们需要不断地监控那些 dbspace 上的磁盘 I/O 活动,识别是否存在过热点(hot spot),并且在必要时对其进行调优,以获取更好的性能。Dbsapce I/O 是通过磁盘读写来衡量的。如果某些 dbspace 具有较多的磁盘读写,而其他磁盘却较为空闲,那么该系统可能存在磁盘 I/O 瓶颈。较为平衡的 dbspace I/O 将缓解系统磁盘 I/O 负载,从而

23、提高系统的整体性能。下列脚本将显示当前每个 dbspace 的 I/O 统计信息:select d.name, fname15,25 path_name, sum(pagesread) diskreads, sum(pageswritten) diskwrites from syschkio c, syschunks k, sysdbspaces d where d.dbsnum = k.dbsnum and k.chknum = c.chknum group by 1, 2 order by 1其输出结果如下:name path_name diskreads diskwrites airge

24、n_10_0 uild95/ltmp 3672 7964 airgen_main_dbs uild95/ltmp 13545 32903 llog uild95/ltmp 19 51633 rootdbs uild95/ltmp 211 43117 temp1 uild95/ltmp 3015 3122 temp2 uild95/ltmp 3218 3317您可以通过查询 sysmaster 数据库中的 sysptprof 表,进一步确定哪些表具有多数磁盘读写:select dbsname, tabname, (isreads + pagreads) diskreads, (iswrites

25、+ pagwrites) diskwrites from sysptprof order by 3 desc, 4 desc其输出如下所示:dbsname tabname diskreads diskwrites airgen_10_0 fanout_param 84567 3094 airgen_main_dbs sysindices 78381 0 airgen_10_0 ne_nmo_i 75819 5 airgen_10_0 ne_nmo 75440 297 airgen_main_dbs ne_main 62610 28322 airgen_10_0 systables 37342

26、466 airgen_10_0 syscolumns 34539 4609 airgen_10_0 457_484 32838 42 airgen_10_0 453_480 30009 1 airgen_main_dbs syscolumns 29531 4550 airgen_10_5 syscolumns 28824 4552 airgen_10_0 456_483 25448 14 airgen_10_0 458_485 23278 177 airgen_main_dbs 452_483 22412 31基于该查询所获得的输出,您可以发现 airgen_cm_db 数据库中的 ne_ma

27、in 表具有最多磁盘 I/O,如果当前 dbspace 所承受的磁盘 I/O 过于繁重,那么可以考虑将该表移到另一 dbspace 中。内存结构及调优指南内存结构是 IDS 体系结构中最为复杂的组件。因为 IDS 使用的内存部分被数据库服务器线程以及其他用户和虚拟进程共享,因此该部分内存通常被称作共享内存。由于参与进程(在本例中是虚拟处理机)不需要维护共享内存中的私有数据副本,共享内存可以使数据库服务器减少总的内存使用。共享内存还能减少磁盘 I/O,这是因为作为公共池来管理的缓冲区,是在数据库服务器级基础上而不是在每进程基础上被刷新的。而且,因为这些数据已经作为前面读取操作的结果存在于共享内存

28、中了,所以虚拟进程通常可以避免从磁盘读取数据。磁盘 I/O 的减少也减少了执行时间。共享内存提供了最快地进行进程间通信的方法,因为它以内存转换的速度来处理读写消息。在初始化 IDS 时,它就创建了共享内存,其中包括以下 4 个区(portion):常驻区(resident portion); 虚拟区(virtual portion); IPC 通信或消息区(IPC communications or message portion); 虚拟扩展区(virtual-extension portion)。 现在,让我们仔细地看看每一部分,并查看其内容以及它们分别是如何工作的。常驻部分存储数据库服务

29、器运行时大小固定的数据结构,它具有下列几个部分:共享内存头 缓冲池 逻辑日志缓冲区 物理日志缓冲区 锁表 共享内存头包含共享内存中所有其他结构的描述,包括内部表和缓冲池。它还包含到这些结构位置的指针。当一个虚拟进程首次附加到共享内存中时,它读取共享内存头中的地址信息,获取指向其他所有结构的方向。共享内存头是在初始化 IDS 时创建的,并且不能进行调优。缓冲池存储 IDS 从 dbspace 所读取的数据,更确切地说是数据库对象数据,例如表数据和索引数据,或者是从磁盘所读取的存储过程。然后,ESQL 或其他客户程序将操作该数据。缓冲池占用了常驻区中最大的部分。所有的缓冲区将被组织到一个较长的最近

30、最少使用(least-recently-used,LRU)缓冲区队列中,并通过最近最少使用(LRU)机制进行管理。缓冲区的获取是通过使用锁存器(latch)和锁访问信息来管理的,该锁存器称作 mutex。逻辑日志缓冲区是用来存储最后一次备份开始的逻辑日志记录的。逻辑日志记录保存了 SQL 语句对数据库数据进行的修改。在初始化 IDS 时,它创建三个逻辑日志缓冲区。那些逻辑日志缓冲区以循环方式起作用,以确保将获得的每一条逻辑日志记录都被刷新到磁盘中。物理日志缓冲区被用来保存缓冲池中已修改数据库记录的前映像(before-image)。在 IDS 删除或修改一条数据库记录之前,它将捕获这一原始记录

31、的快照并存储其原始值,以防事务失败。这就称作前映像(before-image),被用于恢复数据,确保了数据库的完整性。在初始化 IDS 时,它创建了两个物理日志缓冲区,而它们与逻辑日志缓冲区一样,以循环方式运作。锁表是一个包含可用锁的池;每个用户会话都需要一定数量的锁来连接数据库服务器并执行数据库操作,例如 select、insert、delete 和 update。除了共享内存头之外,所有这些部分都是可以控制并用 Informix 配置参数进行调优的。下表列举了与 IDS 共享内存的常驻区有关的所有配置参数: 常驻区 参数缓冲池 BUFFERS逻辑日志缓冲区 LOGBUFF物理日志缓冲区 P

32、HYSBUFF锁表 LOCKS整个区 RESIDENTBUFFERS 指定共享内存缓冲区的最大数目;LOCKS 指定用户会话可以使用的锁的最大数目。该数目过去是固定不变的,但在 IDS 的后来版本(IDS 9.20 以及更高版本)中,当用户会话缺少锁时,就可以动态地分配锁。LOGBUFF 指定逻辑日志缓冲区的大小,而 PHYSBUFF 指定物理日志缓冲区的大小。RESIDENT 指定数据库服务器共享内存的常驻区的位置;无论我们是在系统上的物理 RAM 中锁定它,还是让操作系统决定在 RAM 还是在虚拟内存中放置它,Informix 总是建议尽可能地在系统的物理 RAM 中锁定常驻区,以避免操作

33、系统与磁盘交换共享内存的常驻区,从而取得更好的性能。共享内存的虚拟区十分复杂;它存储各种各样的不同数据。以下是共享内存的虚拟区存储的数据列表:内部表 较大的缓冲区 会话数据 线程数据(堆栈和堆) 数据分布缓存器 字典缓存器 SPL 例程缓存器 SQL 语句缓存器 排序池 全局池 内部表是在初始化 IDS 时创建的。一共有 7 种内部表。那些内部表的目的和功能是为了记录共享内存资源的状态和使用,例如缓冲区、块、dbspace、事务等。较大的缓冲区用于大型的读写 I/O 操作。例如,若数据库服务器试图执行一系列连续的读取(light scan),或者将存储在 dbspace 中的简单大对象读取到共

34、享内存中,那么 IDS 将为该操作分配较大的缓冲区。会话数据也称作会话控制块,它存储会话 ID、用户 ID、客户机的进程 ID、主计算机名称以及客户机应用程序请求连接到数据库服务器时的各种状态标志。线程数据指的是会话的线程信息、有关该会话的基本线程和其他线程信息。它包括与该线程堆栈和堆有关的信息。排序池用于下列操作:包含连接、分组、聚集和排序操作的决策支持查询 索引构建 SQL 中的 UPDATE STATISTICS 语句 数据库服务器分配给排序的虚拟共享内存的数量取决于要进行排序的行数、每一行的大小以及是否为服务器设置了 PDQPIORIDY。全局池存储对于数据库服务器来说是全局性的结构。

35、例如,全局池包含消息队列,其中用于网络通信的 poll 线程存放来客户机的消息。sqlexec 线程从全局池中取得消息并加以处理。所有那些区域基本上都是由 IDS 本身来控制和管理的;我们几乎不用做任何事情。但是,我们控制所有类型的缓存器,数据分布缓存器、字典缓存器、SPL 例程缓存器和 SQL 语句缓存器。我们还控制尺寸过大的虚拟内存。控制那些部分的方法就是调优下列配置参数:虚拟内存区域 参数数据分布缓存器 DS_POOLSIZEDS_HASHSIZE数据字典缓存器 DD_HASHSIZEDD_HASMAXSPL 或 UDR 例程缓存器 PC_HASHSIZEPC_POOLSIZESQL 语句缓存器 STMT_CACHESTMT_CACHE_SIZE总的虚拟内存 SHMADDSHMTOTALSHMVERSIZE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报