Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >技巧(一)、Scope and Namespace

技巧(一)、Scope and Namespace

作者头像
狼啸风云
发布于 2023-10-07 07:07:51
发布于 2023-10-07 07:07:51
23400
代码可运行
举报
运行总次数:0
代码可运行

达梦数据库服务器使用“对称服务器构架”的单进程、多线程结构。这种对称服务器构架在有效地利用了系统资源的同时又提供了较高的可伸缩性能,这里所指的线程即为操作系统的线程。服务器在运行时由各种内存数据结构和一系列的线程组成,线程分为多种类型,不同类型的线程完成不同的任务。线程通过一定的同步机制对数据结构进行并发访问和处理,以完成客户提交的各种任务。执行下面的语句将查看当前达梦数据库中的线程信息。

代码语言:sql
AI代码解释
复制
SQL> select distinct name ,thread_desc from v$threads;

# 输出的信息如下:
行号 	NAME           	THREAD_DESC                                                                          
--- -------------- -------------------------------------------
1    dm_sql_thd     	User session thread
2    dm_sqllog_thd  	Thread for writing dmsql dmserver
3    dm_quit_thd    	Thread for executing shutdown-normal operation
4    dm_io_thd      	IO thread
5    dm_chkpnt_thd  	Flush checkpoint thread
6    dm_redolog_thd 	Redo log thread, used to flush log
7    dm_hio_thd     	IO thread for HFS to read data pages
8    dm_tskwrk_thd  	Task Worker Thread for SQL parsing and execution for sevrer itself
9    dm_purge_thd   	Purge thread
10   dm_trctsk_thd  	Thread for writing trace information
11   dm_wrkgrp_thd  	User working thread
12   dm_audit_thd   	Thread for flush audit logs
13   dm_sched_thd   	Server scheduling thread,used to trigger background checkpoint, time-related triggers
14   dm_lsnr_thd    	Service listener thread

14 rows got

达梦数据库中主要包括监听线程、IO线程、工作线程、调度线程、日志线程等,以下分别对它们进行介绍。视频讲解如下:

一、 监听线程

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

DM服务器所有配置端口的范围为1024-65534。当客户端工具发起连接时,由操作系统为客户端工具自动分配一个端口用于与DM服务器进行通信。对于数据守护、DMDSC、MPP和DMTDD等分布式数据库中各实例节点之间的通信,发起连接的节点也由操作系统自动分配端口,所以配置主备/DSC/MPP/TDD时,除了各实例指定的端口外,发起连接的实例也会有操作系统自动分配的用于和其他实例进行通信的端口。

二、 I/O线程

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

  1. 需要处理的数据页不在缓冲区中,此时需要将相关数据页读入缓冲区;
  2. 缓冲区满或系统关闭时,此时需要将部分脏数据页写入磁盘;
  3. 当检查点线程(dm_chkpnt_thd)生成检查点时,需要将所有脏数据页写入磁盘。

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

三、 工作线程

工作线程(dm_tskwrk_thd和dm_wrkgrp_thd)是DM 服务器的核心线程,它从任务队列中取出任务,并根据任务的类型进行相应的处理,负责所有实际的数据相关操作。

DM8的初始工作线程个数由配置文件指定,随着会话连接的增加,工作线程也会同步增加,以保持每个会话都有专门的工作线程处理请求。为了保证用户所有请求及时响应,一个会话上的任务全部由同一个工作线程完成,这样减少了线程切换的代价,提高了系统效率。当会话连接超过预设的阀值时,工作线程数目不再增加,转而由会话轮询线程接收所有用户请求,加入任务队列,等待工作线程一旦空闲,从任务队列依次摘取请求任务处理。

四、 调度线程

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

  1. 检查系统级的时间触发器,如果满足触发条件则生成任务加到工作线程的任务队列由工作线程执行;
  2. 清理SQL缓存、计划缓存中失效的项,或者超出缓存限制后淘汰不常用的缓存项;
  3. 检查数据重演捕获持续时间是否到期,到期则自动停止捕获;
  4. 执行动态缓冲区检查。根据需要动态扩展或动态收缩系统缓冲池;
  5. 自动执行检查点。为了保证日志的及时刷盘,减少系统故障时恢复时间,根据INI参数设置的自动检查点执行间隔定期执行检查点操作;
  6. 会话超时检测。当客户连接设置了连接超时时,定期检测是否超时,如果超时则自动断开连接;
  7. 必要时执行数据更新页刷盘;
  8. 唤醒等待的工作线程。

五、 日志刷新线程

任何数据库的修改,都会产生重做REDO日志,为了保证数据故障恢复的一致性,REDO日志的刷盘必须在数据页刷盘之前进行。事务运行时,会把生成的REDO日志保留在日志缓冲区中,当事务提交或者执行检查点时,会通知日志刷新线程(dm_redolog_thd)进行日志刷盘。由于日志具备顺序写入的特点,比数据页分散IO写入效率更高。日志刷新线程和IO线程分开,能获得更快的响应速度,保证整体的性能。DM8的日志刷新线程进行了优化,在刷盘之前,对不同缓冲区内的日志进行合并,减少了IO次数,进一步提高了性能。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 作用域和命名空间
在介绍类之前,我首先要告诉你一些Python的作用域规则。类定义对命名空间有一些巧妙的技巧,你需要知道作用域和命名空间如何工作才能完全理解正在发生的事情。顺便说一下,关于这个主题的知识对任何高级Python程序员都很有用。
py3study
2020/01/16
7240
Python的抽象魔法--类
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性(attribute)和方法(method)。对象是类的实例(instance)。 类属性:类属性在整个实例化的对象中是公用的。类属性定义在类中且在函数体之外。类属性通常不作为实例使用。 局部变量:定义在方法中的变量,只作用于当前实例的类。 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
爱编程的小明
2022/09/05
3930
Python的抽象魔法--类
python高阶教程-命名空间与作用域
本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/zhuanlan-senior-python-2/
羽翰尘
2019/11/20
4340
Python与家国天下
导读:Python猫是一只喵星来客,它爱地球的一切,特别爱优雅而无所不能的 Python。我是它的人类朋友豌豆花下猫,被授权润色与发表它的文章。如果你是第一次看到这个系列文章,那我强烈建议,请先看看它写的前几篇文章(链接见文末),相信你一定会爱上这只神秘的哲学+极客猫的。不多说啦,一起来享用今天的“思想盛宴”吧!
Python猫
2019/04/09
5400
Python与家国天下
由一个例子到python的名字空间
可以正常输出结果: 并且需要注意,在func2使用x变量之前的名字空间就已经有了'x':1.
py3study
2020/01/03
4070
Python学习笔记:命名空间和作用域
在Python中,任何“东西”都是一个对象。当我们赋值整数给变量时,例如x = 1,我们告诉Python在引用x时,意味着Python指向整数类型对象1,以便对数值计算或其他方法使用值1。
fanjy
2019/07/19
9130
Python学习笔记:命名空间和作用域
详解Python变量作用域
本文暂时不讨论类定义中的变量(成员)作用域,改天可能会单独成文介绍。 变量作用域总起来说可以这么理解:1)在函数内如果只引用某个变量的值而没有为其赋新值,该变量为(隐式的)全局变量;2)如果在函数内某条代码有为变量赋值的操作,该变量从此之后就被认为是(隐式的)局部变量,除非在函数内该代码之前显式地用关键字global进行了声明。 >>> def demo(): global x #声明或创建全局变量 x = 3 #修改全局变量的值 y =4 #局部变量 print(x, y) >>> x =
Python小屋屋主
2018/04/16
1.5K0
Python基础之:Python中的类
class是面向对象编程的一个非常重要的概念,python中也有class,并且支持面向对象编程的所有标准特性:继承,多态等。
程序那些事
2021/04/02
7550
Python基础之:Python中的类
class是面向对象编程的一个非常重要的概念,python中也有class,并且支持面向对象编程的所有标准特性:继承,多态等。
程序员鑫港
2022/01/05
7990
python基础教程:作用域和命名空间
命名空间和作用域的概念我们之前也提到过,比如内置函数globals(),函数中变量的作用域,模块使用的import等等。这些可能让我们对这两个概念有了大致的理解。本节再详细探讨一下。
一墨编程学习
2019/05/14
5970
python基础教程:作用域和命名空间
最易写出bug?Python命名空间和作用域介绍
简单的说,命名空间就是一种“名称-对象”的映射表,使得我们可以通过对象指定的名称来访问它们。
MeteoAI
2019/08/12
7410
最易写出bug?Python命名空间和作用域介绍
Python 语法基础
自从对着官方文档对着 ipython 敲了一遍一天学完了 Python 的语法之后,我觉得我行了。于是屁颠屁颠地跑去写项目,结果显而易见,开发之路可谓寸步难行,一停下来就光速遗忘。
浪漫主义狗
2023/09/04
6190
python3--函数进阶
TypeError: func() missing 4 required keyword-only arguments: 'a', 'b', 'c', and 'd'
py3study
2018/08/02
5050
Python 基础(十八):命名空间 & 作用域
命名空间(namespace)是名称到对象的映射,当前大部分命名空间都是通过 Python 字典来实现的,它的主要作用是避免项目中的名字冲突,每一个命名空间都是相对独立的,在不同的命名空间中可以同名,在相同的命名空间中不可以同名。
Python小二
2020/08/18
6030
Python 基础(十八):命名空间 & 作用域
2.Python函数的进阶
昨天我们从形参角度,讲了两种参数,一个是位置参数,位置参数主要是实参与形参从左至右一一对应,一个是默认值参数,默认值参数,如果实参不传参,则形参使用默认参数。那么无论是位置参数,还是默认参数,函数调用时传入多少实参,我必须写等数量的形参去对应接收, 如果不这样,那么就会报错:
changxin7
2019/09/10
3060
2.Python函数的进阶
Python学习 :函数
是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是调用(Calling)函数。
py3study
2020/01/19
4510
Python基础教程
星号只在 定义函数(允许使用不定数目的参数)或者 调用(“分割”字典或者序列)时才有用。
py3study
2020/01/03
7770
撩课-Python-每天5道面试题-第8
一. 解释下什么是闭包? 有怎样的场景作用? 概念 在函数嵌套的前提下 内层函数引用了外层函数的变量(包括参数) 外层函数, 又把 内层函数 当做返回值进行返回 这个内层函数+所引用的外层变量, 称为
py3study
2020/01/20
3070
深入理解Python变量作用域与函数闭包
1、引言 最近遇到一个求最长回文子串的题目,于是,我写了如下的代码: class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ if len(s) < 2: return s maxlen = 0 res = ''
石晓文
2018/04/11
1.7K0
Python3 | 练气期,函数创建、参数传递、作用域!
描述:上一章,我们学习了Python3编程中最基本而得流程控制语句,相信大家在作者的实践下也已经掌握了相关关键字了吧,这一章我们一起学习Python3编程入门中函数定义、函数调用、函数参数(传递、类型),匿名函数、递归函数。内嵌函数和闭包、装饰器函数,以及命名空间作用域的讲解,它也是Python编程中最基础且常用的部分,所以说也是需要我们掌握的。
全栈工程师修炼指南
2024/07/29
650
Python3 | 练气期,函数创建、参数传递、作用域!
相关推荐
Python 作用域和命名空间
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验