第5、6章 虚拟处理和线程 管理虚拟处理器

第5章 虚拟处理和线程

第6章 管理虚拟处理器

[@more@]

一、虚拟处理器(VP)
数据库服务器进程称为虚拟处理器,因为它们运行的方式类似于 CPU 在计算机中的运行方式。正如 CPU 运行多个操作系统进程为多个用户提供服务一样,数据库服务器虚拟处理器也运行多个线程为多个 SQL 客户机应用程序提供服务。

虚拟处理器是由操作系统为了在CPU上执行而调度处理的进程(任务)。

二、(数据库服务器)线程
线程是虚拟处理器的一个任务,这与虚拟处理器是 CPU 的一个任务是一样的。

数据库服务器线程是虚拟处理器为处理而内部调度的线程(任务)。
可以简单将数据库服务器线程分为用户线程和内部/系统线程。
1.用户线程是为来自客户机应用程序的请求提供服务的数据库服务器线程
2.内部线程是数据库服务器为完成数据库 I/O、日志记录 I/O、页清除以及管理任务来创建的线程
用户线程包括会话线程(称为 sqlexec 线程)、来自 onmode 实用程序的请求提供服务的线程、用于恢复的线程、B 树扫描程序线程以及页清除程序线程。

大多数情况下,对于客户机应用程序的每个连接,数据库服务器都会运行一个会话线程,这些线程是数据库服务器为了向客户机应用程序提供服务而运行的主线程。

要显示活动用户线程,请使用 onstat -u。

四、VP的类(VPCLASS):
见下图

admin011.gif

1、CPU VPCLASS: 运行所有用户线索和部分内部/系统线程
(1)如何确定CPU VP的数量:
CPU VP 的正确数量是它们都保持繁忙时的数量(但不能繁忙到不能处理所有进入的请求)。
不应该分配比计算机中的硬件处理器数量更多的 CPU VP。
在数据库服务器运行时评估 CPU 虚拟处理器的性能,请在规定的时间段中定期重复以下命令:

onstat -g glo
如果累积的 usercpu 和 syscpu 时间加在一起达到测试周期的实际经过时间的100%,则添加另一个 CPU 虚拟处理器(如果您有 CPU 可用来运行它)。

VPCLASS CPU 配置参数允许您指定所有以下信息:(注意VPCLASS CPU 参数会与NUMCPUVPS 参数冲突,而导致错误)

a.CPU VPCLASS: 要最初启动的虚拟处理器数
b.CPU VPCLASS: 要运行的最大虚拟处理器数
c.CPU VPCLASS 的处理器亲缘关系。如: VPCLASS CPU,num=3,aff=1-3 表明有3个CPU 类型的 VP ,它们使用编号1-3的物理CPU。
d.禁用优先级迟滞(如果适用)。优先级迟滞是指某些OS会将降低长时间运行进程的优先级。也即会导致数据库服务器进程的性能随着时间的流逝而降低。可用 noage 来禁用。

(2)在多处理器计算机上运行
应将ONCONFIG 文件中的 MULTIPROCESSOR 参数设置为 1

(3)在单处理器计算机上运行
应将 MULTIPROCESSOR 配置参数设置为 0。要仅用一个 CPU VP 运行数据库服务器,应将 SINGLE_CPU_VP 参数设置为 1。

2、PIO VPCLASS: 物理日志的磁盘I/O
3、LIO VPCLASS: 逻辑日志的磁盘I/O
4、AIO VPCLASS: 磁盘异步I/O。用来执行数据库IO(数据库IO 包括SQL语句IO、页清除IO、预读IO、检查点IO)。
使用 VPCLASS 参数连同 4、AIO 关键字可指定数据库服务器最初启动的 AIO 虚拟处理器数。
可以在数据库服务器处于联机方式时启动额外的 AIO 虚拟处理器。
但是不能在数据库服务器处于联机方式时删除 AIO 虚拟处理器。
onstat -g ioq 命令允许您监视 AIO 虚拟处理器的 gfd 队列的长度。可根据情况分配 AIO VP,保证足够的 AIO VP 以使 I/O 请求队列的长度可以保持较短;
一般当服务器检测到AIO VP的处理速度跟不上I/O 工作负载时,系统会根据 AUTO_AIOVPS 配置参数来决定是否启用自动增加 AIO VP 和 flusher 线程的数目。

5、SHM VPCLASS: 运行共享内存通讯线程
6、TLI VPCLASS: 运行内部TLI网络通讯线程
对于大多数系统,每个接口/协议有一个VP就足够了
7、SOC VPCLASS: 运行内部Sockets网络通讯线程
8、OPT VPCLASS: 负责管理BLOB将传至光盘子系统
9、ADM VPCLASS: 运行管理功能线程
10、ADT VPCLASS: 运行安全审计线程
11、MSC VPCLASS: 为需要很大堆栈的系统调用的请求提供服务
12、CSM VPCLASS: 通信支持模块
13、ENCRYPT VPCLASS: 加密
使用带 encrypt 关键字的 VPCLASS 配置参数可配置加密 VP。例如:要添加 5 个 ENCRYPT VP,请在 ONCONFIG 文件中按如下所示添加信息:
VPCLASS encrypt,num=5
按如下所示,您可使用 onmode 实用程序修改相同的信息:
onmode -p 5 encrypt

14、COU VPCLASS: 在 COU VP 上运行 KAIO 线程实现 KAIO (内核异步I/O)
在linux下内核异步I/O在缺省情况下是启用的,可以使用 KAIOOFF=1 来禁用。
/proc/sys/fs/aiomax-nr 中包含系统允许最大并行KAIO的数量
/proc/sys/fs/aio-nr 中包含系统已分配的KAIO的数量

15、XXX VPCLASS: 用户自定义的VPCLASS,也称为“扩展虚拟处理器类”
(1)用户可使用C语言编写外部程序
(2)可使用 CREATE FUNCTION 为用户的方法指定 用户自定义的VPCLASS ,比如
CREATE FUNCTION GreaterThanEqual(ScottishName, ScottishName)
RETURNS boolean
WITH (CLASS = LILEIVP ) EXTERNAL NAME '/usr/lib/objects/udrs.so'
LANGUAGE C
则表示在用户自定义的VP:LILEIVP中调用用户自定义的外部程序 /usr/lib/objects/udrs.so 来执行函数 GreaterThanEqual()。(呵呵,SQL SERVER 2005以后也支持在数据库中调用CLR的方法了。)
(3)如果要执行这个函数,则在ONCONFIG 文件中必须包含: VPCLASS 用户自定义的VPCLASS名 ... 比如:
VPCLASS LILEIVP ,num=2,noage

16、JVP VPCLASS:JAVA虚拟处理器
17、NOYIELD VPCLASS:非中止虚拟处理器
18、ntk 《IBM Informix Dynamic Server 管理员参考大全》P1-104
19、str 《IBM Informix Dynamic Server 管理员参考大全》P1-104
20、kio 《IBM Informix Dynamic Server 管理员参考大全》P1-104

注意
1、没有 KAIO 这类 VP,因为 KAIO 线程是由 COU VP 来执行的。
2、如果 OS 不支持 KAIO,除了日志(逻辑日志IO由LIO完成,物理日志IO由PIO完成)以外的数据库 IO 都由 AIO 来执行。
3、如果 OS 支持 KAIO,则 KAIO 线程都由 CPU VPCLASS 来执行。所有的 IO ,包括日志 IO 都由 KAIO 线程来执行。
4、gfd 队列:数据库服务器会根据块的名称为每个块指定一个队列,该队列即 gfd 队列。
5、数据库服务器为每类 nettype 运行N>=1个轮询线程。轮询线程可运行在 CPU VP 或 网络 VP (包括SOC,TLI,STR,SHM)上。
每个轮询线程需要单独的 VP 。共享内存连接(ipcshm)的轮询线程只能在CPU VP,而TCP连接的轮询线程只能在 NET VP 上。《IBM Informix Dynamic Server 管理员参考大全》P1-68,P1-104
6、当启动服务器时,oninit 进程为每个 dbservername 启动一个监听线程(listen thread 或侦听线程)。监听线程打开端口,并请求指定的轮询线程监视客户机的请求。
7、当轮询线程接收到客户端请求时,轮询线程把该请求转给该端口的监听线程。监听线程认证该用户,创建到服务器的连接并启动 sqlexec 线程。监听线程建立连接以后,通常轮询线程从客户机读取数据,sqlexec 线程将数据发送到客户机。

五、VP的好处
1、共享处理:
在数据库实例中属于同一种类的VP可能会有多个。比如实例中有3个SOC类型的VP,则这3个VP共享对内存中的数据和处理队列的访问。但在给定的时间中,一个VP只可运行一个线程。VP通过在多个线程之间切换来并发地为这些线程提供服务。VP运行线程直到其中止。当一个线程中止时,VP将切换到下一个已准备好运行的线程。VP将继续此过程,并且最后在原始的线程准备好继续时返回到该线程。有些线程完成了它们的工作,VP会启动新线程来处理新的工作。因为多个VP不断进行线程之间切换,所以它可以使 CPU 不断保持处理。发生处理时的速度使虚拟处理器看上去就像同时在处理多个任务,而实际上也的确如此。
2、可将 VP 绑定到 CPU
当将 VP 绑定到 CPU 时,该 VP 只在该 CPU 上运行。此操作将提高 VP 的性能,因为它减少了操作系统必须在进程间进行的切换量。

六、ONCONFIG配置文件中的配置参数
1、MULTIPROCESSOR : 前面已经介绍
2、SINGLE_CPU_VP:前面已经介绍
3、NETTYPE protocol,poll_threads,connections,VP_class
如:
NETTYPE ipcshm, 1, 200, CPU
NETTYPE tlitcp, 2, 200, NET # supports 400 connections(http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.perf.doc/perf83.htm
当运行轮询线程的VP_class 为 NET 时,轮询线程数据(poll_threads)可以是大于等于1的值
当运行轮询线程的VP_class 为 CPU 时,轮询线程数据(poll_threads)可以是大于等于1,小于等于 num_cpu_vps 的值
每个轮询线程大约可以处理200至250个连接。
仔细区分网络连接的轮询线程和共享内存连接的轮询线程,每个 CPU 虚拟处理器只能运行一个共享内存连接的轮询线程。TCP 连接应该仅处于网络虚拟处理器中,并且您应该只有维持响应所需的最少的 TCP 连接数。共享内存连接应该仅处于 CPU 虚拟处理器中,并且应在每个 CPU 虚拟处理器中都运行。
4、VPCLASS VP类型名,num=初始化时启动的的VP数量,max=最大VP数,noage,aff=

七、VP的添加与删除
数据库服务器最多可以启动1000个VP
1、联机情况下添加VP
可以添加 CPU、AIO、PIO、LIO、SHM、STR、TLI、SOC、JVP和用户自定义的 VP
使用 onmode 命令的 -p 选项可在数据库服务器处于联机方式时添加虚拟处理器。用正数指定希望添加的虚拟处理器数。作为选择,您可以在虚拟处理器数前加上一个加号(+)。在这个数字后面,请以小写字母指定虚拟处理器的类。例如,下面两个命令中的任何一个都可在 AIO 类中启动四个附加的虚拟处理器:
onmode -p 4 aio
onmode -p +4 aio

onmode 实用程序将立即启动附加的虚拟处理器。
一次只可以将虚拟处理器添加到一个类。要为另一个类添加虚拟处理器,您必须再次运行 onmode。

2、联机情况下添加网络VP
NETTYPE 接口/协议组合,N1,N2,VP_class(CPU或NET)
接口/协议组合:ipcshm、ipcstr、tlitcp、tlispx或soctcp
N1:用来管理连接的轮询线索数,缺省为1,每个轮讯线索可以处理200到250个。1<= N1 <= NUMCPUVPS
N2:期望的并发连接用户数,缺省值为USERTHREADS的值。 1<= N2 <= 32767
VP_class:不指定的话,如果针对 DBSERVERALIASES,则为NET;针对DBSERVERNAME时,则为CPU。

3、删除或中止 CPU VPCLASS
onmode -p -2 cpu
删除两个 CPU 虚拟处理器

4、删除或中止用户自定义 VPCLASS
以下命令将删除类 usr 的两个虚拟处理器:
onmode -p -2 usr

八、使用命令行实用程序监视虚拟处理器
可以使用下列 onstat -g 选项来监视虚拟处理器:
ath 显示系统线程和虚拟处理器类的信息。
glo 显示有关当前正在运行的每个虚拟处理器的信息,以及有关每个虚拟处理器类的累积统计信息
ioq 选项可确定您是否需要分配附加的 AIO 虚拟处理器。
rea 选项可监视就绪队列中的线程数。

1、onstat -g ioq
AIO I/O queues:
q name/id len maxlen totalops dskread dskwrite dskcopy
adt 0 0 0 0 0 0 0
msc 0 0 1 12 0 0 0
aio 0 0 4 89 68 0 0
pio 0 0 1 1 0 1 0
lio 0 0 1 17 0 17 0
kio 0 0 0 0 0 0 0
gfd 3 0 3 254 242 12 0
gfd 4 0 17 614 261 353 0
如果 I/O 队列的长度正在增长,则 I/O 请求的堆积速度将比 AIO 虚拟处理器可以处理它们的速度要快。如果 I/O 队列的长度继续显示 I/O 请求正在堆积,请考虑添加 AIO 虚拟处理器。

2、onstat -g rea
使用 onstat -g rea 选项可监视就绪队列中的线程数。如果对于一虚拟处理器类(例如:CPU 类),就绪队列中的线程数正在增长,则您可能必须将更多的虚拟处理器添加到配置中。

onstat -g rea 输出
Ready threads:
tid tcb rstcb prty status vp-class name

6 536a38 406464 4 ready 3cpu main_loop()
28 60cfe8 40a124 4 ready 1cpu onmode_mon
33 672a20 409dc4 2 ready 3cpu sqlexec

九、用 SMI 表监视虚拟处理器
查询 sysvpprof 表以获得有关当前正在运行的虚拟处理器的信息。该表包含以下各列。

列 描述
vpid 虚拟处理器的标识号
class 虚拟处理器类
usercpu 用户 CPU 消耗的分钟数
syscpu 系统 CPU 消耗的分钟数

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22565551/viewspace-1027563/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22565551/viewspace-1027563/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值