SinoDB动态服务器术语介绍

  通过对本文的学习,您将能够:

  • 定义基本的Sinoregal DS 动态服务器术语
  • 查询 sysmaster 数据库以确定关于数据库的信息

1. 什么是数据库服务器?

  数据库服务器 是管理存储在磁盘上的数据库内容的程序。数据库服务器知道表、数据行和数据列在物理计算机存储器中的实际组织方式。数据库服务器还解释并执行所有 SQL 命令。

  SinoDB数据库服务器或实例是数据库服务器进程以及服务器进程管理的共享内存和磁盘空间的集合。同一台计算机中可以存在多个实例。例如:一个开发实例、一个生产实例和一个测试实例可以在同一计算机上共存。

2. SinoDB动态服务器术语

  以下术语描述数据的组织方式:

  • 块 chunk
  • 页 page
  • 段 extent
  • 表空间 Tblspace
  • 数据库空间 Dbspace
  • 简单大对象空间 Blobspace
  • 智能大对象空间 Sbspace

2.1 Chunk

  一个chunk是分配给服务器的连续磁盘空间段。
1698201689723

  SinoDB动态服务器不使用文件系统来执行磁盘空间管理,而是使用其自身的机制管理磁盘空间。该机制称为原始顺序存取法(RSAM,Raw Sequential Access Method),较文件系统方式更适合于数据库管理。

  要创建chunk,管理员必须做以下检查:

  • chunk的绝对路径名称

  • chunk的偏移量

  • chunk的大小

  • chunk是原始磁盘(raw disk)还是cooked file

  在 UNIX 平台上,SinoDB建议使用raw disk,而不是 UNIX (cooked)file来创建chunk。使用raw disk在提高 I/O性能、数据完整性和内存利用效率上都有优势。

  在Windows中,由于文件系统结构的内在差异,使用raw device的优势相对于使用操作系统文件来说并不明显。因此,可以使用操作系统文件,更方便管理。

2.2 Dbspace

  一个 dbspace 是多个chunk的逻辑集合,它们组成了一个存储数据库和表的磁盘空间池。
1698202270706

  每个 dbspace 必须分配至少一个chunk。Dbspace 按需要可以包含很多个chunk。如果某个 dbspace 内没有足够空间(因为分配给 dbspace 的所有chunk空间已满),可以向 dbspace 添加更多chunk。创建表或数据库的时候可以指定dbspace,可以对i/o做均衡。

  可以在某个 dbspace 内创建数据库和表。也就是说,表和数据库最大只能增长到 dbspace 的可用空间允许的范围。

  不能控制数据库或表创建的chunk。如果想将表或数据库创建于特定的物理设备上,请将表或数据库分配给包含该该物理设备所在chunk的 dbspaces中。

  每个数据库服务器都含有至少一个 dbspaces:即root dbspaceroot dbspace包含控制数据库服务器的所有系统信息。

Temporary Dbspaces

  temporary dbspaces是一种特殊的 dbspaces, 用于存储临时表或临时文件。temporary dbspaces 可以防止临时表和文件意外填满文件系统或争夺存有数据表的 dbspace 空间,也可以加快临时表的创建速度。

2.3 页 page

  当chunk被分配至数据库服务器时,它将在逻辑上被划分为更小的单位,称为页page

  页是数据库服务器的基本 I/O 单元。当一行数据从磁盘被读入内存时,整个页上存储的数据都被读入共享内存。多行的数据有可能被存储在一个单独的页中。

  数据库服务器页的大小要根据使用的计算机或操作系统而定。最常见的页大小是 2 KB,也有些系统使用 4 KB的页。
  
  存储于某个页的数据是同类的。如果一个页已存储一个数据行,则该页只可以包含数据行。如果一个页已存储索引数据,则该页只可以包含索引数据。某些页被搁置用于管理目的。

  数据库服务器的页大小是可以配置的。缺省值仍然取决于使用的平台。

2.3.1 配置页大小

  • 只允许在常规的dbspaces中配置
  • 只能在 dbspace 创建时指定
  • 页大小的缓冲池被自动创建,并采用系统缺省值
  • 可以用配置参数来指定每个页的大小以覆盖缺省值
  • 不可以指定root dbspace 的页大小,root dbspace页大小将使用平台缺省值
  • 允许更高效地使用页
  • 必须是平台相关的页大小的一个系数
  • Dbspace 大小必须是页大小的倍数
  • Onparams 实用程序可用于添加缓冲池

  页的大小是可以配置的。 一旦添加root dbspace,任何添加的 dbspace/chunk的页大小可以是 2K的倍数,最多到16K。root dbspace 包含的所有chunk均使用平台的缺省页大小。若该数据页没有相应的缓冲池,系统将自动创建一个相应数据页的缓冲池。

  当指定chunk的大小时,必须是用能够被页大小整除的数值。

  一个dbspace 的所有chunk必须有拥有大小相同的页。

  新增加的 BUFFERPOOL 配置参数用于指定存于内存中的相应页大小的缓冲池数量,还有与缓冲池相关的 LRUS、LRU_MIN_DIRTY、和 LRU_MAX_DIRTY 参数值。

  onparams 实用程序含有选项**-b** ,用于增加缓冲池。

2.3.2 页结构

  服务器使用的所有页都具有以下数据结构:

页头

  页头包含用于跟踪页上数据的 24 字节信息。

  页头包含页偏移量(4 字节)、块号(2 字节)、页校验和(2 字节)、页面上使用的插槽数(2 字节)、指示页面类型的页面标志(2 字节)、指向页面上最后一行和插槽条目之间的连续可用空间的指针(2 个字节), 页面上剩余的可用字节数(2 个字节),对于索引页,指向下一个索引页(4 个字节)和上一个索引页(4 个字节)的指针。

时间戳

  每个数据页和索引页的最后都是一个4 字节的整数时间戳。 时间戳反映上次修改页面的时间。时间戳与时钟时间无关,它只是一个内部计时器。

槽表

  槽表为每一插入到该页中的数据行都保留对应的一个4 字节条目。该4字节存储该数据行在页中的偏移量和行的长度。槽表用于定位页中的数据行。

  页面上的其余空间可用于存储数据或索引信息。

  可以使用以下命令查看页的信息:

   oncheck -pp 或dd if=./rootdbs skip=0 count=1 bs =2k | od –x |more

2.4 Extent

  Extent是用于存储以下对象的连续页的集合:

Extent大小

  表内存储数据行的extent的大小在表创建或修改时就已被指定。

  每个表都定义了两个扩展数据块大小:

  • 初始(或第一个)扩展数据块大小
  • 所有后续扩展数据块的大小

  Extent最小为 4 页。最大为 2GB。Extent大小对系统来说必须是页大小的偶数倍数。为数据表计算extent的需求非常重要。

2.5 Tblspace

  Tblspace 是若干extent的一个逻辑集合。一个Tblspace 包含分配给指定表、索引或表分段的所有extent。

  Tblspace 所代表的空间并不一定是连续的,它可以包括存于单个chunk或多个chunk上的extent。然而,一个tblspace 总是存在于同一个 dbspace 中。

2.6 Blobspace

  blobspace 是存储简单二进制大对象的chunk的集合。
  为了提高特殊数据类型的存储和检索效率,SinoDB还提供了具有针对这些数据类型定制特征的特殊数据库空间。其中一个特殊用途的数据库空间称为 blobspace

  当创建 blobspace 后,blobpage的 大小 就已被指定好。blogpage的大小值就是单个blobpage 页的页数。blobspace 中存储的简单大对象数据其实是存储于一个或多个的 blobpage 中。blobpage 大小通常大于普通页,因为简单大对象数据通常很大。较大的 blobpage 能够使简单大对象数据存储更高效。

  存于单个 blobspace 中的所有二进制大对象,即使来自不同的表,均使用相同的 blobpage 大小。每个 blobspace 使用相同的 blobpage 大小来存储简单大对象数据。可以有多个 blobspace,每个blobspace可以有大小值不同的 blobpage 。

2.6 Sbspaces

  sbspace 是一个用于存储智能二进制大对象的chunk的逻辑集合。

1698204041484

  SinoDB提供的另一个特殊用途的dbspace,称为智能 blobspace,或叫作sbspace 。不同于 blobspace,sbspace 将数据存储在标准的SinoDB页内,就像一个 dbspace。由于智能二进制对象值可能非常大,单个的数值可能占据多个页。

3. 系统监控接口(SMI)

  • 可以用来获得实例的状态和诊断信息
  • 提取 sysmaster 数据库的信息
  • sysmaster 数据库将在实例首次联机时自动创建
  • 访问共享内存的实时数据

  大多数 sysmaster 库下表不存储任何数据。相反,sysmaster表的数据库结构指向内存中的结构。当查询 sysmaster 表时,SELECT 语句将访问内存中的实时数据。因此,从一个表检索的数据可能不会与从另一个表中检索的数据同步。

一些获取关于数据库实例信息的 SQL 示例语句如下:

  • Sysdbspaces :获取实例中的所有 dbspace、chunk个数、dbspace 是 blobspace 还是临时 dbspace、以及 dbspace 的状态:
  SELECT dbsnum, name, owner, nchunks, is_temp,is_blobspace, flags FROM sysdbspaces;
  • Syschunks :获取可用页的数量和特定 dbspace 中所有chunk中的页数量:
  SELECT syschunks.dbsnum, chknum, nxchknum, sysdbspaces.name, chksize, nfree
    FROM syschunks, sysdbspaces
        WHERE syschunks.dbsnum = sysdbspaces.dbsnum AND sysdbspaces.name = "dbspacename";
  • Sysdatabases :获取实例中所有的数据库清单和他们是否带日志的状态:
   SELECT name, owner, created, is_logging, is_buff_log, is_ansi FROM sysdatabases;
  • Systabnames :显示数据库内所有表以及它们所有者的清单:
  SELECT partnum, dbsname, owner, tabname FROM systabnames
    WHERE dbsname = "*databasename"* ;
  • Syssessions :显示每个会话的用户、主机名和连上的时间:

    SELECT sid, username, uid, hostname, connected FROM syssessions;