热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   根域文章 -   正文

达梦数据库实例示例

zhiliaoadmin
2021-07-01 14:29:19
0

实例一般是由一个正在运行的DM后台进程(包含多个线程)以及一个大型的共享内存组成的。简单来说,实例就是操作达梦数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。

达梦数据库存储在服务器的磁盘上,而DM实例存储于服务器的内存中。通过运行DM实例,可以操作达梦数据库中的内容。在任何时候,一个实例只能与一个数据库进行关联(装载、打开或者挂起数据库)。在大多数情况下,一个数据库也只有一个实例对其进行操作。但是在即将提供的DM共享磁盘高性能集群中,多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。此时,可以同时从多台不同的计算机访问这个数据库。1.DM后台进程

DM服务器使用“对称服务器构架”的单进程、多线程结构。这种对称服务器构架在有效地利用了系统资源的同时又提供了较高的可伸缩性能,这里所指的线程即为操作系统的线程。服务器在运行时由各种内存数据结构和一系列的线程组成,线程分为多种类型,不同类型的线程完成不同的任务。线程通过一定的同步机制对数据结构进行并发访问和处理,以完成客户提交的各种任务。达梦数据库服务器是共享的服务器,允许多个用户连接到同一个服务器上,服务器进程称为共享服务器进程。DM进程中主要包括监听线程、IO线程、工作线程、调度线程、日志线程等。

1)监听线程

监听线程主要的任务是在服务器端口上进行循环监听,一旦有来自客户的连接请求,监听线程被唤醒并生成一个会话申请任务,加入工作线程的任务队列,等待工作线程进行处理。它在系统启动完成后才启动,并且在系统关闭时首先被关闭。为了保证在处理大量客户连接时系统具有较短的响应时间,监听线程比普通线程优先级更高。2)工作线程

工作线程是DM服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际数据的相关操作。DM 7的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增加,以保持每个会话都有专门的工作线程处理请求。为了保证用户所有请求及时响应,一个会话上的任务全部由同一个工作线程完成,这样减少了线程切换的代价,提高了系统效率。当会话连接超过预设的阈值时,工作线程数目不再增加,转而由会话轮询线程接收所有用户请求,加入任务队列,等待工作线程一旦空闲,从任务队列依次摘取请求任务处理。3)IO线程

在数据库活动中,IO操作历来都是最为耗时的操作之一。当事务需要的数据页不在缓冲区中时,如果在工作线程中直接对那些数据页进行读写,将会使系统性能变得非常糟糕,而把IO操作从工作线程中分离出来是明智的做法。IO线程的职责就是处理这些IO操作。通常情况下,DM Server需要进行IO操作的时机主要有以下三种。

(1)需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区。

(2)缓冲区满或系统关闭时,需要将部分脏数据页写入磁盘。

(3)检查点到来时,需要将所有脏数据页写入磁盘。

IO线程在启动后,通常处于睡眠状态,当系统需要进行IO时,只需要发出一个IO请求,此时IO线程被唤醒以处理该请求,在完成该IO操作后继续进入睡眠状态。

IO线程的个数是可配置的,可以通过设置dm.ini文件中的IO_THR_GROUPS参数来设置,默认情况下,IO线程的个数是两个。同时,IO线程处理IO的策略根据操作系统平台的不同会有很大差别,一般情况下,IO线程使用异步的IO将数据页写入磁盘,此时,系统将所有的IO请求直接递交给操作系统,操作系统在完成这些请求后才通知IO线程,这种异步IO的方式使得IO线程需要直接处理的任务很简单,即完成IO后的一些收尾处理并发出IO完成通知,如果操作系统不支持异步IO,此时IO线程需要完成实际的IO操作。

4)调度线程

调度线程用于接管系统中所有需要定时调度的任务。调度线程每秒轮询一次,负责的任务有以下一些。

(1)检查系统级的时间触发器,如果满足触发条件,则生成任务加到工作线程的任务队列中并由工作线程执行。

(2)清理SQL缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项。

(3)检查数据重演捕获持续时间是否到期,到期则自动停止捕获。

(4)执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池。

(5)自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据INI参数设置的自动检查点执行间隔定期执行检查点操作。

(6)会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自动断开连接。

(7)必要时执行数据更新页刷盘。

(8)唤醒等待的工作线程。5)日志FLUSH线程

任何数据库的修改,都会产生重做(REDO)日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的REDO日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知FLUSH线程进行日志刷盘。由于日志具备顺序写入的特点,比数据页分散IO写入效率更高,因此,日志FLUSH线程和IO线程分开,能获得更快的响应速度,保证整体的性能。DM 7的日志FLUSH线程进行了优化,在刷盘之前,对不同缓冲区内的日志进行合并,减少了IO次数,进一步提高了性能。如果系统配置了实时归档,在FLUSH线程日志刷盘前,会直接将日志通过网络发送到实时备机。如果配置了本地归档或者远程同步归档,则生成归档任务,通过日志归档线程完成。6)日志归档线程

日志归档线程包含同步归档线程和异步归档线程,前者负责本地归档和远程同步归档任务,后者负责远程异步归档任务。如果配置了非实时归档,由日志FLUSH线程产生的任务会分别加入日志归档线


大家都在看

国内为什么封禁chatGPT?国内怎么使用?

2021-07-01 浏览次数:0

面试想拿13k的工资,HR却说你只值8k,该怎么...

2021-07-01 浏览次数:0

java开发南昌培训学校

2021-07-01 浏览次数:0

售前工程师面试常见问题及答案!面试技巧速码

2021-07-01 浏览次数:0

面试问java项目中遇到的问题怎么回答?Java...

2021-07-01 浏览次数:0

知了堂4月信安预科班顺利开课!

2021-07-01 浏览次数:0
最新资讯