返回首页

gbase数据、南大通用产品文档:GBase8adefaulttimezone

更新日期:2024年09月11日

功能
这个参数设置默认的服务器时区。
该参数用于设置全局time_zone 系统变量。如果未给出该选项,默认时区为格林
威治时间。
通常该参数的值,要求与操作系统的时区设置值一致。错误的时区设置可能导致
数据库的时间函数返回结果不正常。
对于中国地区的客户,通常使用北京时间,因此该参数值设置为'+8:00'。

将缓冲区写入磁盘称为缓冲区清空。当用户线程修改缓冲区中的数据时,它会将缓冲区标
为脏。当数据库服务器将缓冲区清空到磁盘时,它随后会将缓冲区标为不脏并允许覆盖缓
冲区中的数据。
数据库服务器将清空以下缓冲区:

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 130 -

缓冲池(包含在本节中)

物理日志缓冲区
请参阅清空物理日志缓冲区。

逻辑日志缓冲区
请参阅清空逻辑日志缓冲区。
页清除程序线程缓冲区清空。数据库服务器总是运行至少一个页清除程序线程。如果数据
库服务器配置了多个页清除程序线程,那么 LRU 队列将分配到这些页清除程序中以便更
有效的清空。有关指定数据库服务器运行多少页清除程序线程的信息,请参阅《GBase 8s
管理员参考》中的 CLEANERS 配置参数。
清空物理日志缓冲区、已修改的共享内存页缓冲区和逻辑日志缓冲区必须依照设计用以保
持数据一致性的特定规则与页清除程序活动同步。

清空缓冲池缓冲区
缓冲区的清空由以下任何一种条件启动:
• MLRU 队列中缓冲区数达到 BUFFERPOOL 配置参数中lru_max_dirty 值指定的
数目。
• 页清除程序线程无法跟上。换句话说,用户线程必定需要获取缓冲区,但是没有
未修改的缓冲区可用。
• 数据库服务器必须执行检查点。(请参阅检查点。)
自动 LRU 调节可影响所有缓冲池并调整 BUFFERPOOL 配置参数中的 lru_min_dirty
和 lru_max_dirty 值。

首先清空前映像
已修改页的前映像在已修改页本身之前清空到磁盘。
实际上,首先清空物理日志缓冲区然后再清空包含已修改的页的缓冲区。因此,即便由于
用户线程正在试图获取缓冲区但没有缓冲区可用(前台写入),而必须对共享内存缓冲区
页清空时,也只有在页的前映像已写入磁盘后才能将缓冲区页清空。

清空物理日志缓冲区
数据库服务器临时存储物理日志缓冲区中存储一些已修改的磁盘页的前映像。如果前映像
已写入物理日志缓冲区但未写入磁盘上的物理日志,那么服务器会在将已修改的页清空到
磁盘之前先将物理日志缓冲区清空到磁盘。
数据库服务器总是在将任何数据缓冲区清空到磁盘之前首先将物理日志缓冲区的内容清空
到磁盘。
以下事件将导致活动的物理日志缓冲区清空:

活动物理日志缓冲区变满。

共享内存中的已修改页必须清空,但前映像仍然在活动物理日志缓冲区中。

出现检查点。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 131 -
数据库服务器一次只使用两个物理日志缓冲区中的一个。此缓冲区是活动(或当前)物理
日志缓冲区。在数据库服务器将当前物理日志缓冲区清空到磁盘之前,它使其他缓冲区称
为当前物理日志缓冲区,以便该服务器可以在清空第一个缓冲区时继续写入。
物理日志缓冲区和物理日志都有助于保持数据在物理上和逻辑上的一致性。有关物理记
录、检查点和快速恢复的信息,请参阅物理日志记录、检查点和快速恢复。

同步缓冲区清空
当首先启动共享内存时,所有的缓冲区都是空的。当处理发生时,数据页将从磁盘读入缓
冲区,而用户线程则开始修改这些页。

描述清空活动
为了向您提供有关提示缓冲区清空活动的特定条件的信息,数据库服务器定义了三种类型
的写入并计算发生每次写入的频率:

前台写入

LRU 写入

块写入
要显示数据库服务器保留的写入计数,请如《GBase 8s 管理员参考》中所述使用 onstat -
F。
如果实现数据库服务器的镜像,那么数据总是先写入主块。然后写入会在镜像块上重复。
对镜像块的写入次数包含在计数中。有关监视数据库服务器所执行的写入类型的更多信
息,请参阅监视缓冲池活动。
前台写入
只要 sqlexec 线程将缓冲区写入磁盘,都称为前台写入。当 sqlexec 线程代表用户在
LRU 队列中搜索但无法找到空的或未修改的缓冲区时将发生前台写入。为了腾出空间,
sqlexec 线程将一次清空一个页以容纳要从磁盘读取的数据。(有关更多信息,请参阅
FIFO/LRU 队列。)
如果 sqlexec 线程必须执行缓冲区清空以获取共享内存缓冲区,那么性能会变差。必须避
免前台写入。要显示对前台写入次数的计数,请运行 onstat -F。如果发现前台写入定期发
生,请调整页清除参数的值。 要么增加页清除程序的数目,要么减少 BUFFERPOOL
lru_max_dirty 值。
LRU 写入
与前台写入不同,LRU 写入由页清除程序执行而不是由 sqlexec 线程执行。数据库服务
器将 LRU 写入作为后台写入执行,后者通常在脏缓冲区的百分比超过在 BUFFERPOOL
配置参数中为 lru_max_dirty 指定的百分比时发生。
此外,前台写入可触发 LRU 写入。当发生前台写入时,已执行写入的 sqlexec 线程将提
醒页清除程序唤醒并清除该线程已为之执行前台写入的 LRU。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 132 -
在已正确调整的系统中,页清除程序将确保有足够的未修改的缓冲区页可用于存储从磁盘
读取的页。因此,执行查询的 sqlexec 线程无需在读入查询所需的磁盘页之前,先将页清
空到磁盘。对于不利用前台写入的查询而言,这种情况可以使性能有显著地提高。
由于页清除程序线程执行缓冲区写入比 sqlexec 线程更有效率,因此 LRU 写入比前台写
入更受欢迎。要监视写入的两种类型,请使用 onstat -F。
块写入
块写入统称由页清除程序线程在检查点期间执行,或在可能的情况下在共享内存缓冲池中
的每个页已修改时执行。块写入(作为已排序的写入执行)是数据库服务器可用的最有效
的写入。
在块写入期间,每个页清除程序线程都指定到一个或多个块。每个页清除程序线程在缓冲
区头中读取并将一组指针创建到与其特定的块关联的页。(页清除程序对此信息有访问
权,因为块编号包含在物理页编号地址中,它是页头的一部分。)此排序将最小化磁盘上
的磁头移动(磁盘搜索时间)并在可能的情况下使页清除程序线程能够在写入时使用大缓
冲区。
此外,由于用户线程必须等待检查点完成,因此页清除器线程不会与大量线程争用 CPU
时间。结果,页清除程序线程可以通过更少的上下文切换来完成它们的工作。

清空逻辑日志缓冲区
数据库服务器使用共享内存逻辑日志缓冲区作为临时存储器用于存储向数据库服务器页描
述修改的记录。这些更改记录将从逻辑日志缓冲区写入磁盘上当前的逻辑日志文件,并最
终写入逻辑日志备份介质。有关逻辑日志记录的描述,请参阅逻辑日志。
五个事件导致当前逻辑日志缓冲区清空:

当前的逻辑日志缓冲区变满。

事务已在带有未缓冲日志记录的数据库中准备或落实。

非日志记录数据库会话终止。

出现检查点。

已修改不需要物理日志中的前映像的页。
以下主题将详细讨论其中每个事件。
事务已在带有未缓冲日志记录的数据库中准备或终止之后
以下日志记录将导致逻辑日志缓冲区在带有未缓冲日志记录的数据库中清空:

COMMIT

PREPARE

XPREPARE

ENDTRANS
有关已缓冲日志记录和未缓冲日志记录的比较,请参阅 《GBase 8s SQL 指南:语法》
中的 SET LOG 语句。
使用非日志记录数据库或未缓冲日志记录的会话终止时

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 133 -
甚至对于非日志记录数据库,数据库服务器会记录某些改变数据库方式的活动,如创建表
或扩展数据块。当数据库服务器终止那些使用未缓冲日志记录或非日志记录数据库的会话
时,会清空逻辑日志缓冲区以确保已记录任何日志记录活动。
当出现检查点时
有关在检查点期间所发生事件的详细描述,请参阅检查点。
当已修改不需要物理日志文件中的前映像的页时
当修改了不需要物理日志中的前映像的页时,必须在页清空到磁盘前清空逻辑日志缓冲
区。

(SQL 管理 API)
随同 admin() 或 task() 函数,使用 modify space expand 参数来立即扩大空间的大小,
当您不想等待 GBase 8s 来自动地扩大空间时。
语法

元素
描述
关键考虑
space_name
存储空间的名称。

minimum_size
您想要扩大空间大小的最小值。
请参阅 admin() 和 task() 参数
大小规范。

用法
modify space expand SQL 管理 API 命令立即扩大存储空间,或通过扩展该空间中的可扩
展 chunk,或者通过添加新 chunk。空间的创建大小和扩展大小设置不影响这个操作。
添加到空间的实际 KB 数可能超过您需要的大小,这依赖于一些因素,比如空间的页大小,
以及存储池中可用条目的 chunk 大小设置。
存储池必须包含服务器可用来扩展该空间的条目(比如裸设备、熟文件或目录)。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 754 -

您运行 modify space expand SQL 管理 API 命令之后, GBase 8s 通过扩展该空间中可
扩展 chunk 来首次尝试扩大该空间。如果该空间不包含任何可扩展的 chunk,则服务器使
用存储池中的条目来扩展该空间。
您不可扩大镜像的存储空间。
示例
下列命令扩大 dbspace5 10 MB:
EXECUTE FUNCTION task("modify space expand", "dbspace5", "10 MB");