华为云用户手册

  • client_connection_check_interval 参数说明:客户端连接状态检测时间间隔。该参数仅8.2.0及以上集群版本支持。 参数类型:USERSET 取值范围:整型,0 ~ INT_MAX,单位为毫秒。0表示不检测客户端连接状态。 默认值:10000 通过gsql/jdbc/odbc等客户端直连CN执行长查询,在长查询执行期间: CN每隔client_connection_check_interval时间检测一次客户端连接状态,若检测到客户端与CN的连接已经断开,则服务端主动终止长查询的执行,释放相关资源,避免集群资源浪费。 DN每隔client_connection_check_interval时间检测一次CN与DN的连接状态,若检测到CN与DN的连接已经断开,则DN主动终止长查询的执行,释放相关资源,避免集群资源浪费。
  • 语法 语法请参见图1。 图1 call_procedure::= using_clause子句的语法参见图2。 图2 using_clause-3 对以上语法格式的解释如下: CALL procedure_name,调用存储过程。 [:placeholder1,:placeholder2,…],存储过程参数占位符列表。占位符个数与参数个数相同。 USING [IN|OUT|IN OUT] bind_argument,用于指定存放传递给存储过程参数值的变量。bind_argument前的修饰符与对应参数的修饰符一致。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 --创建存储过程proc_add。 CREATE OR REPLACE PROCEDURE proc_add ( param1 in INTEGER, param2 out INTEGER, param3 in INTEGER ) AS BEGIN param2:= param1 + param3; END; / DECLARE input1 INTEGER:=1; input2 INTEGER:=2; statement VARCHAR2(200); param2 INTEGER; BEGIN --声明调用语句 statement := 'call proc_add(:col_1, :col_2, :col_3)'; --执行语句 EXECUTE IMMEDIATE statement USING IN input1, OUT param2, IN input2; dbms_output.put_line('result is: '||to_char(param2)); END; / --删除存储过程 DROP PROCEDURE proc_add;
  • PG_GET_SENDERS_CATCHUP_TIME PG_GET_SENDERS_CATCHUP_TIME视图显示单个DN上当前活跃的主备发送线程的追赶信息。 表1 PG_GET_SENDERS_CATCHUP_TIME字段 名称 类型 描述 pid bigint 当前sender的线程ID。 lwpid integer 当前sender的lwpid。 local_role text 本地的角色。 peer_role text 对端的角色。 state text 当前sender的复制状态。 type 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预估剩余时间。 父主题: 系统视图
  • GS_BLOCKLIST_QUERY GS_BLOCKLIST_QUERY系统表存储作业黑名单信息和异常信息,该表以unique_sql_id作为唯一索引,进行作业异常信息统计和黑名单记录,可通过与GS_WLM_SESSION_INFO进行关联获取作业的query字段和执行信息。 GaussDB(DWS)同时提供了GS_BLOCKLIST_QUERY视图用于查询作业黑名单和异常信息,该视图可直接显示query字段信息,不过因为该视图与GS_WLM_SESSION_INFO为依赖关系,因此在GS_WLM_SESSION_INFO表较大的情况下,查询可能需要消耗较长的时间。 表1 GS_BLOCKLIST_QUERY字段 名字 类型 引用 描述 unique_sql_id bigint - 基于查询解析树生成的查询唯一ID。 block_list boolean - 查询作业是否属于黑名单。 except_num integer - 查询作业异常次数。 except_time timestamp - 查询作业最近一次异常时间。 此系统表的schema为dbms_om。 此系统表包含唯一索引,使用哈希分布方式分布在DN上,分布列为unique_sql_id。 此系统表仅限在gaussdb数据库中查询,其它数据库中查询会直接报错。 GS_BLOCKLIST_QUERY视图存储在pg_catalog下。 通常对于DML语句,在计算Unique SQL ID的过程中会忽略常量值。但对于DDL、DCL以及设置参数等语句,常量值不可以忽略。因此一个unique_sql_id可能会对应一个或多个查询。 父主题: 系统表
  • PG_RLSPOLICY PG_RLSPOLICY系统表存储行级访问控制策略的信息。 表1 PG_RLSPOLICY字段 名称 类型 描述 polname name 行访问控制策略名称。 polrelid oid 行访问控制策略的表OID。 polcmd char 行访问控制策略影响的SQL操作,包括:*(ALL)、r(SELECT)、w(UPDATE)、d(DELETE)。 polpermissive boolean 行访问控制策略的类型。 说明: polpermissive的取值: true表示PERMISSIVE,表示行访问控制策略是宽容性策略。 false表示RESTRICTIVE,表示行访问控制策略是限制性策略。 polroles oid[] 行访问控制策略影响的数据库用户OID。 polqual pg_node_tree 行访问控制策略的SQL条件表达式。 父主题: 系统表
  • 全并行的数据查询处理 GaussDB(DWS)是采用Shared-nothing架构的MPP系统,其由众多拥有独立且互不共享CPU、内存、存储等系统资源的逻辑节点组成。在这样的系统架构中,业务数据被分散存储在多个节点上,数据分析任务被推送到数据所在位置就近执行,并行地完成大规模的数据处理工作,实现对数据处理的快速响应。 GaussDB(DWS)后台还通过算子并行执行、指令在寄存器并行执行、及LLVM动态编译剪枝冗余的条件逻辑判断,助力数据查询性能提升。
  • 创建用户 CREATE USER语句用于创建新的GaussDB(DWS)用户。创建新用户后,可以使用该用户连接数据库。 创建普通用户u1,并设置用户拥有CREATEDB属性。 1 CREATE USER u1 WITH CREATEDB PASSWORD '{Password}'; 创建系统管理员mydbadmin,需指定参数SYSADMIN 。 1 CREATE USER mydbadmin sysadmin PASSWORD '{Password}'; 通过视图PG_USER查看已创建的用户。 1 SELECT * FROM pg_user; 要查看用户属性,请查询系统表PG_AUTHID。 1 SELECT * FROM pg_authid;
  • 锁定用户 ALTER USER语句中ACCOUNT LOCK | ACCOUNT UNLOCK参数用于锁定或者解锁用户,被锁定的用户不允许登录。若管理员发现某账户被盗、非法访问等异常情况,可手动锁定该账户;当管理员认为账户恢复正常后,可手动解锁该账户。 示例: 锁定用户u1: 1 ALTER USER u1 ACCOUNT LOCK; 解锁用户u1: 1 ALTER USER u1 ACCOUNT UNLOCK;
  • 删除用户 DROP USER语句用于删除一个或多个GaussDB(DWS)用户。当确认账户不再使用,管理员可以删除用户账户。用户删除后不可恢复。 同时删除多个用户时,用","隔开。 成功删除用户后,该用户的所有权限也会被一同删除。 当删除的用户正处于活动状态时,此会话状态不会立马断开,用户在会话状态断开后才会被完全删除。 DROP USER语句指定CASCADE时,可级联删除依赖用户的表等对象。即删除owner是该用户的对象,并清理掉其他对象对该用户的授权信息。 示例: 删除用户u1: 1 DROP USER u1; 级联删除账户u2: 1 DROP USER u2 CASCADE;
  • PG_STAT_XACT_USER_TABLES PG_STAT_XACT_USER_TABLES视图显示命名空间中用户表的事务状态信息。 表1 PG_STAT_XACT_USER_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 此表的模式名。 relname name 表名。 seq_scan bigint 在该表上启动的顺序扫描数。 seq_tup_read bigint 顺序扫描抓取的活跃行数。 idx_scan bigint 在该表上启动的索引扫描数。 idx_tup_fetch bigint 索引扫描抓取的活跃行数。 n_tup_ins bigint 插入行数。 n_tup_upd bigint 更新行数。 n_tup_del bigint 删除行数。 n_tup_hot_upd bigint 热更新行数(即不需要单独的索引更新)。 父主题: 系统视图
  • 注意事项 当分配的句柄并非环境句柄时,如果SQLAllocHandle返回的值为SQL_ERROR,则它会将OutputHandlePtr的值设置为SQL_NULL_HDBC、SQL_NULL_HSTMT或SQL_NULL_HDESC。之后,通过调用带有适当参数的SQLGetDiagRec,其中HandleType和Handle被设置为IntputHandle的值,可得到相关的SQLSTATE值,通过SQLSTATE值可以查出调用此函数的具体信息。
  • 参数 表1 SQLAllocHandle参数 关键字 参数说明 HandleType 由SQLAllocHandle分配的句柄类型。必须为下列值之一: SQL_HANDLE_ENV(环境句柄) SQL_HANDLE_DBC(连接句柄) SQL_HANDLE_STMT(语句句柄) SQL_HANDLE_DESC(描述句柄) 申请句柄顺序为,先申请环境句柄,再申请连接句柄,最后申请语句句柄,后申请的句柄都要依赖它前面申请的句柄。 InputHandle 将要分配的新句柄的类型。 如果HandleType为SQL_HANDLE_ENV,则这个值为SQL_NULL_HANDLE。 如果HandleType为SQL_HANDLE_DBC,则这一定是一个环境句柄。 如果HandleType为SQL_HANDLE_STMT或SQL_HANDLE_DESC,则它一定是一个连接句柄。 OutputHandlePtr 输出参数:一个缓冲区的指针,此缓冲区以新分配的数据结构存放返回的句柄。
  • GS_ALL_CONTROL_GROUP_INFO GS_ALL_CONTROL_GROUP_INFO视图显示数据库内所有的控制组信息。 表1 GS_ALL_CONTROL_GROUP_INFO字段 名称 类型 描述 name text 控制组的名称。 type text 控制组的类型。 gid bigint 控制组ID。 classgid bigint Workload所属Class的控制组ID。 class text Class控制组。 workload text Workload控制组。 shares bigint 控制组分配的CPU资源配额。 limits bigint 控制组分配的CPU资源限额。 wdlevel bigint Workload控制组层级。 cpucores text 控制组使用的CPU核的信息。 父主题: 系统视图
  • PG_CURSORS PG_CURSORS视图列出了当前可用的游标。 表1 PG_CURSORS字段 名称 类型 描述 name text 游标名。 statement text 声明改游标时的查询语句。 is_holdable boolean 如果该游标是持久的(就是在声明该游标的事务结束后仍然可以访问该游标)则为TRUE,否则为FALSE。 is_binary boolean 如果该游标被声明为BINARY则为TRUE,否则为FALSE。 is_scrollable boolean 如果该游标可以滚动(就是允许以不连续的方式检索)则为TRUE,否则为FALSE。 creation_time timestamp with time zone 声明该游标的时间戳。 父主题: 系统视图
  • GS_WLM_OPERATOR_HISTORY GS_WLM_OPERATOR_HISTORY视图显示的是当前用户在当前CN上执行作业结束后的算子的相关记录。 此视图用于从GaussDB(DWS)中查询数据,数据库中的数据会定时被清理。当GUC参数enable_resource_record为on时,视图中的记录每隔3分钟被转储到系统表GS_WLM_OPERATOR_INFO中一次,同时视图中的记录被删除;当GUC参数enable_resource_record为off时,记录在视图中的存留时间达到超期时间后会被删除。记录的数据同表1。 父主题: 系统视图
  • 前提条件 GUC参数enable_resource_track为on (默认为on)。 GUC参数resource_track_level为query、perf或operator(默认为query)。 监控作业的类型为: 优化器估算的执行代价大于或等于resource_track_cost取值的作业。 Cgroups功能正常加载,可通过gs_cgroup -P查看控制组信息。 GUC参数enable_track_record_subsql控制是否记录存储过程、匿名块内部语句。 在上述条件中,enable_resource_track为系统级参数,用于设置是否开启资源监控功能。resource_track_level为session级参数,可以对某个session的资源监控级别进行灵活设置。这两个参数的设置方法如下表: 表2 设置资源监控信息统计级别 enable_resource_track resource_track_level query级别信息 算子级别信息 on(default) none 不统计 不统计 query(default) 统计 不统计 perf 统计 不统计 operator 统计 统计 off none/query/operator 不统计 不统计
  • 操作步骤 通过视图gs_session_cpu_statistics查询实时CPU信息。 1 SELECT * FROM gs_session_cpu_statistics; 通过视图gs_session_memory_statistics查询实时memory信息。 1 SELECT * FROM gs_session_memory_statistics; 通过视图gs_wlm_session_statistics查询当前CN的实时资源。 1 SELECT * FROM gs_wlm_session_statistics; 通过视图pgxc_wlm_session_statistics查询所有CN的实时资源。 1 SELECT * FROM pgxc_wlm_session_statistics; 通过视图gs_wlm_operator_statistics查询当前CN作业算子执行实时资源信息。 1 SELECT * FROM gs_wlm_operator_statistics; 通过视图pgxc_wlm_operator_statistics查询所有CN作业算子执行实时资源信息。 1 SELECT * FROM pgxc_wlm_operator_statistics; 通过视图pg_session_wlmstat查询当前用户执行作业正在运行时的负载管理信息。 1 SELECT * FROM pg_session_wlmstat; 通过视图pgxc_wlm_workload_records(动态负载功能开启,即enable_dynamic_workload为on时该视图有效)查询当前用户在每个CN上作业执行时的状态信息。 1 SELECT * FROM pgxc_wlm_workload_records;
  • 应用示例 查看所有发布: 1 2 3 4 5 SELECT * FROM pg_publication; pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate ---------+----------+--------------+-----------+-----------+-----------+------------- mypub | 10 | t | t | t | t | t (1 row)
  • PG_DB_ROLE_SETTING PG_DB_ROLE_SETTING系统表存储数据库运行时每个角色与数据绑定的配置项的默认值 。 表1 PG_DB_ROLE_SETTING字段 名称 类型 描述 setdatabase oid 配置项所对应的数据库,如果未指定数据库,则为0。 setrole oid 配置项所对应的角色,如果未指定角色,则为0。 setconfig text[] 运行时配置项的默认值。 父主题: 系统表
  • 空间索引 GaussDB(DWS)数据库的PostGIS Extension支持GIST (Generalized Search Tree) 空间索引(分区表除外)。相比于B-tree索引,GIST索引适应于任意类型的非常规数据结构,可有效提高几何和地理数据信息的检索效率。 使用如下命令创建GIST索引: 1 CREATE INDEX indexname ON tablename USING GIST ( geometryfield );
  • PGXC_GTM_SNAPSHOT_STATUS PGXC_GTM_SNAPSHOT_STATUS视图用于查看当前GTM上事务信息。 表1 PGXC_GTM_SNAPSHOT_STATUS字段 名称 类型 描述 xmin xid 仍在运行的最小事务号。 xmax xid 已完成的事务号最大的事务的下一个事务号。 csn integer 待提交事务的序列号。 oldestxmin xid 当前最早的活跃事务在其取快照时,所有运行事务号最小的事务。 xcnt integer 当前活跃的事务个数。 running_xids text 当前活跃的事务号。 父主题: 系统视图
  • PG_STATIO_ALL_SEQUENCES PG_STATIO_ALL_SEQUENCES视图显示当前数据库中相关的序列信息以及指定序列的I/O的统计信息。 表1 PG_STATIO_ALL_SEQUENCES字段 名称 类型 描述 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列缓冲区命中数量。 父主题: 系统视图
  • PGXC_MEMORY_DEBUG_INFO PGXC_MEMORY_DEBUG_INFO视图显示当前集群每个节点在执行作业时的内存报错信息,便于定位内存报错问题,当执行语句报错提示“memory is temporarily unavailable”时,通过该视图可查询到所有节点的内存报错信息,该报错信息跟日志中显示的内存报错信息相同。该视图8.3.0及以上集群版本支持。 该视图仅显示最近一次报错的集群信息,重复报错信息会进行覆盖,同一个query多次申请内存报错,信息不会进行更新。 表1 PGXC_MEMORY_DEBUG_INFO字段 名称 类型 描述 node_name text 实例名称,包含CN和DN。 query_id bigint 正在申请内存的查询ID。 memory_info text 当前实例的内存使用情况,主要包含: process_used_memory:GaussDB(DWS)进程所使用的内存大小。 max_dynamic_memory:最大动态内存。 dynamic_used_memory:已使用的动态内存。 dynamic_peak_memory:内存的动态峰值。 dynamic_used_shrctx:最大动态共享内存上下文。 dynamic_peak_shrctx:共享内存上下文的动态峰值。 shared_used_memory:已使用的共享内存。 cstore_used_memory:列存已使用的内存大小。 comm_used_memory:通信库已使用的内存大小。 comm_peak_memory:通信库的内存峰值。 other_used_memory:其他已使用的内存大小。 topsql_used_memory:topsql已使用内存大小 large_storage_memory:列存压缩和解压缩使用的内存大小。 os_totalmem:操作系统总内存大小。 os_freeemem:操作系统剩余内存大小。 summary text 包含实例上作业消耗的总估算内存和消耗的总实际内存大小。 abnormal_query text 使用内存异常的线程ID和queryid,包含两种情况: 当前使用内存最大的会话。 估算内存和实际使用内存差别最大的会话。 abnormal_memory text 使用内存异常的内存块,包含共享内存ctx使用最大的和通用内存ctx使用最大的 top_thread text 使用内存最多的三个线程信息: context name:表示正在使用内存的内存块。 contextlevel:表示ctx的等级。 sessType:表示ctx顶层节点的类型。 totalsize[274,13,260]MB,表示当前内存ctx的总内存,已释放内存和使用内存大小,单位为MB。 create_time timestamp with time zone 出现内存不足报错的时间点。 父主题: 系统视图
  • 示例2 客户端内存占用过多解决 此示例主要使用setFetchSize来调整客户端内存使用,它的原理是通过数据库游标来分批获取服务器端数据,但它会加大网络交互,可能会损失部分性能。 由于游标事务内有效,故需要先关闭自动提交。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // 关闭掉自动提交 conn.setAutoCommit(false); Statement st = conn.createStatement(); // 打开游标,每次获取50行数据 st.setFetchSize(50); ResultSet rs = st.executeQuery("SELECT * FROM mytable"); while (rs.next()) { System.out.print("a row was returned."); } rs.close(); // 关闭服务器游标。 st.setFetchSize(0); rs = st.executeQuery("SELECT * FROM mytable"); while (rs.next()) { System.out.print("many rows were returned."); } rs.close(); // Close the statement. st.close();
  • 原型 1 2 3 4 5 6 SQLRETURN SQLGetData(SQLHSTMT StatementHandle, SQLUSMALLINT Col_or_Param_Num, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_IndPtr);
  • 参数 表1 SQLGetData参数 关键字 参数说明 StatementHandle 语句句柄,通过SQLAllocHandle获得。 Col_or_Param_Num 要返回数据的列号。结果集的列按增序从1开始编号。书签列的列号为0。 TargetType TargetValuePtr缓冲中的C数据类型的类型标识符。若TargetType为SQL_ARD_TYPE,驱动使用ARD中SQL_DESC_CONCISE_TYPE字段的类型标识符。若为SQL_C_DEFAULT,驱动根据源的SQL数据类型选择缺省的数据类型。 TargetValuePtr 输出参数:指向返回数据所在缓冲区的指针。 BufferLength TargetValuePtr所指向缓冲区的长度。 StrLen_or_IndPtr 输出参数:指向缓冲区的指针,在此缓冲区中返回长度或标识符的值。
  • 事务管理 在事务管理上,GaussDB(DWS)采取了MVCC(多版本并发控制)结合两阶段锁的方式,其特点是读写之间不阻塞。GaussDB(DWS)的MVCC没有将历史版本数据统一存放,而是和当前元组的版本放在了一起。GaussDB(DWS)没有回滚段的概念,但是为了定期清除历史版本数据GaussDB(DWS)引入了一个VACUUM进程。一般情况下用户不用关注它,除非要做性能调优。此外,GaussDB(DWS)是自动提交事务。
  • 实例 实例在GaussDB(DWS)中是运行在内存中的一组数据库进程,一个实例可以管理一个或多个数据库,这些数据库组成一个集簇。集簇是存储磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中,这个目录被称为数据目录,使用initdb创建。理论上来说一个服务器上可以在不同的端口启动多个实例,但是GaussDB(DWS)一次只能管理一个实例,启动和停止都是依赖于具体的数据目录。以后由于兼容的需要不排除引入实例名这个概念的可能。
  • 应用示例 查询指定模式下所有的表。 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT tablename FROM PG_TABLES WHERE schemaname = 'myschema'; tablename ---------------- inventory product sales_info test1 mytable product_info customer_info newproducts customer_t1 (9 rows)
共100000条