华为云用户手册

  • OPERATOR_RUNTIME OPERATOR_RUNTIME视图显示当前用户正在执行的作业的算子相关信息,如表1所示。 表1 OPERATOR_RUNTIME的字段 名称 类型 描述 queryid bigint 语句执行使用的内部query_id。 pid bigint 后端线程id。 plan_node_id integer 查询对应的执行计划的plan node id。 plan_node_name text 对应于plan_node_id的算子的名称。 start_time timestamp with time zone 该算子处理第一条数据的开始时间。 duration bigint 该算子到结束时候总的执行时间(ms)。 status text 当前算子的执行状态,包括finished和running。 query_dop integer 当前算子执行时的并行度。 estimated_rows bigint 优化器估算的行数信息。 tuple_processed bigint 当前算子返回的元素个数。 min_peak_memory integer 当前算子在数据库节点上的最小内存峰值(MB)。 max_peak_memory integer 当前算子在数据库节点上的最大内存峰值(MB)。 average_peak_memory integer 当前算子在数据库节点上的平均内存峰值(MB)。 memory_skew_percent integer 当前算子在数据库节点的内存使用倾斜率。 min_spill_size integer 若发生下盘,数据库节点上下盘的最小数据量(MB),默认为0。 max_spill_size integer 若发生下盘,数据库节点上下盘的最大数据量(MB),默认为0。 average_spill_size integer 若发生下盘,数据库节点上下盘的平均数据量(MB),默认为0。 spill_skew_percent integer 若发生下盘,数据库节点间下盘倾斜率。 min_cpu_time bigint 该算子在数据库节点上的最小执行时间(ms)。 max_cpu_time bigint 该算子在数据库节点上的最大执行时间(ms)。 total_cpu_time bigint 该算子在数据库节点上的总执行时间(ms)。 cpu_skew_percent integer 数据库节点间执行时间的倾斜率。 warning text 主要显示如下几类告警信息: Sort/SetOp/HashAgg/HashJoin spill Spill file size large than 256MB Broadcast size large than 100MB Early spill Spill times is greater than 3 Spill on memory adaptive Hash table conflict 父主题: Operator
  • 示例 建立一个SERVER,其中file_fdw为数据库中存在的FOREIGN DATA WRAPPER。 --创建SERVER。 gaussdb=# CREATE SERVER my_server FOREIGN DATA WRAPPER file_fdw; --删除SERVER。 gaussdb=# DROP SERVER my_server; 建立另外一个同构集群的SERVER,其中log_fdw为数据库中存在的FOREIGN DATA WRAPPER。 1 2 3 4 5 6 7 8 9 10 --创建SERVER。 gaussdb=# CREATE SERVER server_remote FOREIGN DATA WRAPPER log_fdw OPTIONS (address '10.146.187.231:8000,10.180.157.130:8000' , dbname 'test', username 'test', password '********' ); --删除SERVER。 gaussdb=# DROP SERVER server_remote;
  • 参数说明 server_name server的名称。 取值范围:长度必须小于等于63字节。 fdw_name 指定外部数据封装器的名称。 取值范围:dist_fdw,log_fdw,file_fdw。其中log_fdw和file_fdw仅作语法兼容,可以创建外表,无实际使用意义,不做额外使用说明。 OPTIONS ( { option_name ' value ' } [, ...] ) 这个子句为服务器指定选项。这些选项通常定义该服务器的连接细节,但是实际的名称和值取决于该服务器的外部数据包装器。 用于指定外部服务器的各类参数。 除了libpq支持的连接参数外,还额外提供以下参数: fdw_startup_cost 执行一个外表扫描时的启动耗时估算。这个值通常包含建立连接、远端对请求的分析和生成计划的耗时。默认值为100。取值范围为大于0的实数。 fdw_typle_cost 在远端服务器上对每一个元组进行扫描时的额外消耗。这个值通常表示数据在server间传输的额外消耗。默认值为0.01。取值范围为大于0的实数。
  • PG_OPFAMILY PG_OPFAMILY系统表定义操作符族。 每个操作符族是一个操作符和相关支持例程的集合,其中的例程实现为一个特定的索引访问方式指定的语义。另外,族中的操作符都是“兼容的”,通过由访问方式指定的方法。操作符族的概念允许交叉数据类型操作符和索引一起使用,并且合理的使用访问方式的语义的知识。 表1 PG_OPFAMILY字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 opfmethod oid PG_AM.oid 操作符族使用的索引方法。 opfname name - 这个操作符族的名称。 opfnamespace oid PG_NAMESPACE.oid 这个操作符的名称空间。 opfowner oid PG_AUTHID.oid 操作符族的所有者。 定义一个操作符族的大多数信息不在它的PG_OPFAMILY行里面,而是在相关的行PG_AMOP,PG_AMPROC和PG_OPCLASS里。 父主题: 其他系统表
  • ADM_IND_PARTITIONS ADM_IND_PARTITIONS视图显示数据库中所有一级分区表Local索引的索引分区信息(不包含分区表全局索引)。数据库中每个一级分区表的Local索引的索引分区(如果存在的话)都会在ADM_IND_PARTITIONS里有一行记录。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 ADM_IND_PARTITIONS字段 名称 类型 描述 index_owner character varying(64) 索引分区所属分区表索引的所有者的名称。 index_name character varying(64) 索引分区所属分区表索引的名称。 partition_name character varying(64) 索引分区的名称。 def_tablespace_name name 索引分区的表空间名称。 high_value text 索引分区所对应分区的上边界。 对于范围分区和间隔分区,显示各分区的上边界值。 对于列表分区,显示各分区的取值列表。 对于哈希分区,显示各分区的编号。 index_partition_usable boolean 索引分区是否可用。 t(true):可用。 f(false):不可用。 schema character varying(64) 索引分区所属分区表索引的模式。 high_value_length integer 索引分区所对应分区的边界的字符长度。 composite character varying(3) 索引是否属于二级分区表上的本地索引,该表不存储二级分区信息,所以该值为NO。 subpartition_count numeric 分区中的二级分区数,该表不存储二级分区信息,所以该值为0。 partition_position numeric 索引分区在索引中的位置。 status character varying(8) 索引分区是否可用。 tablespace_name name 分区所在表空间的名称。 pct_free numeric 块中最小可用空间百分比。 ini_trans numeric 初始事务数,默认值为4,非USTORE分区表时为NULL。 max_trans numeric 最大事务数,默认值为128,非USTORE分区表时为NULL。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extent numeric 暂不支持,值为NULL。 max_extent numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 freelists numeric 暂不支持,值为NULL。 freelist_groups numeric 暂不支持,值为NULL。 logging character varying(7) 是否记录对索引的更改。 compression character varying(13) 分区索引是否启用索引压缩。 blevel numeric 暂不支持,值为NULL。 leaf_blocks numeric 暂不支持,值为NULL。 distinct_keys numeric 暂不支持,值为NULL。 avg_leaf_blocks_per_key numeric 暂不支持,值为NULL。 avg_data_blocks_per_key numeric 暂不支持,值为NULL。 clustering_factor numeric 根据索引的值表示表中行的顺序。需要通过执行analyze进行统计。 num_rows numeric 分区中的行数。需要通过执行vacuum进行统计。 sample_size numeric 暂不支持,值为NULL。 last_analyzed timestamp with time zone 最近分析此分区的日期。 buffer_pool character varying(7) 分区的实际缓冲池。 flash_cache character varying(7) 暂不支持,值为NULL。 cell_flash_cache character varying(7) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 pct_direct_access numeric 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 domidx_opstatus character varying(6) 暂不支持,值为NULL。 parameters character varying(1000) 暂不支持,值为NULL。 interval character varying(3) 分区是否在间隔分区表的间隔节中。 segment_created character varying(3) 索引分区段是否已创建。 orphaned_entries character varying(3) 暂不支持,值为NULL。 父主题: 分区表
  • GS_LOGICAL_NAMESPACE GS_LOGICAL_NAMESPACE系统表存储名称空间相关的信息。 表1 GS_LOGICAL_NAMESPACE字段 字段名称 字段类型 说明 nspid oid 命名空间的OID。 nspname name 命名空间名称。 nspowner oid 命名空间所有者的OID。 nsptimeline bigint 命名空间的时间线标识符。 csnmin bigint 插入元组时的 CS N(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 createtime timestamp with time zone 插入元组的时间戳。 originid integer 元组的来源标识符。 dbnode oid 数据库OID。 父主题: 逻辑解码
  • 接口介绍 高级功能包DBE_MATCH支持的所有接口请参见表1。 表1 DBE_MATCH 接口名称 描述 DBE_MATCH.EDIT_DISTANCE_SIMILARITY 比较两个字符串的差距(删除、新增和变换的最小步骤),并归一化到0-100(100表示完全一致,0表示完全不一致)。 DBE_MATCH.EDIT_DISTANCE_SIMILARITY 比较两个字符串的差距(删除、新增、变换的最小步骤),并归一化到0-100(100表示完全一致,0表示完全不一致),DBE_MATCH.EDIT_DISTANCE_SIMILARITY函数原型为: 1 2 3 4 DBE_MATCH.EDIT_DISTANCE_SIMILARITY( str1 IN text, str2 IN text )returns integer ; 表2 DBE_MATCH.EDIT_DISTANCE_SIMILARITY接口参数说明 参数 描述 str1 第一个字符串,如果为null,直接输出0。 str2 第二个字符串,如果为null,直接输出0。
  • 事务管理 在ecpg缺省模式下,语句只有在EXEC SQL COMMIT发出的时候才被提交,嵌入的SQL接口也支持事务的自动提交(通过EXEC SQL SET AUTOCOMMIT TO ON语句设置自动提交)。在自动提交模式下,每条命令都是自动提交的,除非它们包围在一个明确的事务块里。自动提交模式可以用EXEC SQL SET AUTOCOMMIT TO OFF语句关闭。 常见事务管理命令如下: EXEC SQL COMMIT:提交正在进行的事务。 EXEC SQL ROLLBACK:回滚正在进行的事务。 EXEC SQL SET AUTOCOMMIT TO ON:启动自动提交模式。 EXEC SQL SET AUTOCOMMIT TO OFF:关闭自动提交模式,缺省模式。 父主题: 执行SQL命令
  • 注意事项 只有表空间所有者或者被授予了表空间DROP权限的用户有权限执行DROP TABLESPACE命令,系统管理员默认拥有此权限。 在删除一个表空间之前,表空间里面不能有任何数据库对象,否则会报错。 DROP TABLESPACE不支持回滚,因此,不能出现在事务块内部。 执行DROP TABLESPACE操作时,如果有另外的会话执行\db查询操作,可能会由于TABLESPACE事务的原因导致查询失败,请重新执行\db查询操作。 如果执行DROP TABLESPACE失败,需要再次执行一次DROP TABLESPACE IF EXISTS。
  • 参数说明 relname为查询中表table的名字,表有别名时,需要优先使用别名alias,此时relname=alias。当表名中有特殊符号,比如“@”、“.”时,relname需要用""括起来,以避免和查询块和schema名的声明重合。比如表名relnametest@1,需要写做"relnametest@1"。 schema为表所处的schema,可缺省,缺省时hint不区分schema对relname进行查找。 queryblock为表所处的queryblock,可缺省,缺省时hint不区分queryblock对relname进行查找。
  • PG_OS_THREADS PG_OS_THREADS视图提供当前节点下所有线程的状态信息。多租场景下,non-PDB访问该视图时返回全部信息,PDB访问该视图时仅返回该PDB相关信息。 表1 PG_OS_THREADS字段 名称 类型 描述 node_name text 当前节点的名称。 pid bigint 当前节点进程中正在运行的线程号。 lwpid integer 与pid对应的轻量级线程号。 thread_name text 与pid对应的线程名称。 creation_time timestamp with time zone 与pid对应的线程创建的时间。 dbid oid 线程所属的数据库id。 父主题: 其他系统视图
  • 参数 表1 SQLSetStmtAttr参数 关键字 参数说明 StatementHandle 语句句柄。 Attribute 需设置的属性。 ValuePtr 指向对应Attribute的值。依赖于Attribute的值,ValuePtr可能是32位无符号整型值,或指向以空结束的字符串,二进制缓冲区,或者驱动定义值。如果ValuePtr参数是驱动程序指定值,ValuePtr可能是有符号的整数。 StringLength 如果ValuePtr指向字符串或二进制缓冲区,则这个参数是*ValuePtr长度,如果ValuePtr指向整型,忽略StringLength。
  • 原型 1 2 3 4 SQLRETURN SQLSetStmtAttr(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength);
  • 案例环境准备 为了便于规则的使用场景演示,需准备建表语句如下: --清理环境 DROP SCHEMA IF EXISTS rewrite_rule_guc_test CASCADE; CREATE SCHEMA rewrite_rule_guc_test; SET current_schema=rewrite_rule_guc_test; --创建测试表 CREATE TABLE t(c1 INT, c2 INT, c3 INT, c4 INT); CREATE TABLE t1(c1 INT, c2 INT, c3 INT, c4 INT); CREATE TABLE t2(c1 INT, c2 INT, c3 INT, c4 INT);
  • 长查询和长事务调优 长查询或长事务将影响autovacuum对旧版本的清理,数据更新操作产生的旧版本将不能被及时清理。 数据访问时,需要遍历旧版本进行可见性判断,以便确定对当前查询快照可见的版本。长查询或长事务持续的时间越久,不能及时清理的旧版本就越多,对访问性能的影响也越大。极端场景下,例如考察基于较小数据量的索引点查吞吐的场景,旧版本增多将导致吞吐下降明显,性能受损可能在50%以上。 另外,不能及时清理旧版本,也会导致额外的存储空间占用,出现表膨胀、索引膨胀现象,数据访问时,额外的IO增加,也将会对性能产生一定影响。 Astore索引和表数据都采用非原地更新,更新索引键或非索引键,将产生索引旧版本和数据旧版本。Ustore索引采用非原地更新、数据采用原地更新,更新索引键将产生索引旧版本和数据旧版本,更新非索引键只产生数据旧版本。 长查询和长事务对Astore和Ustore的访问性能都会产生影响。 用户在业务实现上,应尽量避免长查询或长事务,可通过访问pg_stat_activity、pg_running_xacts观察系统中是否存在长查询或长事务,然后利用pg_cancel_backend(pid int)、pg_terminate_backend(pid int)函数取消掉长查询或长事务。 父主题: 典型SQL调优点
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 --创建表reason。 gaussdb=# CREATE TABLE reason ( CD_DEMO_SK int NOT NULL, CD_GENDER varchar(10), CD_MARITAL_STATUS varchar(10) ); --为一个INSERT语句创建一个预备语句然后执行它。 gaussdb=# PREPARE insert_reason(int,varchar(10),varchar(10)) AS INSERT INTO reason VALUES($1,$2,$3); gaussdb=# EXECUTE insert_reason(52, 'AAAAAAAADD', 'reason 52'); --查询数据。 gaussdb=# SELECT * FROM reason; cd_demo_sk | cd_gender | cd_marital_status ------------+------------+------------------- 52 | AAAAAAAADD | reason 52 (1 row) --删除表reason。 gaussdb=# DROP TABLE reason;
  • DB4AI.CREATE_SNAPSHOT_INTERNAL CREATE_SNAPSHOT_INTERNAL是db4ai.create_snapshot函数的内置执行函数,如表1所示。函数存在信息校验,无法直接调用。 表1 DB4AI.CREATE_SNAPSHOT_INTERNAL入参和返回值列表 参数 类型 描述 s_id IN BIGINT 快照id。 i_schema IN NAME 快照存储的名字空间。 i_name IN NAME 快照名称。 i_commands IN TEXT[] 定义数据获取的SQL命令。 i_comment IN TEXT 快照描述。 i_owner IN NAME 快照拥有者。 父主题: DB4AI Schema
  • DB_IND_SUBPARTITIONS DB_IND_SUBPARTITIONS视图显示当前用户所能访问的二级分区表Local索引的索引分区信息(不包含分区表全局索引)。所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_IND_SUBPARTITIONS字段 名称 类型 描述 index_owner character varying(64) 索引分区所属分区表索引的所有者的名称。 index_name character varying(64) 索引分区所属分区表索引的名称。 partition_name character varying(64) 索引所在一级分区的名称。 subpartition_name character varying(64) 索引所在二级分区的名称。 def_tablespace_name name 索引分区的表空间名称。 high_value text 索引分区所对应分区的边界值。 index_partition_usable boolean 索引分区是否可用。 t(true):可用。 f(false):不可用。 schema character varying(64) 索引分区所属分区表索引的模式。 high_value_length integer 索引分区所对应分区的边界的字符长度。 partition_position numeric 索引分区在索引中的位置。 subpartition_position numeric 二级分区在分区中的位置。 status character varying(8) 索引分区是否可用。 tablespace_name name 索引分区的表空间名称。 pct_free numeric 块中最小可用空间百分比。 ini_trans numeric 初始事务数,默认值为4,非USTORE分区表时为NULL。 max_trans numeric 最大事务数,默认值为128,非USTORE分区表时为NULL。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extent numeric 暂不支持,值为NULL。 max_extent numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 freelists numeric 暂不支持,值为NULL。 freelist_groups numeric 暂不支持,值为NULL。 logging character varying(7) 是否记录对索引的更改。 compression character varying(13) 用于二级分区的压缩类型。 blevel numeric 暂不支持,值为NULL。 leaf_blocks numeric 暂不支持,值为NULL。 distinct_keys numeric 暂不支持,值为NULL。 avg_leaf_blocks_per_key numeric 暂不支持,值为NULL。 avg_data_blocks_per_key numeric 暂不支持,值为NULL。 clustering_factor numeric 根据索引的值表示表中行的顺序。需要通过执行analyze进行统计。 num_rows numeric 二级分区中的行数。需要通过执行vacuum进行统计。 sample_size numeric 暂不支持,值为NULL。 last_analyzed timestamp with time zone 最近分析此分区的日期。 buffer_pool character varying(7) 二级分区的缓冲池。 flash_cache character varying(7) 暂不支持,值为NULL。 cell_flash_cache character varying(7) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 interval character varying(3) 分区是否在间隔分区表的间隔节中。 segment_created character varying(3) 索引分区段是否已创建。 domidx_opstatus character varying(6) 暂不支持,值为NULL。 parameters character varying(1000) 暂不支持,值为NULL。 父主题: 分区表
  • GS_SEG_DATAFILE_LAYOUT GS_SEG_DATAFILE_LAYOUT查看段页式1~5号数据文件的静态布局。只支持管理员权限用户查询。 表1 GS_SEG_DATAFILE_LAYOUT字段 名称 类型 描述 version text 段页式版本。默认:1.0。 seg_storage_type text 存储数据类型。取值范围: segment表示普通段页式数据。 hashbucket表示hashbucket数据。 file_id integer 数据文件标识。取值范围:[1,5]的int4值。 section_id integer 数据文件划分的数据区号。 section_type text 数据文件区类型。取值范围: file_header表示文件头。 spc_header表示空间头。 map_header表示映射头。 map_pages表示映射页面。 ip_pages(inverse pointer pages)表示反向指针页面。 data_pages表示数据页面。 page_start bigint 数据区域起始页面号。 page_end bigint 数据区域结束页面号。 page_count bigint 数据区域页面数。 total_size bigint 数据区的大小。单位为字节。 父主题: 段页式存储
  • PG_DIRECTORY PG_DIRECTORY系统表用于保存用户添加的directory对象,可以通过CREATE DIRECTORY语句向该表中添加记录,当enable_access_server_directory=off时,只允许初始用户创建directory对象;当enable_access_server_directory=on时,具有SYSADMIN权限的用户和继承了内置角色gs_role_directory_create权限的用户可以创建directory对象。普通用户需要授权才能访问该表。 表1 PG_DIRECTORY字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 dirname name 目录对象的名称。 owner oid 目录对象的所有者。 dirpath text 目录路径。 diracl aclitem[] 访问权限。 父主题: 其他系统表
  • PLAN_TABLE_DATA PLAN_TABLE_DATA存储了用户通过执行EXPLAIN PLAN收集到的计划信息。与PLAN_TABLE视图不同的是PLAN_TABLE_DATA表存储了所有session和user执行EXPLAIN PLAN收集的计划信息。 表1 PLAN_TABLE_DATA字段 名称 类型 描述 session_id text 表示插入该条数据的会话,由服务线程启动时间戳和服务线程ID组成。受非空约束限制。 user_id oid 用户ID,用于标识触发插入该条数据的用户。受非空约束限制。 statement_id character varying(30) 用户输入的查询标签。 plan_id bigint 查询标识。该标识在计划生成阶段自动产生,供内核工程师调试使用。 id integer 计划中的节点编号。 operation character varying(30) 操作描述。 options character varying(255) 操作选项。 object_name name 操作对应的对象名,来自于用户定义。 object_type character varying(30) 对象类型。 object_owner name 对象所属schema,来自于用户定义。 projection character varying(4000) 操作输出的列信息。 cost double precision 优化器对算子估算的执行代价。 cardinality double precision 优化器对算子估算的结果行数。 PLAN_TABLE_DATA中包含了当前节点所有用户、所有会话的数据,仅管理员有访问权限。普通用户可以通过PLAN_TABLE视图查看属于自己的数据。 PLAN_TABLE_DATA中的数据是用户通过执行EXPLAIN PLAN命令后由系统自动插入表中,因此禁止用户手动对数据进行插入或更新,否则会引起表中的数据混乱。需要对表中数据删除时,建议通过PLAN_TABLE视图来实现。 statement_id、object_name、object_owner和projection字段内容遵循用户定义的大小写存储,其它字段内容采用大写存储。 父主题: 其他系统表
  • ADM_SEQUEN CES ADM_SEQUENCES视图显示数据库中所有序列的信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_SEQUENCES字段 名称 类型 描述 sequence_owner character varying(64) 序列的所有者。 sequence_name character varying(64) 序列名称。 min_value int16 序列的最小值。 max_value int16 序列的最大值。 increment_by int16 序列的递增值。 last_number int16 上一序列的值。 cache_size int16 序列磁盘缓存大小。 cycle_flag character(1) 序列是否是循环序列。取值范围: Y:循环序列。 N:不是循环序列。 父主题: 其他系统视图
  • GLOBAL_LOCKS GLOBAL_LOCKS视图用于查看各节点各打开事务所持有的锁信息,如表1所示。 表1 GLOBAL_LOCKS字段 名称 类型 描述 node_name name 节点名称。 locktype text 被锁定对象的类型:relation、extend、page、tuple、transactionid、virtualxid、object、userlock、advisory或tablespace。 database oid 被锁定对象所在数据库的OID: 如果被锁定的对象是共享对象,则OID为0。 如果是一个事务ID,则为NULL。 relation oid 关系的OID,如果锁定的对象不是关系,也不是关系的一部分,则为NULL。 page integer 关系内部的页面编号,如果对象不是关系页或者不是行页,则为NULL。 tuple smallint 页面里边的行编号,如果对象不是行,则为NULL。 virtualxid text 事务的虚拟ID,如果对象不是一个虚拟事务ID,则为NULL。 transactionid xid 事务的ID,如果对象不是一个事务ID,则为NULL。 classid oid 包含该对象的系统表的OID,如果对象不是普通的数据库对象,则为NULL。 objid oid 对象在其系统表内的OID,如果对象不是普通数据库对象,则为NULL。 objsubid smallint 对于表的一个字段,这是字段编号;对于其他对象类型,这个字段是0;如果这个对象不是普通数据库对象,则为NULL。 virtualtransaction text 持有此锁或者在等待此锁的事务的虚拟ID。 pid bigint 持有或者等待这个锁的服务器线程的逻辑ID。如果锁是被一个预备事务持有的,则为NULL。 mode text 这个线程持有的或者是期望的锁模式。 granted boolean 如果锁是持有锁,则为TRUE。 如果锁是等待锁,则为FALSE。 fastpath boolean 如果通过fast-path获得锁,则为TRUE;如果通过主要的锁表获得,则为FALSE。 父主题: Lock
  • 接口介绍 高级功能包DBE_APPLICATION_INFO支持的所有接口请参见表1。DBE_APPLICATION_INFO作用范围是当前session。 表1 DBE_APPLICATION_INFO 接口名称 描述 DBE_APPLICATION_INFO.SET_CLIENT_INFO 写入客户端信息。 DBE_APPLICATION_INFO.READ_CLIENT_INFO 读取客户端信息。 DBE_APPLICATION_INFO.SET_MODULE 将当前正在运行的模块的名称设置为新模块。设置module和action。 DBE_APPLICATION_INFO.READ_MODULE 读取当前会话的的模块和操作字段的值。 DBE_APPLICATION_INFO.SET_ACTION 设置当前模块中当前操作的名称,设置action的值。 DBE_APPLICATION_INFO.SET_CLIENT_INFO 写入客户端信息。DBE_APPLICATION_INFO.SET_CLIENT_INFO函数原型为: 1 2 3 DBE_APPLICATION_INFO.SET_CLIENT_INFO( str text )returns void; 表2 DBE_APPLICATION_INFO.SET_CLIENT_INFO接口参数说明 参数 描述 str 写入的客户端信息,最长为64字节,超过64字节将被截断。 DBE_APPLICATION_INFO.READ_CLIENT_INFO 读取客户端信息DBE_APPLICATION_INFO.READ_CLIENT_INFO函数原型为: 1 2 DBE_APPLICATION_INFO.READ_CLIENT_INFO( OUT client_info text); 表3 DBE_APPLICATION_INFO.READ_CLIENT_INFO接口参数说明 参数 描述 client_info 客户端信息 DBE_APPLICATION_INFO.SET_MODULE 将当前正在运行的模块的名称设置为新模块。DBE_APPLICATION_INFO.SET_MODULE函数原型为: 1 2 3 4 DBE_APPLICATION_INFO.SET_MODULE( IN module_name text, IN action_name text ); 表4 DBE_APPLICATION_INFO.SET_MODULE接口参数说明 参数 描述 module_name 当前正在运行的模块的名称。最长为64字节,超过64字节将被截断。 action_name 当前模块中当前操作的名称。最长为64字节,超过64字节将被截断。 示例: CALL dbe_application_info.set_module('module_name','action_name'); set_module ------------ (1 row) DBE_APPLICATION_INFO.READ_MODULE 读取当前会话的的模块和操作字段的值。DBE_APPLICATION_INFO.READ_MODULE函数原型为: 1 2 3 4 DBE_APPLICATION_INFO.READ_MODULE( OUT module_name text, OUT action_name text ); 表5 DBE_APPLICATION_INFO.READ_MODULE接口参数说明 参数 描述 module_name 当前正在运行的模块的名称。 action_name 当前模块中当前操作的名称。 示例: DECLARE module varchar2(64); action varchar2(64); BEGIN dbe_application_info.read_module(module,action); dbe_output.print_line(module); dbe_output.print_line(action); END; / module_name action_name ANONYMOUS BLOCK EXECUTE DBE_APPLICATION_INFO.SET_ACTION 设置当前模块中当前操作的名称。DBE_APPLICATION_INFO.SET_ACTION函数原型为: 1 2 3 DBE_APPLICATION_INFO.SET_ACTION( IN action_name text ); 表6 DBE_APPLICATION_INFO.SET_ACTION接口参数说明 参数 描述 action_name 当前模块中当前操作的名称。最长为64字节,超过64字节将被截断。 示例 CALL dbe_application_info.set_action('action_name'); set_action ------------ (1 row)
  • 接口介绍 高级功能包DBE_UTILITY支持的所有接口请参见表1。 表1 DBE_UTILITY 接口名称 描述 DBE_UTILITY.FORMAT_ERROR_BACKTRACE 输出存储过程异常的调用堆栈。 DBE_UTILITY.FORMAT_ERROR_STACK 输出存储过程异常的具体信息。 DBE_UTILITY.FORMAT_CALL_STACK 输出存储过程的调用堆栈。 DBE_UTILITY.GET_TIME 输出当前时间,一般用于做差得到执行时长。 DBE_UTILITY.CANONICALIZE 用于给表名字符串做规范。 DBE_UTILITY.COMMA_TO_TABLE 将用逗号隔开的名字列表的字符串转换为PL/SQL表名列表。 DBE_UTILITY.DB_VERSION 返回数据库的版本号和兼容性版本号。 DBE_UTILITY.EXEC_DDL_STATEMENT 用于执行用户输入的DDL语句。 DBE_UTILITY.EXPAND_SQL_TEXT_PROC 用于展开SQL查询的视图。 DBE_UTILITY.GET_CPU_TIME 返回当前CPU处理时间的测量值。 DBE_UTILITY.GET_ENDIANNESS 用于获取数据库所在平台字节序的大小端信息。 DBE_UTILITY.GET_HASH_VALUE 返回一个给定字符串的哈希值。 DBE_UTILITY.GET_SQL_HASH 输出一个给定字符串的哈希值,该存储过程在不打开proc_outparam_override时使用。 DBE_UTILITY.IS_BIT_SET 用于检查参数n是否存在于r。 DBE_UTILITY.IS_CLUSTER_DATABASE 用于判断当前数据库是否在数据库集群模式下运行。 DBE_UTILITY.NAME_RESOLVE 解析给定的对象名称,包括同义词翻译和必要的授权检查。 DBE_UTILITY.NAME_TOKENIZE 用于解析a [. b [. c ]][@ dblink ]形式的名字。 DBE_UTILITY.OLD_CURRENT_SCHEMA 返回当前用户环境下的数据库模式名称。 DBE_UTILITY.OLD_CURRENT_USER 返回当前用户的名称。 DBE_UTILITY.TABLE_TO_COMMA 将PL/SQL中的表名转换为用逗号隔开的名字列表的字符串。 DBE_UTILITY.GET_SQL_HASH_FUNC 功能同DBE_UTILITY.GET_SQL_HASH,该函数在打开proc_outparam_override时使用。 DBE_UTILITY.EXPAND_SQL_TEXT 内部函数,不建议用户使用。 DBE_UTILITY.CANONICALIZE_RET 内部函数,不建议用户使用。 DBE_UTILITY.COMMA_TO_TABLE_FUN 内部函数,不建议用户使用。 DBE_UTILITY.COMPILE_SCH.... 内部函数,不建议用户使用,推荐使用pkg_util.gs_compile_schema。 DBE_UTILITY.NAME_SEPARATE 内部函数,不建议用户使用。 DBE_UTILITY.NAME_TOKENIZE_FUNC 内部函数,不建议用户使用。 DBE_UTILITY.NAME_TOKENIZE_LOWER 内部函数,不建议用户使用。 DBE_UTILITY.NAME_TOKENIZE_LOWER_FUNC 内部函数,不建议用户使用。 DBE_UTILITY.PRIVILEGE_CHECK 内部函数,不建议用户使用。 DBE_UTILITY.SEARCH_CLASS_WITH_NSPOID_ONAME_TYPE 内部函数,不建议用户使用。 DBE_UTILITY.SEARCH_OBJE CTS 内部函数,不建议用户使用。 DBE_UTILITY.SEARCH_OBJECTS_SYNONYM_FILL_SECHEMA 内部函数,不建议用户使用。 DBE_UTILITY.SEARCH_PROCEDURE_WITH_NSPOID_ONAME 内部函数,不建议用户使用。 DBE_UTILITY.SEARCH_SYNONM_WITH_NSPOID_ONAME 内部函数,不建议用户使用。 DBE_UTILITY.TABLE_TO_COMMA_FUNC 内部函数,不建议用户使用。 DBE_UTILITY.USER_NAME 内部函数,不建议用户使用。 DBE_UTILITY.FORMAT_ERROR_BACKTRACE 存储过程FORMAT_ERROR_BACKTRACE返回在执行过程中出现错误时,出现错误位置的调用堆栈。DBE_UTILITY.FORMAT_ERROR_BACKTRACE函数原型为: 1 2 DBE_UTILITY.FORMAT_ERROR_BACKTRACE() RETURN TEXT; DBE_UTILITY.FORMAT_ERROR_STACK 存储过程FORMAT_ERROR_STACK返回在执行过程中出现错误时,出现错误位置的具体信息。DBE_UTILITY.FORMAT_ERROR_STACK函数原型为: 1 2 DBE_UTILITY.FORMAT_ERROR_STACK() RETURN TEXT; DBE_UTILITY.FORMAT_CALL_STACK 存储过程FORMAT_CALL_STACK设置输出函数调用堆栈。DBE_UTILITY.FORMAT_CALL_STACK函数原型为: 1 2 DBE_UTILITY.FORMAT_CALL_STACK() RETURN TEXT; DBE_UTILITY.COMPILE_SCHEMA 重编译指定schema下的PL/SQL类型包和函数(系统自带的包和函数除外), DBE_UTILITY.COMPILE_SCHEMA函数原型为: DBE_UTILITY.COMPILE_SCHEMA ( SCHEMA IN VARCHAR2, COMPILE_ALL IN BOOLEAN DEFAULT TRUE, REUSE_SETTINGS IN BOOLEAN DEFAULT FALSE ) RETURNS VOID; 示例参考11.12.1.2中pkg_util.utility_compile_schema函数使用方式, 调用处改为: call DBE_UTILITY.compile_schema('pkg_var_test'); DBE_UTILITY.GET_TIME 存储过程GET_TIME设置输出时间,通常用于做差,单独的返回值没有意义。DBE_UTILITY.GET_TIME函数原型为: 1 2 DBE_UTILITY.GET_TIME() RETURN BIGINT;
  • SQL调优指南 SQL调优的唯一目的是“资源利用最大化”,即CPU、内存、磁盘I/O三种资源利用最大化。所有调优手段都是围绕资源使用开展的。资源利用最大化是指SQL语句尽量高效,节省资源开销,以最小的代价实现最大的效益。比如做典型点查询的时候,可以用seqscan+filter(即读取每一条元组和点查询条件进行匹配)实现,也可以通过indexscan实现,但indexscan可以以更小的代价实现相同的效果。 根据硬件资源和客户的业务特征确定合理的数据库部署方案和表定义是数据库在多数情况下满足性能要求的基础。下文的调优说明假设您已根据“软件安装”指引在安装过程中按照合理的数据库方案完成了安装,且已经根据“开发设计建议”的指引进行了数据库设计。 Query执行流程 SQL执行计划介绍 调优流程 更新统计信息 审视和修改表定义 审视计划跳变场景 典型SQL调优点 经验总结:SQL语句改写规则 SQL调优关键参数调整 使用Plan Hint进行调优 使用向量化执行引擎进行调优 PLAN TRACE使用介绍 使用SQL PATCH进行调优 查看计划跳变历史 实际调优案例
  • 操作步骤 使用如下命令创建一个新的数据库db_tpcc。 1 2 3 4 gaussdb=# CREATE DATABASE db_tpcc; CREATE DATABASE gaussdb=# CREATE DATABASE db_tpcc1 TEMPLATE templatea; CREATE DATABASE 数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。 如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。 如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。 创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。 数据库默认创建在pg_default表空间下。若要指定表空间,可以使用如下语句。 1 2 gaussdb=# CREATE DATABASE db_tpcc WITH TABLESPACE = hr_local; CREATE DATABASE 其中hr_local为表空间名称,关于如何创建表空间,请参见管理表空间。 创建完db_tpcc数据库后,可以选择继续在默认的postgres数据库进行其他操作,也可以按如下方法退出postgres数据库,使用新用户连接到此数据库执行创建表等操作。 gaussdb=# \q gsql -d db_tpcc -p 8000 -U joe Password for user joe: gsql (( GaussDB Kernel XXX.X.XXX build f521c606) compiled at 2021-09-16 14:55:22 commit 2935 last mr 6385 release) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. 查看数据库。 使用\l元命令查看数据库系统的数据库列表。 1 gaussdb=# \l 使用如下命令通过系统表pg_database查询数据库列表。 1 gaussdb=# SELECT datname FROM pg_database; 修改数据库。 用户可以执行如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。 执行如下命令为数据库设置默认的模式搜索路径。 1 2 gaussdb=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public; ALTER DATABASE 执行如下命令为数据库重新命名。 1 2 gaussdb=# ALTER DATABASE db_tpcc RENAME TO human_tpcds; ALTER DATABASE 删除数据库。 用户可通过DROP DATABASE命令删除数据库。该命令会移除数据库系统目录并永久删除磁盘上的数据文件。仅数据库所有者或者拥有系统管理员权限的用户可以执行删除操作。若存在活跃数据库连接,删除操作将失败,操作前请确保已连接到其他数据库。 执行如下命令删除数据库。 1 2 gaussdb=# DROP DATABASE human_tpcds; DROP DATABASE
  • 注意事项 如果数据库的编码为SQL_ASCII(可以通过“show server_encoding;”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库将会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。 针对这种情况,请遵循以下条件: 保证数据对象的名称不超过限定长度。 修改数据库的默认存储编码集(server_encoding)为UTF8编码集。 不要使用多字节字符作为对象名。 当出现因为误操作导致在多字节字符的中间截断,从而导致无法删除数据库对象的现象时,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删除。
  • 背景信息 初始时,GaussDB包含四个模板数据库template0、template1、templatem、templatea以及一个默认的用户数据库postgres。postgres默认的兼容数据库类型为A(即DBCOMPATIBILITY = A ),该兼容类型下将空字符串作为NULL处理。 CREATE DATABASE实际上通过复制模板数据库来创建新数据库。默认情况下,A兼容模式数据库复制templatea,非A兼容模式数据库复制template0。请避免使用客户端或其他方式连接及操作两个模板数据库。 模板数据库中没有用户表,可通过系统表PG_DATABASE查看模板数据库属性。 模板template0、templatea不允许用户连接,模板template1和templatem只允许数据库初始用户和系统管理员连接,普通用户无法连接。 创建A兼容模式数据库时指定模板库为template0时会产生NOTICE,实际以templatea为模板创建。 templatem为系统保留数据库名称,不允许用户以其为数据库名创建数据库 templatea、templatem不允许用户修改名称。 数据库系统中会有多个数据库,但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间相互查询。GaussDB中存在多个数据库时,需要通过-d参数指定相应的数据库实例进行连接。
  • 向量化引擎支持的数据类型 向量化引擎支持的数据类型如表1所示。 表1 向量化引擎支持的数据类型 类别 数据类型 长度 是否支持 Numeric Types tinyint [unsigned] 1 支持 smallint [unsigned] 2 支持 mediumint [unsigned] 3 支持 integer [unsigned] 4 支持 bigint [unsigned] 8 支持 decimal -1 支持 numeric -1 支持 real 4 支持 double precision 8 支持 smallserial 2 支持 serial 4 支持 bigserial 8 支持 largeserial -1 支持 Monetary Types money 8 支持 Boolean Types boolean 1 支持 Character Types character varying(n), varchar(n) -1 支持 character(n), char(n),nchar(n) n 支持 character、char 1 支持 text -1 支持 varchar2(n) -1 支持 nvarchar2(n) -1 支持 clob -1 支持 Binary Types raw -1 支持 bytea -1 支持 Bit String Types bit(n) n 支持 bit varying(n) -1 支持 Date/Time Types timestamp with time zone 8 支持 timestamp without time zone 8 支持 date 4 支持 time without time zone 8 支持 time with time zone 12 支持 interval 16 支持 Network Address Types cidr 7 or 19 支持 inet 7 or 19 支持 XML Types xml -1 支持 Other Types enum enum 类型由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过63个字节。 支持 enum类型当前仅支持如下方式创建,详情请参见CREATE TYPE。 CREATE TYPE name AS ENUM (['label' [, ...]]); 父主题: 数据类型
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全