华为云用户手册

  • 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_cbm_recycle_file(slotName name, targetLSNArg text) 描述:删除不再使用的cbm文件,并返回删除后的第一条lsn。其中,slotName为空字符串时,将直接使用targetLSNArg作为回收点;在备份和容灾时,因为并行因素,需要指定相应的slotName,首先记录该任务的targetLSNArg到该slot中,然后遍历所有的backup slots,找到最小的lsn作为回收点。 返回值类型:text
  • 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可以高效生成、压缩、解析位图数据,支持最常见的位图聚合操作(与、或、非、异或),满足用户在亿级以上用户、千万级标签的大数据量下实时精准营销、快速圈选用户的需求。
  • 关键字 SQL里有保留字和非保留字之分。根据标准,保留字决不能用做其他标识符。非保留字只是在特定的环境里有特殊的含义,而在其他环境里是可以用做标识符的。 表1 SQL关键字 关键字 GaussDB(DWS) SQL:1999 SQL-92 ABORT 非保留 - - ABS - 非保留 - ABSOLUTE 非保留 保留 保留 AC CES S 非保留 - - ACCOUNT 非保留 - - ACTION 非保留 保留 保留 ADA - 非保留 非保留 ADD 非保留 保留 保留 ADMIN 非保留 保留 - AFTER 非保留 保留 - AGGREGATE 非保留 保留 - ALIAS - 保留 - ALL 保留 保留 保留 ALLOCATE - 保留 保留 ALSO 非保留 - - ALTER 非保留 保留 保留 ALWAYS 非保留 - - ANALYSE 保留 - - ANALYZE 保留 - - AND 保留 保留 保留 ANY 保留 保留 保留 APP 非保留 - - ARE - 保留 保留 ARRAY 保留 保留 - AS 保留 保留 保留 ASC 保留 保留 保留 ASENSITIVE - 非保留 - ASSERTION 非保留 保留 保留 ASSIGNMENT 非保留 非保留 - ASYMMETRIC 保留 非保留 - AT 非保留 保留 保留 ATOMIC - 非保留 - ATTRIBUTE 非保留 - - AUTHID 保留 - - AUTHINFO 非保留 - - AUTHORIZATION 保留(可以是函数或类型) 保留 保留 AUTOEXTEND 非保留 - - AUTOMAPPED 非保留 - - AVG - 非保留 保留 BACKWARD 非保留 - - BARRIER 非保留 - - BEFORE 非保留 保留 - BEGIN 非保留 保留 保留 BETWEEN 非保留(不能是函数或类型) 非保留 保留 BIGINT 非保留(不能是函数或类型) - - BINARY 保留(可以是函数或类型) 保留 - BINARY_DOUBLE 非保留(不能是函数或类型) - - BINARY_INTEGER 非保留(不能是函数或类型) - - BIT 非保留(不能是函数或类型) 保留 保留 BITVAR - 非保留 - BIT_LENGTH - 非保留 保留 BLOB 非保留 保留 - BOOLEAN 非保留(不能是函数或类型) 保留 - BOTH 保留 保留 保留 BUCKETS 保留 - - BREADTH - 保留 - BY 非保留 保留 保留 C - 非保留 非保留 CACHE 非保留 - - CALL 非保留 保留 - CALLED 非保留 非保留 - CARDINALITY - 非保留 - CASCADE 非保留 保留 保留 CASCADED 非保留 保留 保留 CASE 保留 保留 保留 CAST 保留 保留 保留 CATA LOG 非保留 保留 保留 CATALOG_NAME - 非保留 非保留 CHAIN 非保留 非保留 - CHAR 非保留(不能是函数或类型) 保留 保留 CHARACTER 非保留(不能是函数或类型) 保留 保留 CHARACTERIS TICS 非保留 - - CHARACTER_LENGTH - 非保留 保留 CHARACTER_SET_CATALOG - 非保留 非保留 CHARACTER_SET_NAME - 非保留 非保留 CHARACTER_SET_SCHEMA - 非保留 非保留 CHAR_LENGTH - 非保留 保留 CHECK 保留 保留 保留 CHECKED - 非保留 - CHECKPOINT 非保留 - - CLASS 非保留 保留 - CLEAN 非保留 - - CLASS_ORIGIN - 非保留 非保留 CLOB 非保留 保留 - CLOSE 非保留 保留 保留 CLUSTER 非保留 - - COALESCE 非保留(不能是函数或类型) 非保留 保留 COBOL - 非保留 非保留 COLLATE 保留 保留 保留 COLLATION 保留(可以是函数或类型) 保留 保留 COLLATION_CATALOG - 非保留 非保留 COLLATION_NAME - 非保留 非保留 COLLATION_SCHEMA - 非保留 非保留 COLUMN 保留 保留 保留 COLUMNS 非保留 - - COLUMN_NAME - 非保留 非保留 COMMAND_FUNCTION - 非保留 非保留 COMMAND_FUNCTION_CODE - 非保留 - COMMENT 非保留 - - COMMENTS 非保留 - - COMMIT 非保留 保留 保留 COMMITTED 非保留 非保留 非保留 COMPATIBLE_ILLEGAL_CHARS 非保留 - - COMPLETE 非保留 - - COMPRESS 非保留 - - COMPLETION - 保留 - CONCURRENTLY 保留(可以是函数或类型) - - CONDITION - - - CONDITION_NUMBER - 非保留 非保留 CONFIGURATION 非保留 - - CONNECT - 保留 保留 CONNECTION 非保留 保留 保留 CONNECTION_NAME - 非保留 非保留 CONSTRAINT 保留 保留 保留 CONSTRAINTS 非保留 保留 保留 CONSTRAINT_CATALOG - 非保留 非保留 CONSTRAINT_NAME - 非保留 非保留 CONSTRAINT_SCHEMA - 非保留 非保留 CONSTRUCTOR - 保留 - CONTAINS - 非保留 - CONTENT 非保留 - - CONTINUE 非保留 保留 保留 CONVERSION 非保留 - - CONVERT - 非保留 保留 COORDINATOR 非保留 - - COPY 非保留 - - CORRESPONDING - 保留 保留 COST 非保留 - - COUNT - 非保留 保留 CREATE 保留 保留 保留 CROSS 保留(可以是函数或类型) 保留 保留 CS V 非保留 - - CUBE - 保留 - CURRENT 非保留 保留 保留 CURRENT_CATALOG 保留 - - CURRENT_DATE 保留 保留 保留 CURRENT_PATH - 保留 - CURRENT_ROLE 保留 保留 - CURRENT_SCHEMA 保留(可以是函数或类型) - - CURRENT_TIME 保留 保留 保留 CURRENT_TIMESTAMP 保留 保留 保留 CURRENT_USER 保留 保留 保留 CURSOR 非保留 保留 保留 CURSOR_NAME - 非保留 非保留 CYCLE 非保留 保留 - DATA 非保留 保留 非保留 DATE_FORMAT 非保留 - - DATABASE 非保留 - - DATAFILE 非保留 - - DATE 非保留(不能是函数或类型) 保留 保留 DATETIME_INTERVAL_CODE - 非保留 非保留 DATETIME_INTERVAL_PRECISION - 非保留 非保留 DAY 非保留 保留 保留 DBCOMPATIBILITY 非保留 - - DEALLOCATE 非保留 保留 保留 DEC 非保留(不能是函数或类型) 保留 保留 DECIMAL 非保留(不能是函数或类型) 保留 保留 DECLARE 非保留 保留 保留 DECODE 非保留(不能是函数或类型) - - DEFAULT 保留 保留 保留 DEFAULTS 非保留 - - DEFERRABLE 保留 保留 保留 DEFERRED 非保留 保留 保留 DEFINED - 非保留 - DEFINER 非保留 非保留 - DELETE 非保留 保留 保留 DELIMITER 非保留 - - DELIMITERS 非保留 - - DELTA 非保留 - - DEPTH - 保留 - DEREF - 保留 - DESC 保留 保留 保留 DESCRIBE - 保留 保留 DESCRIPTOR - 保留 保留 DESTROY - 保留 - DESTRUCTOR - 保留 - DETERMINISTIC 非保留 保留 - DIAGNOSTICS - 保留 保留 DICTIONARY 非保留 保留 - DIRECT 非保留 - - DIRECTORY 非保留 - - DISABLE 非保留 - - DISCARD 非保留 - - DISCONNECT - 保留 保留 DISPATCH - 非保留 - DISTINCT 保留 保留 保留 DISTRIBUTE 非保留 - - DISTRIBUTION 非保留 - - DO 保留 - - DOCUMENT 非保留 - - DOMAIN 非保留 保留 保留 DOUBLE 非保留 保留 保留 DROP 非保留 保留 保留 DYNAMIC - 保留 - DYNAMIC_FUNCTION - 非保留 非保留 DYNAMIC_FUNCTION_CODE - 非保留 - EACH 非保留 保留 - ELASTIC 非保留 - - ELSE 保留 保留 保留 ENABLE 非保留 - - ENCODING 非保留 - - ENCRYPTED 非保留 - - END 保留 保留 保留 END-EXEC - 保留 保留 ENFORCED 非保留 - - ENUM 非保留 - - EOL 非保留 - - EQUALS - 保留 - ERRORS 非保留 - - ESCAPE 非保留 保留 保留 ESCAPING 非保留 - - EVERY 非保留 保留 - EXCEPT 保留 保留 保留 EXCEPTION - 保留 保留 EXCHANGE 非保留 - - EXCLUDE 非保留 - - EXCLUDING 非保留 - - EXCLUSIVE 非保留 - - EXEC - 保留 保留 EXECUTE 非保留 保留 保留 EXISTING - 非保留 - EXISTS 非保留(不能是函数或类型) 非保留 保留 EXPIRATION 非保留 - - EXPLAIN 非保留 - - EXTENSION 非保留 - - EXTERNAL 非保留 保留 保留 EXTRACT 非保留(不能是函数或类型) 非保留 保留 FALSE 保留 保留 保留 FAMILY 非保留 - - FAST 非保留 - - FENCED 非保留 - - FETCH 保留 保留 保留 FILEHEADER 非保留 - - FILL_MISSING_FIELDS 非保留 - - FINAL - 非保留 - FIRST 非保留 保留 保留 FIXED 非保留 保留 保留 FLOAT 非保留(不能是函数或类型) 保留 保留 FOLLOWING 非保留 - - FOR 保留 保留 保留 FORCE 非保留 - - FOREIGN 保留 保留 保留 FORMATTER 非保留 - - FORTRAN - 非保留 非保留 FORWARD 非保留 - - FOUND - 保留 保留 FREE - 保留 - FREEZE 保留(可以是函数或类型) - - FROM 保留 保留 保留 FULL 保留(可以是函数或类型) 保留 保留 FUNCTION 非保留 保留 - FUNCTIONS 非保留 - - G - 非保留 - GENERAL - 保留 - GENERATED - 非保留 - GET - 保留 保留 GLOBAL 非保留 保留 保留 GO - 保留 保留 GOTO - 保留 保留 GRANT 保留 保留 保留 GRANTED 非保留 非保留 - GREATEST 非保留(不能是函数或类型) - - GROUP 保留 保留 保留 GROUPING - 保留 - HANDLER 非保留 - - HAVING 保留 保留 保留 HEADER 非保留 - - HIERARCHY - 非保留 - HOLD 非保留 非保留 - HOST - 保留 - HOUR 非保留 保留 保留 IDENTIFIED 非保留 - - IDENTITY 非保留 保留 保留 IF 非保留(不能是函数或类型) - - IFNULL 非保留(不能是函数或类型) - - IGNORE - 保留 - IGNORE_EXTRA_DATA 非保留 - - ILIKE 保留(可以是函数或类型) - - IMMEDIATE 非保留 保留 保留 IMMUTABLE 非保留 - - IMPLEMENTATION - 非保留 - IMPLICIT 非保留 - - IN 保留 保留 保留 INCLUDING 非保留 - - INCREMENT 非保留 - - INDEX 非保留 - - INDEXES 非保留 - - INDICATOR - 保留 保留 INFIX - 非保留 - INHERIT 非保留 - - INHERITS 非保留 - - INITIAL 非保留 - - INITIALIZE - 保留 - INITIALLY 保留 保留 保留 INITRANS 非保留 - - INLINE 非保留 - - INNER 保留(可以是函数或类型) 保留 保留 INOUT 非保留(不能是函数或类型) 保留 - INPUT 非保留 保留 保留 INSENSITIVE 非保留 非保留 保留 INSERT 非保留 保留 保留 INSTANCE - 非保留 - INSTANTIABLE - 非保留 - INSTEAD 非保留 - - INT 非保留(不能是函数或类型) 保留 保留 INTEGER 非保留(不能是函数或类型) 保留 保留 INTERNAL 保留 - - INTERSECT 保留 保留 保留 INTERVAL 非保留(不能是函数或类型) 保留 保留 INTO 保留 保留 保留 INVOKER 非保留 非保留 - IS 保留 保留 保留 ISNULL 非保留(不能是函数或类型) - - ISOLATION 非保留 保留 保留 ITERATE - 保留 - JOIN 保留(可以是函数或类型) 保留 保留 K - 非保留 - KEY 非保留 保留 保留 KEY_MEMBER - 非保留 - KEY_TYPE - 非保留 - LABEL 非保留 - - LANGUAGE 非保留 保留 保留 LARGE 非保留 保留 - LAST 非保留 保留 保留 LATERAL - 保留 - LC_COLLATE 非保留 - - LC_CTYPE 非保留 - - LEADING 保留 保留 保留 LEAKPROOF 非保留 - - LEAST 非保留(不能是函数或类型) - - LEFT 保留(可以是函数或类型) 保留 保留 LENGTH - 非保留 非保留 LESS 保留 保留 - LEVEL 非保留 保留 保留 LIKE 保留(可以是函数或类型) 保留 保留 LIMIT 保留 保留 - LISTEN 非保留 - - LOAD 非保留 - - LOCAL 非保留 保留 保留 LOCALTIME 保留 保留 - LOCALTIMESTAMP 保留 保留 - LOCATION 非保留 - - LOCATOR - 保留 - LOCK 非保留 - - LOG 非保留 - - LOGGING 非保留 - - LOGIN 非保留 - - LOOP 非保留 - - LOWER - 非保留 保留 M - 非保留 - MAP - 保留 - MAPPING 非保留 - - MATCH 非保留 保留 保留 MATCHED 非保留 - - MATERIALIZED 非保留 - - MAX - 非保留 保留 MAXEXTENTS 非保留 - - MAXSIZE 非保留 - - MAXTRANS 非保留 - - MAXVALUE 保留 - - MERGE 非保留 - - MESSAGE_LENGTH - 非保留 非保留 MESSAGE_OCTET_LENGTH - 非保留 非保留 MESSAGE_TEXT - 非保留 非保留 METHOD - 非保留 - MIN - 非保留 保留 MINEXTENTS 非保留 - - MINUS 保留 - - MINUTE 非保留 保留 保留 MINVALUE 非保留 - - MOD - 非保留 - MODE 非保留 - - MODIFIES - 保留 - MODIFY 保留 保留 - MODULE - 保留 保留 MONTH 非保留 保留 保留 MORE - 非保留 非保留 MOVE 非保留 - - MOVEMENT 非保留 - - MUMPS - 非保留 非保留 NAME 非保留 非保留 非保留 NAMES 非保留 保留 保留 NATIONAL 非保留(不能是函数或类型) 保留 保留 NATURAL 保留(可以是函数或类型) 保留 保留 NCHAR 非保留(不能是函数或类型) 保留 保留 NCLOB - 保留 - NEW - 保留 - NEXT 非保留 保留 保留 NLSSORT 保留 - - NO 非保留 保留 保留 NOCOMPRESS 非保留 - - NOCYCLE 非保留 - - NODE 非保留 - - NOLOGGING 非保留 - - NOLOGIN 非保留 - - NOMAXVALUE 非保留 - - NOMINVALUE 非保留 - - NONE 非保留(不能是函数或类型) 保留 - NOT 保留 保留 保留 NOTHING 非保留 - - NOTIFY 非保留 - - NOTNULL 保留(可以是函数或类型) - - NOWAIT 非保留 - - NULL 保留 保留 保留 NULLABLE - 非保留 非保留 NULLIF 非保留(不能是函数或类型) 非保留 保留 NULLS 非保留 - - NUMBER 非保留(不能是函数或类型) 非保留 非保留 NUMERIC 非保留(不能是函数或类型) 保留 保留 NUMSTR 非保留 - - NVARCHAR2 非保留(不能是函数或类型) - - NVL 非保留(不能是函数或类型) - - OBJECT 非保留 保留 - OCTET_LENGTH - 非保留 保留 OF 非保留 保留 保留 OFF 非保留 保留 - OFFSET 保留 - - OIDS 非保留 - - OLD - 保留 - ON 保留 保留 保留 ONLY 保留 保留 保留 OPEN - 保留 保留 OPERATION - 保留 - OPERATOR 非保留 - - OPTIMIZATION 非保留 - - OPTION 非保留 保留 保留 OPTIONS 非保留 非保留 - OR 保留 保留 保留 ORDER 保留 保留 保留 ORDINALITY - 保留 - OUT 非保留(不能是函数或类型) 保留 - OUTER 保留(可以是函数或类型) 保留 保留 OUTPUT - 保留 保留 OVER 非保留 - - OVERLAPS 保留(可以是函数或类型) 非保留 保留 OVERLAY 非保留(不能是函数或类型) 非保留 - OVERRIDING - 非保留 - OWNED 非保留 - - OWNER 非保留 - - PACKAGE 非保留 - - PAD - 保留 保留 PA RAM ETER - 保留 - PARAMETERS - 保留 - PARAMETER_MODE - 非保留 - PARAMETER_NAME - 非保留 - PARAMETER_ORDINAL_POSITION - 非保留 - PARAMETER_SPECIFIC_CATALOG - 非保留 - PARAMETER_SPECIFIC_NAME - 非保留 - PARAMETER_SPECIFIC_SCHEMA - 非保留 - PARSER 非保留 - - PARTIAL 非保留 保留 保留 PARTITION 非保留 - - PARTITIONS 非保留 - - PASCAL - 非保留 非保留 PASSING 非保留 - - PASSWORD 非保留 - - PATH - 保留 - PCTFREE 非保留 - - PER 非保留 - - PERM 非保留 - - PERCENT 非保留 - - PERFORMANCE 保留 - - PLACING 保留 - - PLAN 保留 - - PLANS 非保留 - - PLI - 非保留 非保留 POLICY 非保留 - - POOL 非保留 - - POSITION 非保留(不能是函数或类型) 非保留 保留 POSTFIX - 保留 - PRECEDING 非保留 - - PRECISION 非保留(不能是函数或类型) 保留 保留 PREFERRED 非保留 - - PREFIX 非保留 保留 - PREORDER - 保留 - PREPARE 非保留 保留 保留 PREPARED 非保留 - - PRESERVE 非保留 保留 保留 PRIMARY 保留 保留 保留 PRIOR 非保留 保留 保留 PRIVATE 非保留 - - PRIVILEGE 非保留 - - PRIVILEGES 非保留 保留 保留 PROCEDURAL 非保留 - - PROCEDURE 保留 保留 保留 PROFILE 非保留 - - PUBLIC - 保留 保留 QUERY 非保留 - - QUOTE 非保留 - - RANGE 非保留 - - RAW 非保留 - - READ 非保留 保留 保留 READS - 保留 - REAL 非保留(不能是函数或类型) 保留 保留 REASSIGN 非保留 - - REBUILD 非保留 - - RECHECK 非保留 - - RECURSIVE 非保留 保留 - REF 非保留 保留 - REFRESH 非保留 - - REFERENCES 保留 保留 保留 REFERENCING - 保留 - REINDEX 非保留 - - REJECT 保留 - - RELATIVE 非保留 保留 保留 RELEASE 非保留 - - RELOPTIONS 非保留 - - REMOTE 非保留 - - RENAME 非保留 - - REPEATABLE 非保留 非保留 非保留 REPLACE 非保留 - - REPLICA 非保留 - - RESET 非保留 - - RESIZE 非保留 - - RESOURCE 非保留 - - RESTART 非保留 - - RESTRICT 非保留 保留 保留 RESULT - 保留 - RETURN 非保留 保留 - RETURNED_LENGTH - 非保留 非保留 RETURNED_OCTET_LENGTH - 非保留 非保留 RETURNED_SQLSTATE - 非保留 非保留 RETURNING 保留 - - RETURNS 非保留 保留 - REUSE 非保留 - - REVOKE 非保留 保留 保留 RIGHT 保留(可以是函数或类型) 保留 保留 ROLE 非保留 保留 - ROLLBACK 非保留 保留 保留 ROLLUP - 保留 - ROUTINE - 保留 - ROUTINE_CATALOG - 非保留 - ROUTINE_NAME - 非保留 - ROUTINE_SCHEMA - 非保留 - ROW 非保留(不能是函数或类型) 保留 - ROWS 非保留 保留 保留 ROW_COUNT - 非保留 非保留 RULE 非保留 - - SAVEPOINT 非保留 保留 - SCALE - 非保留 非保留 SCHEMA 非保留 保留 保留 SCHEMA_NAME - 非保留 非保留 SCOPE - 保留 - SCROLL 非保留 保留 保留 SEARCH 非保留 保留 - SECOND 非保留 保留 保留 SECTION - 保留 保留 SECURITY 非保留 非保留 - SELECT 保留 保留 保留 SELF - 非保留 - SENSITIVE - 非保留 - SEPARATOR 非保留 - - SEQUENCE 非保留 保留 - SEQUENCES 非保留 - - SERIALIZABLE 非保留 非保留 非保留 SERVER 非保留 - - SERVER_NAME - 非保留 非保留 SESSION 非保留 保留 保留 SESSION_USER 保留 保留 保留 SET 非保留 保留 保留 SETOF 非保留(不能是函数或类型) - - SETS - 保留 - SHARE 非保留 - - SHIPPABLE 非保留 - - SHOW 非保留 - - SIMILAR 保留(可以是函数或类型) 非保留 - SIMPLE 非保留 非保留 - SIZE 非保留 保留 保留 SMALLDATETIME 非保留(不能是函数或类型) - - SMALLDATETIME_FORMAT 非保留 - - SMALLINT 非保留(不能是函数或类型) 保留 保留 SNAPSHOT 非保留 - - SOME 保留 保留 保留 SOURCE 非保留 非保留 - SPACE - 保留 保留 SPECIFIC - 保留 - SPECIFICTYPE - 保留 - SPECIFIC_NAME - 非保留 - SPILL 非保留 - - SPLIT 非保留 - - SQL - 保留 保留 SQLCODE - - 保留 SQLERROR - - 保留 SQLEXCEPTION - 保留 - SQLSTATE - 保留 保留 SQLWARNING - 保留 - STABLE 非保留 - - STANDALONE 非保留 - - START 非保留 保留 - STATE - 保留 - STATEMENT 非保留 保留 - STATEMENT_ID 非保留 - - STATIC - 保留 - STATISTICS 非保留 - - STDIN 非保留 - - STDOUT 非保留 - - STORAGE 非保留 - - STORE 非保留 - - STRICT 非保留 - - STRIP 非保留 - - STRUCTURE - 保留 - STYLE - 非保留 - SUBCLASS_ORIGIN - 非保留 非保留 SUBLIST - 非保留 - SUBSTRING 非保留(不能是函数或类型) 非保留 保留 SUM - 非保留 保留 SUPERUSER 非保留 - - SYMMETRIC 保留 非保留 - SYNONYM 非保留 - - SYS_REFCURSOR 非保留 - - SYSDATE 保留 - - SYSID 非保留 - - SYSTEM 非保留 非保留 - SYSTEM_USER - 保留 保留 TABLE 保留 保留 保留 TABLES 非保留 - - TABLE_NAME - 非保留 非保留 TEMP 非保留 - - TEMPLATE 非保留 - - TEMPORARY 非保留 保留 保留 TERMINATE - 保留 - TEXT 非保留 - - THAN 非保留 保留 - THEN 保留 保留 保留 TIME 非保留(不能是函数或类型) 保留 保留 TIME_FORMAT 非保留 - - TIMESTAMP 非保留(不能是函数或类型) 保留 保留 TIMESTAMPADD 非保留(不能是函数或类型) - - TIMESTAMPDIFF 非保留(不能是函数或类型) - - TIMESTAMP_FORMAT 非保留 - - TIMEZONE_HOUR - 保留 保留 TIMEZONE_MINUTE - 保留 保留 TINYINT 非保留(不能是函数或类型) - - TO 保留 保留 保留 TRAILING 保留 保留 保留 TRANSACTION 非保留 保留 保留 TRANSACTIONS_COMMITTED - 非保留 - TRANSACTIONS_ROLLED_BACK - 非保留 - TRANSACTION_ACTIVE - 非保留 - TRANSFORM - 非保留 - TRANSFO RMS - 非保留 - TRANSLATE - 非保留 保留 TRANSLATION - 保留 保留 TREAT 非保留(不能是函数或类型) 保留 - TRIGGER 非保留 保留 - TRIGGER_CATALOG - 非保留 - TRIGGER_NAME - 非保留 - TRIGGER_SCHEMA - 非保留 - TRIM 非保留(不能是函数或类型) 非保留 保留 TRUE 保留 保留 保留 TRUNCATE 非保留 - - TRUSTED 非保留 - - TSTAG 保留,该字段仅在IoT数仓中使用 - - TSTIME 保留,该字段仅在IoT数仓中使用 - - TSFIELD 保留,该字段仅在IoT数仓中使用 - - TYPE 非保留 非保留 非保留 TYPES 非保留 - - UESCAPE - - - UNBOUNDED 非保留 - - UNCOMMITTED 非保留 非保留 非保留 UNDER - 保留 - UNENCRYPTED 非保留 - - UNION 保留 保留 保留 UNIQUE 保留 保留 保留 UNKNOWN 非保留 保留 保留 UNLIMITED 非保留 - - UNLISTEN 非保留 - - UNLOCK 非保留 - - UNLOGGED 非保留 - - UNNAMED - 非保留 非保留 UNNEST - 保留 - UNTIL 非保留 - - UNUSABLE 非保留 - - UPDATE 非保留 保留 保留 UPPER - 非保留 保留 USAGE - 保留 保留 USER 保留 保留 保留 USER_DEFINED_TYPE_CATALOG - 非保留 - USER_DEFINED_TYPE_NAME - 非保留 - USER_DEFINED_TYPE_SCHEMA - 非保留 - USING 保留 保留 保留 VACUUM 非保留 - - VALID 非保留 - - VALIDATE 非保留 - - VALIDATION 非保留 - - VALIDATOR 非保留 - - VALUE 非保留 保留 保留 VALUES 非保留(不能是函数或类型) 保留 保留 VARCHAR 非保留(不能是函数或类型) 保留 保留 VARCHAR2 非保留(不能是函数或类型) - - VARIABLE - 保留 - VARIADIC 保留 - - VARYING 非保留 保留 保留 VCGROUP 非保留 - - VERBOSE 保留(可以是函数或类型) - - VERIFY 非保留 - - VERSION 非保留 - - VIEW 非保留 保留 保留 VOLATILE 非保留 - - WHEN 保留 保留 保留 WHENEVER - 保留 保留 WHERE 保留 保留 保留 WHITESPACE 非保留 - - WINDOW 保留 - - WITH 保留 保留 保留 WITHIN 非保留 - - WITHOUT 非保留 保留 - WORK 非保留 保留 保留 WORKLOAD 非保留 - - WRAPPER 非保留 - - WRITE 非保留 保留 保留 XML 非保留 - - XMLATTRIBUTES 非保留(不能是函数或类型) - - XMLCONCAT 非保留(不能是函数或类型) - - XMLELEMENT 非保留(不能是函数或类型) - - XMLEXISTS 非保留(不能是函数或类型) - - XMLFOREST 非保留(不能是函数或类型) - - XMLNAMESPACES 非保留(不能是函数或类型) - - XMLPARSE 非保留(不能是函数或类型) - - XMLPI 非保留(不能是函数或类型) - - XMLROOT 非保留(不能是函数或类型) - - XMLSERIALIZE 非保留(不能是函数或类型) - - XMLTABLE 非保留(不能是函数或类型) - - YEAR 非保留 保留 保留 YES 非保留 - - ZONE 非保留 保留 保留
  • SQL发展简史 SQL发展简史如下: 1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86 1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89 1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2) 1999年,ISO/IEC 9075:1999,SQL:1999(SQL3) 2003年,ISO/IEC 9075:2003,SQL:2003(SQL4) 2011年,ISO/IEC 9075:200N,SQL:2011(SQL5)
  • 什么是SQL SQL是用于访问和处理数据库的标准计算机语言。 SQL提供了各种任务的语句,包括: 查询数据。 在表中插入,更新和删除行。 创建,替换,更改和删除对象。 控制对数据库及其对象的访问。 保证数据库的一致性和完整性。 SQL语言由用于处理数据库和数据库对象的命令和函数组成。该语言还会强制实施有关数据类型、表达式和文本使用的规则。因此在SQL参考章节,除了SQL语法参考外,还会看到有关数据类型、表达式、函数和操作符等信息。
  • 不支持的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)支持的函数请参见函数和操作符。 如下的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:
  • 不支持的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功能。
  • 不支持的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函数。
  • 资源对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中。查询优化器会使用这些统计数据,生成最有效的执行计划。
  • 操作步骤 使用VACUUM或VACUUM FULL命令,进行磁盘空间回收。 VACUUM: 对表执行VACUUM操作 VACUUM customer; 可以与数据库操作命令并行运行。(执行期间,可正常使用的语句:SELECT、INSERT、UPDATE和DELETE。不可正常使用的语句:ALTER TABLE)。 对表分区执行VACUUM操作 VACUUM customer_par PARTITION ( P1 ); VACUUM FULL: VACUUM FULL customer; 需要向正在执行的表增加排他锁,且需要停止其他所有数据库操作。 在进行磁盘空间回收时,用户可以使用如下命令查询集群中最早事务对应session,再根据需要结束最早执行的长事务,从而更加高效的利用磁盘空间。 使用命令从GTM上查询oldestxmin select * from pgxc_gtm_snapshot_status(); 从CN上查询对应的session的pid,此处xmin为上一步的oldestxmin。 select * from pgxc_running_xacts() where xmin=1400202010; 使用ANALYZE语句更新统计信息。 ANALYZE customer; 使用ANALYZE VERBOSE语句更新统计信息,并输出表的相关信息。 ANALYZE VERBOSE customer; 也可以同时执行VACUUM ANALYZE命令进行查询优化。 VACUUM ANALYZE customer; VACUUM和ANALYZE会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,建议通过“vacuum_cost_delay”参数设置。 删除表 DROP TABLE customer;DROP TABLE customer_par;DROP TABLE part;
  • 执行计划显示信息 除了设置不同的执行计划显示格式外,还可以通过不同的EXPLAIN用法,显示不同详细程度的执行计划信息。常见有如下几种,关于更多用法请参见EXPLAIN语法说明。 EXPLAIN statement: 只生成执行计划,不实际执行。其中statement代表SQL语句。 EXPLAIN ANALYZE statement:生成执行计划,进行执行,并显示执行的概要信息。显示中加入了实际的运行时间统计,包括在每个规划节点内部花掉的总时间(以毫秒计)和它实际返回的行数。 EXPLAIN PERFORMANCE statement:生成执行计划,进行执行,并显示执行期间的全部信息。 为了测量运行时在执行计划中每个节点的开销,EXPLAIN ANALYZE或EXPLAIN PERFORMANCE会在当前查询执行上增加性能分析的开销。在一个查询上运行EXPLAIN ANALYZE或EXPLAIN PERFORMANCE有时会比普通查询明显的花费更多的时间。超支的数量依赖于查询的本质和使用的平台。 因此,当定位SQL运行慢问题时,如果SQL长时间运行未结束,建议通过EXPLAIN命令查看执行计划,进行初步定位。如果SQL可以运行出来,则推荐使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看执行计划及其实际的运行信息,以便更准确地定位问题原因。
  • 执行计划显示格式 GaussDB(DWS)对执行计划提供了normal、pretty、summary、run四种显示格式: normal:代表使用默认的打印格式。图1中即为此显示格式。 pretty:代表使用GaussDB(DWS)改进后的新显示格式。新的格式层次清晰,计划包含了plan node id,性能分析简单直接。如图2。 summary:是在pretty的基础上增加了对打印信息的分析。 run:在summary的基础上,将统计的信息输出到csv格式的文件中,以便于进一步分析。
  • 执行计划 以如下SQL语句为例: 12345 select cjxh, count(1) from dwcjkgroup by cjxh; 执行EXPLAIN的输出为: 执行计划字段解读(横向): id:执行算子节点编号。 operation:具体的执行节点算子名称。 Vector前缀的算子是指向量化执行引擎算子,一般出现含有列存表的Query中。 Streaming是一个特殊的算子,它实现了分布式架构的核心数据shuffle功能,Streaming共有三种形态,分别对应了分布式结构下不同的数据shuffle功能: Streaming (type: GATHER):作用是coordinator从DN收集数据。 Streaming(type: REDISTRIBUTE):作用是DN根据选定的列把数据重分布到所有的DN。 Streaming(type: BROADCAST):作用是把当前DN的数据广播给其他所有的DN E-rows:每个算子估算的输出行数。 E-memory:DN上每个算子估算的内存使用量,只有DN上执行的算子会显示。某些场景会在估算的内存使用量后使用括号显示该算子在内存资源充足下可以自动扩展的内存上限。 E-width:每个算子输出元组的估算宽度。 E-costs:每个算子估算的执行代价。 E-costs是优化器根据成本参数定义的单位来衡量的,习惯上以磁盘页面抓取为1个单位, 其它开销参数将参照它来设置。 每个节点的开销(E-costs值)包括它的所有子节点的开销。 开销只反映了优化器关心的东西,并没有把结果行传递给客户端的时间考虑进去。虽然这个时间可能在实际的总时间里占据相当重要的分量,但是被优化器忽略了,因为它无法通过修改规划来改变。 执行计划层级解读(纵向): 第一层:CStore Scan on dwcjk 表扫描算子,用CStore Scan的方式扫描表dwcjk。这一层的作用是把表dwcjk的数据从buffer或者磁盘上读上来输送给上层节点参与计算。 第二层:Vector Hash Aggregate 聚合算子,作用是把下层计算输送上来的算子做聚合操作(group by)。 第三层:Vector Streaming (type: GATHER) Shuffle算子,此处GATHER类型的Shuffle算子作用是把数据从DN汇聚到CN。 第四层:Row Adapter 存储格式转化算子,主要作用是把内存中列式格式数据转为行式数据,以便客户端展示。 需要注意的是最顶层算子为Data Node Scan时,需要设置enable_fast_query_shipping为off才能看到具体的执行计划,如下面这个计划: 设置enable_fast_query_shipping参数之后,执行计划显示如下: 执行计划中的关键字说明: 表访问方式 Seq Scan 全表顺序扫描。 Index Scan 优化器决定使用两步的规划:最底层的规划节点访问一个索引,找出匹配索引条件的行的位置,然后上层规划节点真实地从表中抓取出那些行。独立地抓取数据行比顺序地读取它们的开销高很多,但是因为并非所有表的页面都被访问了,这么做实际上仍然比一次顺序扫描开销要少。使用两层规划的原因是,上层规划节点在读取索引标识出来的行位置之前,会先将它们按照物理位置排序,这样可以最小化独立抓取的开销。 如果在WHERE里面使用的好几个字段上都有索引,那么优化器可能会使用索引的AND或OR的组合。但是这么做要求访问两个索引,因此与只使用一个索引,而把另外一个条件只当作过滤器相比,这个方法未必是更优。 索引扫描可以分为以下几类,其差异在于索引的排序机制。 Bitmap Index Scan 使用位图索引抓取数据页。 Index Scan using index_name 使用简单索引搜索,该方式表的数据行是以索引顺序抓取的,这样就令读取它们的开销更大,但是这里的行少得可怜,因此对行位置的额外排序并不值得。最常见的就是看到这种规划类型只抓取一行,以及那些要求ORDER BY条件匹配索引顺序的查询。因为那时候没有多余的排序步骤是必要的以满足ORDER BY。 表连接方式 Nested Loop 嵌套循环,适用于被连接的数据子集较小的查询。在嵌套循环中,外表驱动内表,外表返回的每一行都要在内表中检索找到它匹配的行,因此整个查询返回的结果集不能太大(不能大于10000),要把返回子集较小的表作为外表,而且在内表的连接字段上建议要有索引。 (Sonic) Hash Join 哈希连接,适用于数据量大的表的连接方式。优化器使用两个表中较小的表,利用连接键在内存中建立hash表,然后扫描较大的表并探测散列,找到与散列匹配的行。Sonic和非Sonic的Hash Join的区别在于所使用hash表结构不同,不影响执行的结果集。 Merge Join 归并连接或融合连接,是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配。 因为Merge join需要做更多的排序,所以消耗的资源更多,因此通常情况下执行性能差于Hash Join。 如果源数据已经被排序过,在执行融合连接时,并不需要再排序,此时Merge Join的性能优于Hash Join。 运算符 sort 对结果集进行排序。 filter EXPLAIN输出显示WHERE子句当作一个"filter"条件附属于顺序扫描计划节点。这意味着规划节点为它扫描的每一行检查该条件,并且只输出符合条件的行。预计的输出行数降低了,因为有WHERE子句。不过,扫描仍将必须访问所有 10000 行,因此开销没有降低;实际上它还增加了一些(确切的说,通过10000 * cpu_operator_cost)以反映检查WHERE条件的额外CPU时间。 LIMIT LIMIT限定了执行结果的输出记录数。如果增加了LIMIT,那么不是所有的行都会被检索到。
  • 操作步骤 假定在导入表“areaS”上的“area_id”字段上存在普通索引“areaS_idx”。重建索引有以下两种方式: 先删除索引(DROP INDEX),再创建索引(CREATE INDEX) 删除索引。 DROP INDEX areaS_idx; 创建索引。 CREATE INDEX areaS_idx ON areaS (area_id); 使用REINDEX重建索引。 使用REINDEX TABLE语句重建索引。 REINDEX TABLE areaS; 使用REINDEX INTERNAL TABLE重建desc表(包括)的索引。 REINDEX INTERNAL TABLE areaS;
  • 重建索引 重建索引有以下两种方式: 先删除索引(DROP INDEX),再创建索引(CREATE INDEX)。 在删除索引过程中,会在父表上增加一个短暂的排他锁,阻止相关读写操作。在创建索引过程中,会锁住写操作但是不会锁住读操作,此时读操作只能使用顺序扫描。 使用REINDEX语句重建索引。 使用REINDEX TABLE语句重建索引,会在重建过程中增加排他锁,阻止相关读写操作。 使用REINDEX INTERNAL TABLE语句重建desc表(包括)的索引,会在重建过程中增加排他锁,阻止相关读写操作。
  • 背景信息 数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索引,可有效的提高查询效率。 数据库支持的索引类型包含B-tree索引、GIN索引和PSORT索引。 对于B-tree索引,例行重建索引可有效的提高查询效率。 如果数据发生大量删除后,索引页面上的索引键将被删除,导致索引页面数量的减少,造成索引膨胀。重建索引可回收浪费的空间。 新建的索引中逻辑结构相邻的页面,通常在物理结构中也是相邻的,所以一个新建的索引比更新了多次的索引访问速度要快。 对于非B-tree索引,不建议例行重建。
  • 操作步骤 收集SQL中涉及到的所有表的统计信息。在数据库中,统计信息是规划器生成计划的源数据。没有收集统计信息或者统计信息陈旧往往会造成执行计划严重劣化,从而导致性能问题。从经验数据来看,10%左右性能问题是因为没有收集统计信息。具体请参见更新统计信息。 审视和修改表定义。 通常情况下,有些SQL语句可以通过查询重写转换成等价的,或特定场景下等价的语句。重写后的语句比原语句更简单,且可以简化某些执行步骤达到提升性能的目的。查询重写方法在各个数据库中基本是通用的。SQL语句改写规则介绍了几种常用的通过改写SQL进行调优的方法。 通过查看执行计划来查找原因。如果SQL长时间运行未结束,通过EXPLAIN命令查看执行计划,进行初步定位。如果SQL可以运行出来,则推荐使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看执行计划及实际运行情况,以便更精准地定位问题原因。有关执行计划的详细介绍请参见SQL执行计划。 针对EXPLAIN或EXPLAIN PERFORMANCE信息,定位SQL慢的具体原因以及改进措施,具体参见典型SQL调优点。 用户可以通过指定join顺序,join、stream、scan方法,指定结果行数,指定重分布过程中的倾斜信息等多个手段来进行执行计划的调优,以提升查询的性能。详细请参见使用Plan Hint进行调优。 为了保证数据库性能的持续优质,建议例行维护表和例行重建索引。 (可选)GaussDB(DWS)支持在资源富足的情况下,通过算子并行来提升性能。详细请参见SMP手动调优建议。
共100000条