DM 服务器使用“对称服务器构架” 的单进程、多线程结构。这种对称服务器构架在有效地利用了系统资源的同时又提供了较高的可伸缩性能,这里所指的线程即为操作系统的线程。服务器在运行时由各种内存数据结构和一系列的线程组成,线程分为多种类型,不同类型的线程完成不同的任务。线程通过一定的同步机制对数据结构进行并发访问和处理,以完成客户提交的各种任务。 DM 数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。DM 进程中主要包括监听线程、 IO 线程、工作线程、调度线程、日志线程等
任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。
查看监听线程
SQL> select * from SYS."V$THREADS" WHERE NAME = 'dm_lsnr_thd';
[dmdba@dm1 ~]$ ps -ef|grep dms|grep -v grep
[dmdba@dm1 ~]$ ps -T -p 1096 |grep dm_lsnr_thd
修改监听端口
监听线程只有一个,监听端口范围为1024 - 65534;默认端口为5236,此参数为静态参数修改后,需重启数据库。
[root@dm1 bin]# cat -n /dmdata/czw/dm.ini |grep -i port_num
工作线程是 DM 服务器的核心线程, 它从任务队列中取出任务, 并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。
DM8 的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增加,以保持每个会话都有专门的工作线程处理请求。为了保证用户所有请求及时响应,一个会话上的任务全部由同一个工作线程完成,这样减少了线程切换的代价,提高了系统效率。当会话连接超过预设的阀值时,工作线程数目不再增加,转而由会话轮询线程接收所有用户请求,加入任务队列,等待工作线程一旦空闲,从任务队列依次摘取请求任务处理。
查看工作线程
SQL> select * from SYS."V$THREADS" WHERE NAME = 'dm_wrkgrp_thd';
[dmdba@dm1 ~]$ ps -ef|grep dms|grep -v grep
[dmdba@dm1 ~]$ ps -T -p 6828 |grep dm_wrkgrp_thd
[dmdba@dm1 ~]$ ps -T -p 6828 |grep dm_wrkgrp_thd | wc -l
配置工作线程数
[root@dm1 bin]# cat -n /dmdata/czw/dm.ini |grep -i TASK_THREADS
[root@dm1 bin]# cat -n /dmdata/czw/dm.ini |grep -i worker_threads
修改为24,重启数据库
查看工作线程数,已经变成了24个
还有一个任务线程dm_tskwrk_thd, 主要负责完成服务端SQL的解析运行等任务,一般配置为与工作线程相等
在数据库活动中, IO 操作历来都是最为耗时的操作之一。当事务需要的数据页不在缓冲
区中时,如果在工作线程中直接对那些数据页进行读写,将会使系统性能变得非常糟糕,而
把 IO 操作从工作线程中分离出来则是明智的做法。 IO 线程的职责就是处理这些 IO 操作。
通常情况下, DM Server 需要进行 IO 操作的时机主要有以下三种:
IO线程数为16
查看IO线程参数
[root@dm1 bin]# cat -n /dmdata/czw/dm.ini |grep -i IO_THR_GROUPS
参数文件中IO_THR_GROUPS=8,IO线程数为两倍
修改IO线程数,测试看看
修改IO_THR_GROUPS为4后,线程数为8
类似于Oracle中的劳模进程LGWR,将日志缓冲区中的buffer写到在线重做日志。
flush刷盘条件有5种:
日志归档线程包含异步归档线程,负责远程异步归档任务。如果配置了非实时归档,由
日志 FLUSH 线程产生的任务会分别加入日志归档线程,日志归档线程负责从任务队列中取
出任务, 按照归档类型做相应归档处理
还有一些其他线程,如dm_chkpnt_thd 即检查点线程;purge线程,则主要是负责回滚段的清理,审计线程等等。
文章
阅读量
获赞