返回首页

gbase数据、南大通用产品文档:GBase8s连接到共享内存的进程

更新日期:2024年09月11日

以下进程将连接到数据库服务器共享内存:

通过共享内存通信部分 (ipcshm) 与数据库服务器通信的客户机应用程序进程

数据库服务器虚拟处理器

数据库服务器实用程序
客户机如何连接到通信部分 (UNIX™)

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 111 -
通过共享内存 (nettype ipcshm) 与数据库服务器通信的客户机应用程序进程透明地连接到
共享内存的通信部分。自动编译到应用程序的系统库函数使其能够连接到共享内存的通信
部分。有关指定共享内存连接的信息,请参阅客户机/服务器通信和网络虚拟处理器。
如果没有设置 GBASEDBTSHMBASE 环境变量,那么客户机应用程序将连接到特定于平
台的地址的通信部分。如果客户机应用程序连接到其他共享内存段(不是数据库服务器共
享内存),那么用户可以将 GBASEDBTSHMBASE 环境变量设置为指定连接数据库服务
器共享内存通信段所在的地址。当您指定处理共享内存通信段所在的地址时,可以防止数
据库服务器与应用程序使用的其他共享内存段发生冲突。有关如何设置
GBASEDBTSHMBASE 环境变量的信息,请参阅《GBase 8s SQL 指南:参考》。

实用程序如何连接到共享内存
数据库服务器实用程序(如 onstat、onmode 和 ontape)通过以下文件之一连接到共享内
存。
操作系统
文件
UNIX™
$GBASEDBTDIR/etc/.infos.servername
变量 servername 是 onconfig 文件中 DBSERVERNAME 参数的值。实用程序从
GBASEDBTSERVER 环境变量中获得文件名的 servername 部分。
oninit 进程在启动数据库服务器时读取 onconfig 文件并创建文件 .infos.servername。该文
件将在数据库服务器终止时除去。

虚拟处理器如何连接到共享内存
数据库服务器虚拟处理器在安装期间连接共享内存。在此过程中,数据库服务器必须满足
以下两个要求:

确保所有虚拟处理器可以定位和访问相同的共享内存段

确保共享内存段位于同一台计算机上但与指定给其他数据库服务器实例(如果
有)的共享内存段不同的物理内存位置
数据库服务器使用两个配置参数(SERVERNUM 和 SHMBASE)以满足这些要求。
当虚拟处理器连接到共享内存时,它会执行以下主要步骤:

从 onconfig 文件访问 SERVERNUM 参数

使用 SERVERNUM 可计算共享内存键值

使用共享内存键值请求共享内存段
操作系统返回第一个共享内存段的共享内存标识。

引导操作系统将第一个共享内存段连接到其位于 SHMBASE 的进程空间

若需要,连接附加共享内存段以与第一个段邻接

获取共享内存段的键值

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 112 -
SERVERNUM 配置参数和 shmkey 的值(内部计算的数字)确定每个共享内存段的唯一
键值。
要查看共享内存段的键值,请运行 onstat -g seg 命令。
当虚拟处理器请求操作系统连接第一个共享内存段时,它将提供唯一的键值来标识该段。
作为回应,操作系统传回与键值相关联的共享内存段标识。使用此标识,虚拟处理器将请
求操作系统将共享内存段连接到虚拟处理器地址空间。

指定连接第一个共享内存段的位置
onconfig 文件中的 SHMBASE 参数指定每个虚拟处理器连接第一个(或基本)共享内存
段所在的虚拟地址。每个虚拟处理器在同一个虚拟地址上连接第一个共享内存段。此种情
况使相同数据库服务器实例中的所有虚拟处理器都能够引用共享内存中的相同位置,而无
需计算共享内存的地址。数据库服务器实例的所有共享内存地址都是 SHMBASE 的相对
地址。
警告: 不更改 SHMBASE 的值。
SHMBASE 的值易受以下原因影响:
l
SHMBASE 的特定值取决于平台以及处理器是 32 位还是 64 位的。SHMBASE 的
值不是任意数,它将在虚拟处理器动态获取附加的内存空间时保证共享内存段的安
全。
l
不同的操作系统在不同的虚拟地址上接纳附加的内存。有些体系结构扩展虚拟处理器
数据段的最高虚拟地址以便接纳下一个段。在此情况下,数据段可能会发展成共享内
存段。
l
某些版本的 UNIX™ 需要用户将虚拟地址的 SHMBASE 参数指定为零。零地址会通
知 UNIX 内核其挑选连接共享内存段所在的最佳地址。然而,并不是所有 UNIX 体
系结构都支持此选项。而且,在一些系统中,内核所做的选择可能不是最好的选择。

连接附加共享内存段
每个虚拟处理器必须连接到数据库服务器已经获取的总共享内存量。在虚拟处理器连接了
每个共享内存段后,它将计算已经连接的共享内存数量以及剩余的共享内存数量。数据库
服务器通过将共享内存头写入第一个共享内存段促进此进程。虚拟处理器可以深入到头的
十六字节获取以下数据:
l 此数据库服务器的共享内存的总大小
l 每个共享内存段的大小
要连接附加共享内存段,虚拟处理器将从操作系统中请求这些段,很多地方就像它请求第
一个段一样。然而,对于附加段,虚拟处理器对 shmkey 的先前值加 1。 虚拟处理器将
引导操作系统连接位于从以下计算获得的地址的段:
SHMBASE +(seg_size x 已连接的段数)
虚拟处理器将重复此过程直到它获得总共享内存量。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 113 -
假设初始的键值是 (SERVERNUM * 65536) + shmkey,那么数据库服务器在可以请求由同
一台计算机上另一数据库服务器实例使用的共享内存键值前,最多请求 65,536 个共享内
存段。
定义共享内存下边界地址
如果操作系统使用参数来定义共享内存的下边界地址,并且该参数未正确设置,那么会使
共享内存段无法连续地连接。
下图说明了该问题。如果下边界地址小于上一个段的结束地址加上当前段的大小,那么操
作系统将在上一个段的结束位置外的点上连接当前段。此操作将在两个段之间创建间隔。
由于共享内存必须连接到虚拟处理器以使其看上去就像连续的内存,所以此间隔将产生问
题。 数据库服务器将在这种情况发生时接收到错误。
要更正该问题,请检查指定下边界地址的操作系统内核参数,或者重新将内核配置成允许
更大的共享内存段。
图: 共享内存下边界地址概述


执行SQL 语句
连接创建后,可以使用连接的cursor 方法生成游标,然后可以使用游标执
行SQL语句和获取结果集。

概述
全文检索主要应用于文本匹配、互联网搜索引擎和信息检索等领域,例如,短信中
查询敏感词汇,过滤垃圾短信,互联网上关键词搜索,智能排序等应用场景,都涉
及到对文本内容的查询。查询时可查询单个词,也可查询多个词,并且这多个词还
可使用逻辑运算操作符组合查询,在进行查询之前首先需要了解词、词序和词距的
概念。