华为云用户手册

  • pg_xlog_replay_resume() 描述:如果恢复处于暂停状态,则重新启动。 当恢复暂停时,没有发生数据库更改。如果是在热备里,所有新的查询将看到一致的数据库快照,并且不会有进一步的查询冲突产生,直到恢复继续。 如果不能使用流复制,则暂停状态将无限的延续。当流复制正在进行时,将连续接收WAL记录,最终将填满可用磁盘空间,这个进度取决于暂停的持续时间,WAL生成的速度和可用的磁盘空间。 返回值类型:void
  • pg_xlog_replay_completion() 描述:显示当前DN上xlog redo的进度信息。 返回值类型:record 示例: 12345 SELECT * FROM pg_xlog_replay_completion(); replay_start | replay_current | replay_end | replay_percent--------------+----------------+------------+---------------- 0/2ACAB80 | 0/2B16530 | 0/4F62B090 | 0%(1 row) 函数返回信息如下: 表1 pg_xlog_replay_completion()字段 名称 类型 描述 replay_start integer Xlog Redo的起始LSN replay_current integer Xlog Redo的当前replay的LSN replay_end integer 最大的需要Xlog Redo的LSN replay_percent integer Xlog Redo的当前完成的百分比
  • pg_data_sync_from_dummy_completion() 描述:显示当前DN上Failover过程中数据页文件同步的进度信息。 返回值类型:record 示例: 12345 SELECT * FROM pg_data_sync_from_dummy_completion(); start_index | current_index | total_index | sync_percent-------------+---------------+-------------+-------------- 0 | 0 | 0 | 100%(1 row) 函数返回信息如下: 表2 pg_data_sync_from_dummy_completion()字段 名称 类型 描述 start_index integer 数据页文件同步的起始编号 current_index integer 数据页文件同步的当前编号 total_index integer 数据页文件同步的最大编号 sync_percent integer 数据页文件当前完成的百分比
  • pg_last_xlog_replay_location() 描述:获取最后一个事务日志在恢复时重放的位置。如果恢复仍在进行,事务日志将持续递增。如果已经完成恢复,则将保持在恢复期间最后接收WAL记录的值。如果未进行恢复但服务器正常启动时,则这个函数返回NULL。 返回值类型:text 示例: 12345 SELECT pg_last_xlog_replay_location(); pg_last_xlog_replay_location------------------------------ 0/2B16530(1 row)
  • pg_last_xlog_receive_location() 描述:获取最后接收事务日志的位置并通过流媒体复制同步到磁盘。在流复制仍在进行,事务日志将持续递增。如果恢复已完成,则这个值将保持最后接收事务记录的状态并在恢复期间同步到磁盘。如果不能用流复制,或还没有开始,这个函数返回NULL。 返回值类型:text 示例: 12345 SELECT pg_last_xlog_receive_location(); pg_last_xlog_receive_location-------------------------------(1 row)
  • pg_last_xact_replay_timestamp() 描述:获取最后一个事务在恢复时重放的时间戳。这是为在主节点上生成事务提交或终止WAL记录的时间。如果在恢复时没有事务重放,则这个函数返回NULL。否则,如果恢复仍在进行,则事务日志将持续递增。如果恢复已经完成,则将保持在恢复期间最后接收WAL记录的值。如果服务器无需恢复就已正常启动,则这个函数返回NULL。 返回值类型:timestamp with time zone 恢复控制函数控制恢复的进程。这些函数可能只在恢复时被执行。 示例: 12345 SELECT pg_last_xact_replay_timestamp(); pg_last_xact_replay_timestamp------------------------------- 2023-01-04 07:03:08.098024+00(1 row)
  • pg_cbm_recycle_file(slotName name, targetLSNArg text) 描述:删除不再使用的cbm文件,并返回删除后的第一条lsn。其中,slotName为空字符串时,将直接使用targetLSNArg作为回收点;在备份和容灾时,因为并行因素,需要指定相应的slotName,首先记录该任务的targetLSNArg到该slot中,然后遍历所有的backup slots,找到最小的lsn作为回收点。 返回值类型:text
  • pg_create_restore_point(name text) 描述:为执行恢复创建一个命名点。(需要管理员角色) 返回值类型:text 备注:pg_create_restore_point创建了一个可以用作恢复目的、有命名的事务日志记录,并返回相应的事务日志位置。在恢复过程中,recovery_target_name可以通过这个名称定位对应的日志恢复点,并从此处开始执行恢复操作。避免使用相同的名称创建多个恢复点,因为恢复操作将在第一个匹配(恢复目标)的名称上停止。
  • pg_stop_backup() 描述:完成执行在线备份。(需要管理员角色或复制的角色) 返回值类型:text 备注:pg_stop_backup删除pg_start_backup创建的标签文件,并且在事务日志归档区里创建一个备份历史文件。这个历史文件包含给予pg_start_backup的标签、备份的事务日志起始与终止位置、备份的起始和终止时间。返回值是备份的事务日志终止位置。计算出中止位置后,当前事务日志的插入点将自动前进到下一个事务日志文件,这样,结束的事务日志文件可以被立即归档从而完成备份。 示例: 12345 SELECT pg_stop_backup(); pg_stop_backup---------------- 0/4401E610(1 row)
  • pgxc_get_senders_catchup_time() 描述:显示所有DN上当前活跃的主备发送线程的追赶信息。 返回值类型:record 函数返回信息如下: 表1 pgxc_get_senders_catchup_time()字段 名称 类型 描述 node_name text 节点名称。 lwpid integer 当前sender的lwpid。 local_role text 本地的角色。 peer_role text 对端的角色。 state text 当前sender的复制状态。 sender text 当前sender的类型。 catchup_start timestamp with time zone catchup启动的时间。 catchup_end timestamp with time zone catchup结束的时间。 catchup_type text catchup方式为全量还是增量。 catchup_bcm_filename text catchup当前执行到的bcm文件 catchup_bcm_finished integer catchup已经操作完成的bcm文件数量。 catchup_bcm_total integer catchup总共需要操作的bcm文件数量。 catchup_percent text catchup已经操作完成的百分比。 catchup_remaining_time text catchup预估剩余时间。
  • pg_current_xlog_insert_location() 描述:获取当前事务日志的插入位置。 返回值类型:text 备注:pg_current_xlog_insert_location显示当前事务日志的插入位置。插入点是事务日志在某个瞬间的“逻辑终点”,而实际的写入位置则是从服务器内部缓冲区写出时的终点。写入位置是可以从服务器外部检测到的终点,如果要归档部分完成事务日志文件,则该操作即可实现。插入点主要用于服务器调试目的。如果是只读操作,不需要系统管理员权限。 示例: 12345 SELECT pg_current_xlog_insert_location(); pg_current_xlog_insert_location--------------------------------- 0/4316AD50(1 row)
  • pg_cbm_get_changed_block(startLSNArg text, endLSNArg text) 描述:用于将指定lsn范围之内的cbm文件合并成一个表,并返回表的各行记录。 返回值类型:record 备注:pg_cbm_get_changed_block返回的表字段包含:合并起始的lsn,合并截止的lsn, 表空间oid,库oid,表的relfilenode,表的fork number,表是否被删除,表是否被创建,表是否被截断,表被截断后的页面数,有多少页被修改以及被修改的页号的列表。
  • pg_current_xlog_location() 描述:获取当前事务日志的写入位置。 返回值类型:text 备注:pg_current_xlog_location使用与前面那些函数相同的格式显示当前事务日志的写入位置。如果是只读操作,不需要系统管理员权限。 示例: 12345 SELECT pg_current_xlog_location(); pg_current_xlog_location-------------------------- 0/4310D5D8(1 row)
  • pg_start_backup(label text [, fast boolean ]) 描述:开始执行在线备份。(需要管理员角色或复制的角色) 返回值类型:text 备注:pg_start_backup接受一个用户定义的备份标签(通常这是备份转储文件存放地点的名字)。这个函数向数据库集群的数据目录写入一个备份标签文件,然后以文本方式返回备份的事务日志起始位置。 12345 SELECT pg_start_backup('label_goes_here'); pg_start_backup----------------- 0/3000020(1 row)
  • pg_xlogfile_name_offset(location text) 描述:将事务日志的位置字符串转换为文件名并返回在文件中的字节偏移量。 返回值类型:text,integer 备注:可以使用pg_xlogfile_name_offset从前述函数的返回结果中抽取相应的事务日志文件名称和字节偏移量。例如: 1234567 SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());NOTICE: pg_stop_backup cleanup done, waiting for required WAL segments to be archivedNOTICE: pg_stop_backup complete, all required WAL segments have been archived file_name | file_offset --------------------------+-------------000000010000000000000003 | 272(1 row)
  • pg_switch_xlog() 描述:切换到一个新的事务日志文件。(需要管理员角色) 返回值类型:text 备注:pg_switch_xlog移动到下一个事务日志文件,以允许将当前日志文件归档(假定使用连续归档)。返回值是刚完成的事务日志文件的事务日志结束位置+1。如果从最后一次事务日志切换以来没有活动的事务日志,则pg_switch_xlog什么事也不做,直接返回当前事务日志文件的开始位置。 示例: 12345 SELECT pg_switch_xlog(); pg_switch_xlog---------------- 0/45017978(1 row)
  • txid_visible_in_snapshot(bigint, txid_snapshot) 描述:在快照中事务ID是否可见(不使用子事务ID)。 返回类型:boolean 内部事务ID类型(xid)是32位,每40亿事务一次循环。这些函数使用的数据类型txid_snapshot,存储在特定时刻事务ID可见性的信息。其组件描述在表1。 表1 快照组件 名字 描述 xmin 最早的事务ID(txid)仍然活动。所有较早事务将是已经提交可见的,或者是直接回滚。 xmax 作为尚未分配的txid。所有大于或等于此txids的都是尚未开始的快照时间,因此不可见。 xip_list 当前快照中活动的txids。这个列表只包含在xmin和xmax之间活动的txids;有可能活动的txids高于xmax。 介于大于等于xmin、小于xmax,并且不在这个列表中的txid,在这个时间快照已经完成的,因此按照提交状态查看他是可见还是回滚。这个列表不包含子事务的txids。 txid_snapshot的文本表示为:xmin:xmax:xip_list。 示例:10:20:10,14,15意思为:xmin=10, xmax=20, xip_list=10, 14, 15。
  • 背景 目前在互联网、教育、游戏等行业都有实时精准营销的需求。通过系统生成用户画像,在营销时通过条件组合筛选用户,快速提取目标群体。例如: 在电商行业中,商家在进行营销活动前,需要根据活动的目的,圈选一批满足特定特征的目标用户群体进行广告推送。 在教育行业中,需要根据学生不同的特征,推送有针对性的练习题目,帮助学生查漏补缺。 在搜索、视频、门户网站中,根据用户关注的热点,推送不同的内容。 这些业务场景都有一些共同的特点: 数据量庞大,运算量极大。 用户规模庞大,标签多,字段多,占用存储空间也多。 圈选的特征条件多样化,很难找到固定索引,如果每个字段一个索引,存储空间又会暴增。 性能要求高,因为实时营销要求秒级响应。 数据更新时效要求高,用户画像几乎要求实时更新。 针对上述业务场景特点, GaussDB (DWS)的roaringbitmap可以高效生成、压缩、解析位图数据,支持最常见的位图聚合操作(与、或、非、异或),满足用户在亿级以上用户、千万级标签的大数据量下实时精准营销、快速圈选用户的需求。
  • 不支持的PostgreSQL功能 继承表 建表 列约束中,用REFEREN CES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] 为表创建外键约束。 表约束中,用EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] )为表创建排除约束。 定义或更改对象的安全标签。 自定义C函数。 操作符(OPERATOR)的创建、修改和删除。 操作符类(OPERATOR CLASS)的创建、修改和删除。 操作符族(OPERATOR FAMILY)的创建、修改和删除。 文本检索解析器(TEXT SEARCH PARSER)的创建、修改和删除。 文本检索模板(TEXT SEARCH TEMPLATE)的创建、修改和删除。 排序规则(COLLATION)的创建、修改和删除。 规则(RULE)的创建和删除。 过程语言(LANGUAGE)的登记、修改和删除。 域(DOMAIN)的创建、修改和删除。 字符集编码转换(CONVERSION)的定义、修改和删除。 类型转换(CAST)的定义和删除。 用户映射(USER MAPPING)的定义、修改和删除。 生成一个通知。 监听一个通知。 停止监听通知信息。 加载或重新加载一个共享库文件。 释放一个数据库的会话资源。 反向移动游标。 PostgreSQL的扩展功能 另外,为了权限的隔离,GaussDB(DWS)禁用了如下功能: COPY的COPY FROM FILE和COPY TO FILE功能。
  • 不支持的PostgreSQL功能 继承表 建表 列约束中,用REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] 为表创建外键约束。 表约束中,用EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] )为表创建排除约束。 定义或更改对象的安全标签。 自定义C函数。 操作符(OPERATOR)的创建、修改和删除。 操作符类(OPERATOR CLASS)的创建、修改和删除。 操作符族(OPERATOR FAMILY)的创建、修改和删除。 文本检索解析器(TEXT SEARCH PARSER)的创建、修改和删除。 文本检索模板(TEXT SEARCH TEMPLATE)的创建、修改和删除。 排序规则(COLLATION)的创建、修改和删除。 规则(RULE)的创建和删除。 过程语言(LANGUAGE)的登记、修改和删除。 域(DOMAIN)的创建、修改和删除。 字符集编码转换(CONVERSION)的定义、修改和删除。 类型转换(CAST)的定义和删除。 用户映射(USER MAPPING)的定义、修改和删除。 生成一个通知。 监听一个通知。 停止监听通知信息。 加载或重新加载一个共享库文件。 释放一个数据库的会话资源。 反向移动游标。 PostgreSQL的扩展功能 另外,为了权限的隔离,GaussDB(DWS)禁用了如下功能: COPY的COPY FROM FILE和COPY TO FILE功能。
  • 不支持的PostgreSQL功能 继承表 建表 列约束中,用REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] 为表创建外键约束。 表约束中,用EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] )为表创建排除约束。 定义或更改对象的安全标签。 自定义C函数。 操作符(OPERATOR)的创建、修改和删除。 操作符类(OPERATOR CLASS)的创建、修改和删除。 操作符族(OPERATOR FAMILY)的创建、修改和删除。 文本检索解析器(TEXT SEARCH PARSER)的创建、修改和删除。 文本检索模板(TEXT SEARCH TEMPLATE)的创建、修改和删除。 排序规则(COLLATION)的创建、修改和删除。 规则(RULE)的创建和删除。 过程语言(LANGUAGE)的登记、修改和删除。 域(DOMAIN)的创建、修改和删除。 字符集编码转换(CONVERSION)的定义、修改和删除。 类型转换(CAST)的定义和删除。 用户映射(USER MAPPING)的定义、修改和删除。 生成一个通知。 监听一个通知。 停止监听通知信息。 加载或重新加载一个共享库文件。 释放一个数据库的会话资源。 反向移动游标。 PostgreSQL的扩展功能 另外,为了权限的隔离,GaussDB(DWS)禁用了如下功能: COPY的COPY FROM FILE和COPY TO FILE功能。
  • 客户端差异 GaussDB(DWS) gsql相较于PostgreSQL psql做了如下安全加固变更: 取消通过元命令\password设置用户密码。 新增元命令\i+、 \ir+、\include_relative+和输入输出参数-k,以支持给导入导出的文件加密。 取消打印命令行历史到文件的元命令\s。 涉及敏感操作SQL历史不再记录,如含有密码操作。即用户通过翻页/上下键查阅SQL历史将不能查到对应的记录。 支持连接后在屏幕上给出用户密码过期提示以及版本信息。 gsql在psql基础上还增加了如下功能: 新增输出格式参数-r。支持用户输入命令时的tab补齐和方向键调整焦点。 新增并行操作元命令\parallel,以提升执行性能。 新增\set RETRY支持语句出错重试。 新增PLSQL默认结束符功能,将“/”作为PLSQL语句(create or replace function/procedure)的默认结束符,增加便利性。 libpg:
  • 函数差异 有关GaussDB(DWS)支持的函数请参见函数和操作符。 如下的PostgreSQL函数GaussDB(DWS)不支持: 枚举支持函数。 访问权限查询函数。 has_sequence_privilege(user, sequence, privilege) has_sequence_privilege(sequence, privilege) 系统目录信息函数。 pg_get_triggerdef(trigger_oid) pg_get_triggerdef(trigger_oid, pretty_bool) line函数。 pg_node_tree函数。
  • 客户端差异 GaussDB(DWS) gsql相较于PostgreSQL psql做了如下安全加固变更: 取消通过元命令\password设置用户密码。 新增元命令\i+、 \ir+、\include_relative+和输入输出参数-k,以支持给导入导出的文件加密。 取消打印命令行历史到文件的元命令\s。 涉及敏感操作SQL历史不再记录,如含有密码操作。即用户通过翻页/上下键查阅SQL历史将不能查到对应的记录。 支持连接后在屏幕上给出用户密码过期提示以及版本信息。 gsql在psql基础上还增加了如下功能: 新增输出格式参数-r。支持用户输入命令时的tab补齐和方向键调整焦点。 新增并行操作元命令\parallel,以提升执行性能。 新增\set RETRY支持语句出错重试。 新增PLSQL默认结束符功能,将“/”作为PLSQL语句(create or replace function/procedure)的默认结束符,增加便利性。 libpg:
  • 函数差异 有关GaussDB(DWS)支持的函数请参见函数和操作符。 如下的PostgreSQL函数GaussDB(DWS)不支持: 枚举支持函数。 访问权限查询函数。 has_sequence_privilege(user, sequence, privilege) has_sequence_privilege(sequence, privilege) 系统目录信息函数。 pg_get_triggerdef(trigger_oid) pg_get_triggerdef(trigger_oid, pretty_bool) line函数。 pg_node_tree函数。
  • 客户端差异 GaussDB(DWS) gsql相较于PostgreSQL psql做了如下安全加固变更: 取消通过元命令\password设置用户密码。 新增元命令\i+、 \ir+、\include_relative+和输入输出参数-k,以支持给导入导出的文件加密。 取消打印命令行历史到文件的元命令\s。 涉及敏感操作SQL历史不再记录,如含有密码操作。即用户通过翻页/上下键查阅SQL历史将不能查到对应的记录。 支持连接后在屏幕上给出用户密码过期提示以及版本信息。 gsql在psql基础上还增加了如下功能: 新增输出格式参数-r。支持用户输入命令时的tab补齐和方向键调整焦点。 新增并行操作元命令\parallel,以提升执行性能。 新增\set RETRY支持语句出错重试。 新增PLSQL默认结束符功能,将“/”作为PLSQL语句(create or replace function/procedure)的默认结束符,增加便利性。 libpg:
  • 函数差异 有关GaussDB(DWS)支持的函数请参见函数和操作符。 如下的PostgreSQL函数GaussDB(DWS)不支持: 枚举支持函数。 访问权限查询函数。 has_sequence_privilege(user, sequence, privilege) has_sequence_privilege(sequence, privilege) 系统目录信息函数。 pg_get_triggerdef(trigger_oid) pg_get_triggerdef(trigger_oid, pretty_bool) line函数。 pg_node_tree函数。
  • 不支持的PostgreSQL功能 继承表 建表 列约束中,用REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] 为表创建外键约束。 表约束中,用EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] )为表创建排除约束。 定义或更改对象的安全标签。 自定义C函数。 操作符(OPERATOR)的创建、修改和删除。 操作符类(OPERATOR CLASS)的创建、修改和删除。 操作符族(OPERATOR FAMILY)的创建、修改和删除。 文本检索解析器(TEXT SEARCH PARSER)的创建、修改和删除。 文本检索模板(TEXT SEARCH TEMPLATE)的创建、修改和删除。 排序规则(COLLATION)的创建、修改和删除。 规则(RULE)的创建和删除。 过程语言(LANGUAGE)的登记、修改和删除。 域(DOMAIN)的创建、修改和删除。 字符集编码转换(CONVERSION)的定义、修改和删除。 类型转换(CAST)的定义和删除。 用户映射(USER MAPPING)的定义、修改和删除。 生成一个通知。 监听一个通知。 停止监听通知信息。 加载或重新加载一个共享库文件。 释放一个数据库的会话资源。 反向移动游标。 PostgreSQL的扩展功能 另外,为了权限的隔离,GaussDB(DWS)禁用了如下功能: COPY的COPY FROM FILE和COPY TO FILE功能。
  • 资源对SMP性能的影响 SMP架构是一种利用富余资源来换取时间的方案,计划并行之后必定会引起资源消耗的增加,包括CPU、内存、I/O和网络带宽等资源的消耗都会出现明显的增长,而且随着并行度的增大,资源消耗也随之增大。当上述资源成为瓶颈的情况下,SMP无法提升性能,反而可能导致集群整体性能的劣化。SMP支持自适应特性,该特性会根据当前资源和查询特征,动态选取最优的并行度。下面对各种资源对SMP性能的影响情况分别进行说明: CPU资源 在一般客户场景中,系统CPU利用率不高的情况下,利用SMP并行架构能够更充分地利用系统CPU资源,提升系统性能。但当数据库服务器的CPU核数较少,CPU利用率已经比较高的情况下,如果打开SMP并行,不仅性能提升不明显,反而可能因为多线程间的资源竞争而导致性能劣化。 内存资源 查询并行后会导致内存使用量的增长,但每个算子使用内存上限仍受到work_mem等参数的限制。假设work_mem为4GB,并行度为2,那么每个并行线程所分到的内存上限为2GB。在work_mem较小或者系统内存不充裕的情况下,使用SMP并行后,可能出现数据下盘,导致查询性能劣化的问题。 网络带宽资源 为了实现查询并行执行,会新增并行线程间的数据交换算子。对于Local类Stream算子,所需要进行数据交换的线程在同一个DN内,通过内存交换,不会增加网络负担。而非Local类算子,需要通过网络进行数据交换,因此会加重网络负担。当网络资源成为瓶颈的情况下,并行可能会导致一定程度的劣化。 I/O资源 要实现并行扫描必定会增加I/O的资源消耗,因此只有在I/O资源充足的情况下,并行扫描才能够提高扫描性能。 父主题: 配置SMP
  • 相关概念 使用VACUUM、VACUUM FULL和ANALYZE命令定期对每个表进行维护,主要有以下原因: VACUUM FULL可回收已更新或已删除的数据所占据的磁盘空间,同时将小数据文件合并。 VACUUM对每个表维护了一个可视化映射来跟踪包含对别的活动事务可见的数组的页。一个普通的索引扫描首先通过可视化映射来获取对应的数组,来检查是否对当前事务可见。若无法获取,再通过堆数组抓取的方式来检查。因此更新表的可视化映射,可加速唯一索引扫描。 VACUUM可避免执行的事务数超过数据库阈值时,事务ID重叠造成的原有数据丢失。 ANALYZE可收集与数据库中表内容相关的统计信息。统计结果存储在系统表PG_STATISTIC中。查询优化器会使用这些统计数据,生成最有效的执行计划。
共100000条