华为云用户手册

  • cluster_run_mode 参数说明:双数据库实例容灾场景标识DN节点属于主数据库实例还是备数据库实例。单数据库实例使用默认值主数据库实例。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:枚举类型 cluster_primary表示节点是主数据库实例的节点。 cluster_standby表示节点是备数据库实例的节点。 默认值:cluster_primary
  • acceleration_with_compute_pool 参数说明:在查询包含OBS时,通过该参数决定查询是否通过计算资源池进行加速。(由于规格变更,当前版本已经不再支持本特性,请不要使用) 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示包含有OBS或的查询在计算资源池可用时,会根据代价评估决定是否通过计算资源池对查询加速。 off表示任何查询都不会通过计算资源池进行加速。 默认值:off
  • max_concurrent_autonomous_transactions 参数说明:自治事务最大连接数,同一时间自治事务执行的最大并发数。当设置为0时,将无法执行自治事务。 该参数属于POSTMASTER类型参数,请参考表表1中对应设置方法进行设置。 取值范围:0-10000,理论最大值为10000,实际最大值为动态值,计算公式为“262143 - job_queue_processes - autovacuum_max_workers - max_inner_tool_connections - max_connections - AUXILIARY_BACKENDS - AV_LAUNCHER_PRO CS ”,job_queue_processes、autovacuum_max_workers、max_inner_tool_connections和max_connections的值取决于对应GUC参数的设置,AUXILIARY_BACKENDS为预留辅助线程数固定为20,AV_LAUNCHER_PROCS为预留autovacuum的launcher线程数固定为2。 默认值: 200(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存);150(96核CPU/768G内存);120(80核CPU/640G内存);100(64核CPU/512G内存);80(60核CPU/480G内存);40(32核CPU/256G内存);20(16核CPU/128G内存);10(8核CPU/64G内存,4核CPU/32G内存,4核CPU/16G内存) 设置建议:根据实际业务需要和硬件配置设置此参数,建议不超过max_connections的1/10。若仅调大此参数,未同比例调整内存参数,业务压力大时,容易出现内存不足,报错提示“memory is temporarily unavailable”。 若升级过程中涉及此参数范围变更,并且在commit前修改了此参数,则如果执行升级回滚,需要将此参数调整至升级前允许的范围,否则可能导致数据库无法启动。
  • enable_gpi_auto_update 参数说明:控制在分区DDL命令中是否默认更新Global索引。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示默认更新Global索引,此时分区DDL无论带不带UPDATE GLOBAL INDEX子句,都会更新Global索引。 off表示默认不更新Global索引,此时只有当分区DDL带UPDATE GLOBAL INDEX子句,才会更新Global索引。 默认值:off
  • server_version 参数说明:报告服务器版本号(字符串形式)。 该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。该参数继承自PostgreSQL内核,表示当前数据库内核兼容PostgreSQL对应的server_version版本,无实际含义,为保持北向对外工具接口的生态兼容性(工具连接时查询),保留该参数。该参数不推荐使用,如想查询服务器版本号,可通过函数opengauss_version()获取。 取值范围:字符串 默认值:9.2.4
  • server_version_num 参数说明:报告服务器版本号(整数形式)。 该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。该参数继承自PostgreSQL内核,表示当前数据库内核兼容PostgreSQL对应的server_version_num版本,无实际含义,为保持北向对外工具接口的生态兼容性(工具连接时查询),保留该参数。 取值范围:整数 默认值:90204
  • enable_upgrade_merge_lock_mode 参数说明:当该参数设置为on时,通过提升deltamerge内部实现的锁级别,避免和update/delete并发操作时的报错。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围: 布尔型 on,提升deltamerge内部实现的锁级别,并发执行deltamerge和update/delete操作时,一个操作先执行,另一个操作被阻塞,在前一个操作完成后,后一个操作再执行。 off,在对表的delta table的同一行并发执行deltamerge和update/delete操作时,后一个对同一行数据更新的操作会报错退出。 默认值:off
  • PG_PROC PG_PROC系统表存储函数或过程的信息。 表1 PG_PROC字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 proname name 函数名称。 pronamespace oid 包含该函数名称空间的OID。 proowner oid 函数的所有者。 prolang oid 这个函数的实现语言或调用接口。 procost real 估算的执行成本。 prorows real 估算的影响行的数目。 provariadic oid 参数元素的数据类型。 protransform regproc 此函数的简化调用方式。 proisagg boolean 函数是否是聚集函数。 t(true):表示是。 f(false):表示不是。 proiswindow boolean 函数是否是窗口函数。 t(true):表示是。 f(false):表示不是。 prosecdef boolean 函数是否是一个安全定义器(也就是一个“setuid”函数)。 t(true):表示是。 f(false):表示不是。 proleakproof boolean 函数是否没有副作用。如果函数没有对参数进行防泄露处理,则会抛出错误。 t(true):表示没副作用。 f(false):表示有副作用。 proisstrict boolean t(true):使用该函数时,如果入参有空值,则函数实际上不调用直接返回空。 f(false):使用该函数时,即使入参有空值,也要调用。所以该函数必须处理空输入。 proretset boolean 函数返回值是否为一个集合(也就是说,指定数据类型的多个数值)。 true:函数返回值是一个集合。 false:函数返回值不是一个集合。 provolatile "char" 该函数的结果是否只依赖于它的输入参数,或者还会被外界因素影响。 i:“不可变的”(immutable)函数,对于相同的输入总是产生相同的结果。 s:稳定的”(stable)函数,(对于固定输入)其结果在一次扫描里不变。 v:“易变”(volatile)函数,其结果可能在任何时候变化v也用于那些有副作用的函数,因此调用它们无法得到优化。 pronargs smallint 参数数目。 pronargdefaults smallint 有默认值的参数数目。 prorettype oid 返回值的数据类型。 proargtypes oidvector 一个存放函数参数的数据类型的数组。数组里只包括输入参数(包括INOUT参数)此代表该函数的调用签名(接口)。 proallargtypes oid[] 一个包含函数参数的数据类型的数组。数组里包括所有参数的类型(包括OUT和INOUT参数),如果所有参数都是IN参数,则这个字段就会是空。请注意数组下标是以1为起点的,而因为历史原因,proargtypes的下标起点为0。 proargmodes "char"[] 一个保存函数参数模式的数组,编码如下: i表示IN参数。 o表示OUT参数。 b表示INOUT参数。 v表示VARIADIC参数。 如果所有参数都是IN参数,则这个字段为空。请注意,下标对应的是proallargtypes的位置,而不是proargtypes。 proargnames text[] 一个保存函数参数的名称的数组。没有名称的参数在数组里设置为空字符串。如果没有一个参数有名称,这个字段将是空。请注意,此数组的下标对应proallargtypes而不是proargtypes。 proargdefaults pg_node_tree 默认值的表达式树。是PRONARGDEFAULTS元素的列表。 prosrc text 描述函数或存储过程的定义。例如,对于解释型语言来说就是函数的源程序,或者一个连接符号,一个文件名,或者函数和存储过程创建时指定的其他任何函数体内容,具体取决于语言/调用习惯的实现。 probin text 关于如何调用该函数的附加信息。同样,其含义也是和语言相关的。 proconfig text[] 函数针对运行时配置变量的本地设置。 proacl aclitem[] 访问权限。具体请参见GRANT和REVOKE。 prodefaultargpos int2vector 函数具有默认值的入参的位置。 proshippable boolean 表示该函数是否可以下推到数据库节点上执行,默认值是false。 对于IMMUTABLE类型的函数,函数始终可以下推到数据库节点上执行。 对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到数据库节点执行。 propackage boolean 表示该函数是否支持重载,默认值是false。 t(true):表示支持。 f(false):表示不支持。 prokind "char" 表示该对象为函数还是存储过程。 'f':表示该对象为函数。 'p':表示该对象为存储过程。 proargsrc text 描述兼容A语法定义的函数或存储过程的参数输入字符串,包括参数注释。默认值为NULL。 proisprivate boolean 描述函数是否是PACKAGE内的私有函数,默认为false。 propackageid oid 函数所属的package oid,如果不在package内,则为0。 proargtypesext oidvector_extend 当函数参数较多时,用来存放函数参数的数据类型的数组。数组里只包括输入参数(包括INOUT参数),代表该函数的调用签名(接口)。 prodefaultargposext int2vector_extend 当函数参数较多时,函数具有默认值的入参的位置。 allargtypes oidvector 用来存放存储过程参数的数据类型的数组,包含存储过程所有参数(入参、出参、INOUT参数)。 allargtypesext oidvector_extend 当函数参数较多(大于666个)时,用来存放存储过程参数的数据类型的数组,包含所有参数(入参、出参、INOUT参数)。 新建函数时,会向pg_proc表中插入数据,更新索引。当出入参个数很多时,索引的长度可能会超过页面的三分之一,进而可能会产生“Index row size xxx exceeds maximum xxx for index "pg_proc_proname_all_args_nsp_index"”的报错,此为预期情况。您可以通过减少参数个数,避免该报错的产生。 父主题: 系统表
  • PG_THREAD_WAIT_STATUS 通过PG_THREAD_WAIT_STATUS视图可以检测当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况。 表1 PG_THREAD_WAIT_STATUS字段 名称 类型 描述 node_name text 当前节点的名称。 db_name text 数据库名称。 thread_name text 线程名称。 query_id bigint 查询ID,对应debug_query_id。 tid bigint 当前线程的线程号。 sessionid bigint 当前会话ID。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint 父会话ID。 tlevel integer streaming线程的层级。 smpid integer 并行线程的ID。 wait_status text 当前线程的等待状态。等待状态的详细信息请参见表2。 wait_event text 如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、IO的信息。否则是空。 locktag text 当前线程正等待获取的锁的信息。 lockmode text 当前线程正等待获取的锁的模式。包含表级锁、行级锁、页级锁下的各模式。 block_sessionid bigint 阻塞当前线程获取锁的会话标识。 global_sessionid text 全局会话ID。 wait_status列的等待状态有以下状态。 表2 等待状态列表 wait_status值 含义 none 没在等任意事件。 acquire lock 等待加锁,要么加锁成功,要么加锁等待超时。 acquire lwlock 等待获取轻量级锁。 wait io 等待IO完成。 wait cmd 等待完成读取网络通信包。 wait pooler get conn 等待pooler完成获取连接。 wait pooler abort conn 等待pooler完成终止连接。 wait pooler clean conn 等待pooler完成清理连接。 pooler create conn: [nodename], total N 等待pooler建立连接,当前正在与nodename指定节点建立连接,且仍有N个连接等待建立。 get conn 获取到其他节点的连接。 set cmd: [nodename] 在连接上执行SET/RESET/TRANSACTION BLOCK LEVEL PARA SET/SESSION LEVEL PARA SET,当前正在nodename指定节点上执行。 cancel query 取消某连接上正在执行的SQL语句。 stop query 停止某连接上正在执行的查询。 wait node: [nodename](plevel), total N, [phase] 等待接收与某节点的连接上的数据,当前正在等待nodename节点plevel线程的数据,且仍有N个连接的数据待返回。如果状态包含phase信息,则可能的阶段状态有: begin:表示处于事务开始阶段。 commit:表示处于事务提交阶段。 rollback:表示处于事务回滚阶段。 wait transaction sync: xid 等待xid指定事务同步。 wait wal sync 等待特定LSN的wal log完成到备机的同步。 wait data sync 等待完成数据页到备机的同步。 wait data sync queue 等待把行存的数据页放入同步队列。 flush data: [nodename](plevel), [phase] 等待向网络中nodename指定节点的plevel对应线程发送数据。如果状态包含phase信息,则可能的阶段状态为wait quota,即当前通信流正在等待quota值。 quota即流控大小,表示网络通道可接收的数据大小。 wait quota具体表示发送端(数据生产者)等待接收端(数据消费者)发送当前连接的quota信息。 stream get conn: [nodename], total N 初始化stream flow时,等待与nodename节点的consumer对象建立连接,且当前有N个待建连对象。 wait producer ready: [nodename](plevel), total N 初始化stream flow时,等待每个producer都准备好,当前正在等待nodename节点plevel对应线程的producer对象准备好,且仍有N个producer对象处于等待状态。 synchronize quit stream plan结束时,等待stream线程组内的线程统一退出。 nodegroup destroy stream plan结束时,等待销毁stream node group。 wait active statement 等待作业执行,正在资源负载管控中。 gtm connect 等待与GTM建连。 gtm get gxid 等待从GTM获取事务xid。 gtm get snapshot 等待从GTM获取事务快照snapshot。 gtm begin trans 等待GTM开始事务。 gtm commit trans 等待GTM提交事务。 gtm rollback trans 等待GTM执行事务回滚。 gtm start prepare trans 等待GTM开始两阶段事务的prepare阶段。 gtm prepare trans 等待GTM完成两阶段事务的prepare阶段。 gtm open sequence 等待GTM打开sequence。 gtm close sequence 等待GTM关闭sequence。 gtm create sequence 等待GTM创建sequence。 gtm alter sequence 等待GTM修改sequence。 gtm get sequence val 等待从GTM获取sequence的下一个值。 gtm set sequence val 等待GTM设置sequence的值。 gtm drop sequence 等待GTM删除sequence。 gtm rename sequence 等待GTM重命名sequence。 analyze: [relname], [phase] 当前正在对表relname执行analyze。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的analyze分析操作。 vacuum: [relname], [phase] 当前正在对表relname执行vacuum。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的vacuum清理操作。 vacuum full: [relname] 当前正在对表relname执行vacuum full清理。 create index 当前正在创建索引。 HashJoin - [ build hash | write file ] 当前是HashJoin算子,主要关注耗时的执行阶段。 build hash:表示当前HashJoin算子正在建立哈希表。 write file:表示当前HashJoin算子正在将数据写入磁盘。 HashAgg - [ build hash | write file ] 当前是HashAgg算子,主要关注耗时的执行阶段。 build hash:表示当前HashAgg算子正在建立哈希表。 write file:表示当前HashAgg算子正在将数据写入磁盘。 HashSetop - [build hash | write file ] 当前是HashSetop算子,主要关注耗时的执行阶段。 build hash:表示当前HashSetop算子正在建立哈希表。 write file:表示当前HashSetop算子正在将数据写入磁盘。 Sort | Sort - [fetch tuple | write file] 当前是Sort算子做排序,fetch tuple表示Sort算子正在获取tuple,write file表示Sort算子正在将数据写入磁盘。 Material | Material - write file 当前是Material算子,write file表示Material算子正在将数据写入磁盘。 standby read recovery conflict 备机只读与日志回放产生冲突。 standby get snapshot 备机只读获取快照。 prune table 等待堆表清理历史删除数据。 prune index 等待索引清理历史删除数据。 vacuum gpi 等待gpi索引清理历史删除数据。 gtm reset xmin 等待gtm重置xmin。 gtm get xmin 等待从gtm获取xmin。 gtm get csn 等待从gtm获取csn。 gtm start preprare trans 等待gtm启动二阶段事务。 gtm rename sequence 等待gtm重命名sequence。 wait reserve td 等待分配ustore事务槽。 wait td rollback 等待ustore事务槽回滚。 wait available td 等待ustore可用的事务槽。 wait transaction rollback 等待事务回滚。 gtm set disaster cluster 等待在gtm设置容灾集群信息。 gtm get disaster cluster 等待从gtm获取容灾集群信息。 gtm del disaster cluster 等待在gtm删除容灾集群信息。 gtm set consistency point 等待在gtm设置一致性点。 wait sync bgworkers 等待并行创建索引的子线程完成本地扫描和排序。 security audit write pipe 等待将审计日志写入管道。 wait unpack stream plan DN上等待解析stream计划。 wait fetch undo record 等待读取目标undo记录。 wait heap hot search buffer 等待通过hot链读取满足快照的Astore元组。 wait exclusive lwlock 防饿死机制触发,新的轻量级锁加锁请求等待之前被阻塞的轻量级锁获取到。 当wait_status为acquire lwlock、acquire lock或者wait io时,表示有等待事件。正在等待获取wait_event列对应类型的轻量级锁、事务锁,或者正在进行IO。 其中,wait_status值为acquire lwlock(轻量级锁)时对应的wait_event等待事件类型与描述信息如下。(wait_event为extension时,表示此时的轻量级锁是动态分配的锁,未被监控。) 表3 轻量级锁等待事件列表 wait_event类型 类型描述 ShmemIndexLock 用于保护共享内存中的主索引哈希表。 OidGenLock 用于避免不同线程产生相同的OID。 XidGenLock 用于避免两个事务获得相同的xid。 ProcArrayLock 用于避免并发访问或修改ProcArray共享数组。 SInvalReadLock 用于避免与清理失效消息并发执行。 SInvalWriteLock 用于避免与其它写失效消息、清理失效消息并发执行。 WALInsertLock 用于避免与其它WAL插入操作并发执行。 WALWriteLock 用于避免并发WAL写盘。 ControlFileLock 用于避免pg_control文件的读写并发、写写并发。 CheckpointLock 用于避免多个checkpoint并发执行。 CLogControlLock 用于避免并发访问或者修改Clog控制数据结构。 SubtransControlLock 用于避免并发访问或者修改子事务控制数据结构。 MultiXactGenLock 用于串行分配唯一MultiXact id。 MultiXactOffsetControlLock 用于避免对pg_multixact/offset的写写并发和读写并发。 MultiXactMemberControlLock 用于避免对pg_multixact/members的写写并发和读写并发。 RelCacheInitLock 用于失效消息场景对init文件进行操作时加锁。 CheckpointerCommLock 用于向checkpointer发起文件刷盘请求场景,需要串行的向请求队列插入请求结构。 TwoPhaseStateLock 用于避免并发访问或者修改两阶段信息共享数组。 TablespaceCreateLock 用于确定tablespace是否已经存在。 BtreeVacuumLock 用于防止vacuum清理B-tree中还在使用的页面。 AlterPortLock 用于保护CN更改注册端口号的操作。 AutovacuumLock 用于串行化访问autovacuum worker数组。 AutovacuumScheduleLock 用于串行化分配需要vacuum的table。 AutoanalyzeLock 用于获取和释放允许执行Autoanalyze的任务资源。 SyncScanLock 用于确定heap扫描时某个relfilenode的起始位置。 NodeTableLock 用于保护存放CN和DN节点信息的共享结构。 PoolerLock 用于保证两个线程不会同时从连接池里取到相同的连接。 RelationMappingLock 用于等待更新系统表到存储位置之间映射的文件。 Async Ctl 用于保护Async buffer。 AsyncCtlLock 用于避免并发访问或者修改共享通知状态。 AsyncQueueLock 用于避免并发访问或者修改共享通知信息队列。 SerializableXactHashLock 用于避免对于可串行事务共享结构的写写并发和读写并发。 SerializableFinishedListLock 用于避免对于已完成可串行事务共享链表的写写并发和读写并发。 SerializablePredicateLockListLock 用于保护对于可串行事务持有的锁链表。 OldSerXidLock 用于保护记录冲突可串行事务的结构。 FileStatLock 用于保护存储统计文件信息的数据结构。 SyncRepLock 用于在主备复制时保护xlog同步信息。 DataSyncRepLock 用于在主备复制时保护数据页同步信息。 MetaCacheSweepLock 用于元数据循环淘汰。 ExtensionConnectorLibLock 用于初始化ODBC连接场景,在加载与卸载特定动态库时进行加锁。 SearchServerLibLock 用于GPU加速场景初始化加载特定动态库时,对读文件操作进行加锁。 LsnXlogChkFileLock 用于串行更新特定结构中记录的主备机的xlog flush位置点。 GTMHostInfoLock 用于避免并发访问或者修改GTM主机信息。 ReplicationSlotAllocationLock 用于主备复制时保护主机端的流复制槽的分配。 ReplicationSlotControlLock 用于主备复制时避免并发更新流复制槽状态。 ResourcePoolHashLock 用于避免并发访问或者修改资源池哈希表。 OBSGetPathLock 用于避免对obs路径的写写并发和读写并发。 JobShmemLock 用于MPP兼容ORACLE定时任务功能中保护定时读取的全局变量。 OBSRuntimeLock 用于获取环境变量,如GAUSSHOME。 CriticalCacheBuildLock 用于从共享或者本地缓存初始化文件中加载cache的场景。 WaitCountHashLock 用于保护用户语句计数功能场景中的共享结构。 BufMappingLock 用于保护对共享缓冲映射表的操作。 LockMgrLock 用于保护常规锁结构信息。 PredicateLockMgrLock 用于保护可串行事务锁结构信息。 OperatorRealTLock 用于避免并发访问或者修改记录算子级实时数据的全局结构。 OperatorHistLock 用于避免并发访问或者修改记录算子级历史数据的全局结构。 SessionRealTLock 用于避免并发访问或者修改记录query级实时数据的全局结构。 SessionHistLock 用于避免并发访问或者修改记录query级历史数据的全局结构。 CacheSlotMappingLock 用于保护CU Cache全局信息。 BarrierLock 用于保证当前只有一个线程在创建Barrier。 GPCCommitLock 用于保护全局Plan Cache hash表的添加操作。 GPCClearLock 用于保护全局Plan Cache hash表的清除操作。 GPCTimelineLock 用于保护全局Plan Cache hash表检查Timeline的操作。 GPCMappingLock 用于全局Plan Cache缓存管理。 GPCPrepareMappingLock 用于全局Plan Cache缓存管理。 GPRCMappingLock 用于管理自治事务全局缓存hash表的访问和修改操作。 BufFreelistLock 用于保证共享缓冲区空闲列表操作的原子性。 AddinShmemInitLock 保护共享内存对象的初始化。 wait active statement 等待作业执行,正在资源负载管控中。 wait memory 等待内存获取。 DnUsedSpaceHashLock 用于更新会话对应的空间使用信息。 InstanceRealTLock 用于保护共享实例统计信息hash表的更新操作。 IOStatLock 用于资源管理IO统计信息哈希表并发维护操作。 PldebugLock 用于存储过程调试并发维护操作。 StartBlockMappingLock 用于globalstat从pgstat获取startblockarray等信息。 GlobalSeqLock 用于全局sequence序列管理。 MatviewSeqnoLock 用于物化视图缓存管理。 DataFileIdCacheLock 管理共享内存中存储数据文件描述符的哈希表的并发访存。 GTMHostInfoLock 保护共享GTM主机信息的并发访存。 TwoPhaseStatePartLock 保护(各个分区)两阶段事务状态信息。 WALBufMappingLock 保护共享内中各个wal缓存页面与lsn偏移的映射关系。 UndoZoneLock 保护undozone的并发访存。 RollbackReqHashLock 管理共享内存中存储回滚请求信息的哈希表的并发访存。 UHeapStatLock 保护ustore统计信息的并发访存。 WALWritePaxosLock 保护向paxos复制组件写wal日志的并发顺序。 SyncPaxosLock 保护paxos同步队列的并发访存。 BackgroundWorkerLock 保护background worker的并发顺序。 HadrSwitchoverLock 保护容灾切换的并发顺序。 HashUidLock 保护uid分配的并发顺序。 ParallelDecodeLock 保护并行解码的并发顺序。 XLogMaxCSNLock 保护容灾模式下本地最大可恢复CSN信息。 DisasterCacheLock 保护共享内存中容灾信息缓存的并发访存。 MaxCSNArrayLock 保护共享内存中各个分片备机CSN恢复进度信息。 RepairBadBlockStatHashLock 保护共享内存中损坏页面哈希表的并发访存。 DropArchiveSlotLock 保护删除归档槽信息的并发顺序。 ProcXactMappingLock 保护事务号-线程信息映射哈希表的并发访存。 UndoPerZoneLock 保护每个undozone内信息的并发访存。 UndoSpaceLock 保护undospace的并发访存。 SnapshotBlockLock 控制快照备份与页面刷盘的并发顺序。 DWSingleFlushFirstLock 控制页式单页面双写文件的并发顺序。 RestartPointQueueLock 控制备机restart Point数组的并发访存。 UnlinkRelHashTblLock 保护共享内存中待删除文件哈希表的并发访存。 UnlinkRelForkHashTblLock 保护共享内存中待删除文件fork哈希表的并发访存。 WALFlushWait 保护日志刷盘的并发顺序。 WALConsensusWait 保护日志达成一致才进行事务提交或日志回放操作。 WALBufferInitWait 保护wal共享内存页面的初始化和刷盘顺序。 WALInitSegment 保护wal日志段文件的初始化顺序。 PgwrSyncQueueLock 保护待刷盘文件队列的并发访存。 BarrierHashTblLock 保护共享内存中barrier列表信息的并发访存。 PageRepairHashTblLock 保护页面修复哈希表的并发访存。 FileRepairHashTblLock 保护文件修复哈希表的并发访存。 BadBlockStatHashLock 保护共享损坏页面统计哈希表的并发访存。 BufferIOLock 保护共享缓冲区单个页面加载或淘汰的IO并发。 BufferContentLock 保护共享缓冲区单个页面的读写并发。 CUSlotListLock 保护共享CU槽位链表的并发访存。 DataCacheLock 保护共享CU只读缓存的并发访存。 MetaCacheLock 保护共享cu meta缓存的并发访存。 CBMParseXlogLock 控制cbm文件的并发访存。 CLogBufMappingLock 控制共享clog页面映射的并发访存。 C LOG Ctl 控制各个clog分区信息的并发访存。 CSNBufMappingLock 控制共享csnlog页面映射的并发访存。 CSNLOG Ctl 控制各个csnlog分区信息的并发访存。 DelayDDLLock 控制删除类ddl和延迟备份功能的并发顺序。 DoubleWriteLock 控制双写模块的并发顺序。 DfsConnectorCacheLock 控制dfs连接缓存的并发访存。 DfsUserLoginLock 控制dfs用户登录的并发顺序。 DfsSpaceCacheLock 控制dfs空间管理缓存的并发顺序。 PGPROCLock 保护全局共享线程状态数组的并发访存。 RelfilenodeReuseLock 控制文件名复用的并发顺序。 ReplicationSlotLock 保护逻辑复制槽信息的并发访存。 LogicalReplicationSlotPersistentDataLock 控制逻辑复制槽持久化的并发顺序。 RowPageReplicationLock 控制行存页面复制的并发顺序。 MultiXactOffset Ctl 保护multixact offset文件信息的并发访存。 MultiXactMember Ctl 保护multixact member文件信息的并发访存。 OldSerXid SLRU Ctl 保护oldser事务号缓存信息的并发访存。 FullBuildXlogCopyStartPtrLock 控制全量build起点位置的并发访存。 RcvWriteLock 控制wal receiver writer的并发顺序。 XlogRemoveSegLock 控制最新删除wal文件信息的并发访存。 CsnMinLock 控制csn min信息的并发访存。 HypoIndexLock 虚拟索引创建、删除、重置等动作中使用的轻量级锁。 XGBoostLibLock DB4AI特性调用xgboost库时启用的锁。 InstrUserLockId 对保护用户登入登出哈希表并发修改加锁。 GsStackLock 控制gs_stack函数不被并发调用。 InstrStmtTrackCtlLock 在动态开启全量SQL时, 保护哈希表的并发访存。 CaptureViewFileHashLock 开启性能视图采集时,保护哈希表的并发访存。 UniqueSqlEvictLock 开启Unique SQL回收时,保护哈希表的并发访存。 ASPMappingLock 用于管理ASP的hash表的并发访存。 AuditIndexFileLock 控制审计日志index文件的并发读写。 SQLAdvisorLock 用于管理分布列推荐中hash表的并发访存。 LWTRANCHE_ACCOUNT_TABLE 控制账户锁定状态hash表的并发读写。 当wait_status值为wait io时对应的wait_event等待事件类型与描述信息如下。 表4 IO等待事件列表 wait_event类型 类型描述 BufFileRead 从临时文件中读取数据到指定buffer。 BufFileWrite 向临时文件中写入指定buffer中的内容。 ControlFileRead 读取pg_control文件。主要在数据库启动、执行checkpoint和主备校验过程中发生。 ControlFileSync 将pg_control文件持久化到磁盘。数据库初始化时发生。 ControlFileSyncUpdate 将pg_control文件持久化到磁盘。主要在数据库启动、执行checkpoint和主备校验过程中发生。 ControlFileWrite 写入pg_control文件。数据库初始化时发生。 ControlFileWriteUpdate 更新pg_control文件。主要在数据库启动、执行checkpoint和主备校验过程中发生。 CopyFileRead copy文件时读取文件内容。 CopyFileWrite copy文件时写入文件内容。 DataFileExtend 扩展文件时向文件写入内容。 DataFileFlush 将表数据文件持久化到磁盘 DataFileImmediateSync 将表数据文件立即持久化到磁盘。 DataFilePrefetch 异步读取表数据文件。 DataFileRead 同步读取表数据文件。 DataFileSync 将表数据文件的修改持久化到磁盘。 DataFileTruncate 表数据文件truncate。 DataFileWrite 向表数据文件写入内容。 LockFileAddToDataDirRead 读取"postmaster.pid"文件。 LockFileAddToDataDirSync 将"postmaster.pid"内容持久化到磁盘。 LockFileAddToDataDirWrite 将pid信息写到"postmaster.pid"文件。 LockFileCreateRead 读取LockFile文件"%s.lock"。 LockFileCreateSync 将LockFile文件"%s.lock"内容持久化到磁盘。 LockFileCreateWRITE 将pid信息写到LockFile文件"%s.lock"。 NgroupDestoryLock 对于保护nodegroup哈希表并发修改加锁。 NGroupMappingLock 对于保护nodegroup哈希表的单个分桶并发修改加锁。 RelationMapRead 读取系统表到存储位置之间的映射文件 RelationMapSync 将系统表到存储位置之间的映射文件持久化到磁盘。 RelationMapWrite 写入系统表到存储位置之间的映射文件。 ReplicationSlotRead 读取流复制槽文件。重新启动时发生。 ReplicationSlotRestoreSync 将流复制槽文件持久化到磁盘。重新启动时发生。 ReplicationSlotSync checkpoint时将流复制槽临时文件持久化到磁盘。 ReplicationSlotWrite checkpoint时写流复制槽临时文件。 SLRUFlushSync 将pg_clog、pg_subtrans和pg_multixact文件持久化到磁盘。主要在执行checkpoint和数据库停机时发生。 SLRURead 读取pg_clog、pg_subtrans和pg_multixact文件。 SLRUSync 将脏页写入文件pg_clog、pg_subtrans和pg_multixact并持久化到磁盘。主要在执行checkpoint和数据库停机时发生。 SLRUWrite 写入pg_clog、pg_subtrans和pg_multixact文件。 TimelineHistoryRead 读取timeline history文件。在数据库启动时发生。 TimelineHistorySync 将timeline history文件持久化到磁盘。在数据库启动时发生。 TimelineHistoryWrite 写入timeline history文件。在数据库启动时发生。 TwophaseFileRead 读取pg_twophase文件。在两阶段事务提交、两阶段事务恢复时发生。 TwophaseFileSync 将pg_twophase文件持久化到磁盘。在两阶段事务提交、两阶段事务恢复时发生。 TwophaseFileWrite 写入pg_twophase文件。在两阶段事务提交、两阶段事务恢复时发生。 WALBootstrapSync 将初始化的WAL文件持久化到磁盘。在数据库初始化发生。 WALBootstrapWrite 写入初始化的WAL文件。在数据库初始化发生。 WALCopyRead 读取已存在的WAL文件并进行复制时产生的读操作。在执行归档恢复完后发生。 WALCopySync 将复制的WAL文件持久化到磁盘。在执行归档恢复完后发生。 WALCopyWrite 读取已存在WAL文件并进行复制时产生的写操作。在执行归档恢复完后发生。 WALInitSync 将新初始化的WAL文件持久化磁盘。在日志回收或写日志时发生。 WALInitWrite 将新创建的WAL文件初始化为0。在日志回收或写日志时发生。 WALRead 从xlog日志读取数据。两阶段文件redo相关的操作产生。 WALSyncMethodAssign 将当前打开的所有WAL文件持久化到磁盘。 WALWrite 写入WAL文件。 DoubleWriteFileRead 等待读取双写文件。 DoubleWriteFileSync 等待刷盘双写文件。 DoubleWriteFileWrite 等待写入双写文件。 PredoProcessPending 等待并行回放处理剩余记录。 PredoApply 等待并行回放应用回放。 DisableConnectFileRead 等待读取锁分片文件。 DisableConnectFileSync 等待刷盘锁分片文件。 DisableConnectFileWrite 等待写入锁分片文件 BufHashTableSearch 共享缓冲区hash表搜索(可能会触发页面淘汰)。 buffer_strategy_get 策略化缓冲区页面获取(可能会触发页面淘汰)。 UndoFileExtend undo文件扩展。 UndoFilePrefetch undo文件预取。 UndoFileRead undo文件读取。 UndoFileWrite undo文件写。 UndoFileSync undo文件刷盘。 UndoFileUnlink undo文件删除。 UndoMetaSync undo元数据文件刷盘。 WALBufferAccess WAL Buffer访问(出于性能考虑,内核代码里只统计访问次数,未统计其访问耗时)。 WALBufferFull WAL Buffer满时,写wal文件相关的处理。 DWSingleFlushGetPos 单页面双写文件查找可用位置。 DWSingleFlushWrite 单页面双写文件刷盘。 MPFL_INIT 初始化max_page_flush_lsn。 MPFL_READ 读取max_page_flush_lsn。 MPFL_WRITE 写max_page_flush_lsn。 OBSList 遍历OBS目录。 OBSRead 读取OBS对象。 OBSWrite 写入OBS对象。 LOGCTRL_SLEEP 等待备机回放追赶。 ShareStorageWalRead 共享盘读取日志文件。 ShareStorageWalWrite 共享盘写入日志文件。 ShareStorageCtlInfoRead 共享盘读取控制信息。 ShareStorageCtlInfoWrite 共享盘写入控制信息。 当wait_status值为acquire lock(事务锁)时对应的wait_event等待事件类型与描述信息如下。 表5 事务锁等待事件列表 wait_event类型 类型描述 relation 对表加锁。 extend 对表扩展空间时加锁。 partition 对分区表加锁。 partition_seq 对分区表的分区加锁。 page 对表页面加锁。 tuple 对页面上的tuple加锁。 transactionid 对事务ID加锁。 virtualxid 对虚拟事务ID加锁。 object 加对象锁。 userlock 加用户锁。 advisory 加advisory锁。 filenode 对文件名加锁。 subtransactionid 对子事务号加锁。 tuple_uid 对元组头部的uid隐藏字段加锁。 父主题: 系统视图
  • 语法格式 重命名表索引的名称。 ALTER INDEX [ IF EXISTS ] index_name RENAME TO new_name; 修改表索引的所属空间。 ALTER INDEX [ IF EXISTS ] index_name SET TABLESPACE tablespace_name; 修改表索引的存储参数。 ALTER INDEX [ IF EXISTS ] index_name SET ( {storage_parameter = value} [, ... ] ); 重置表索引的存储参数。 ALTER INDEX [ IF EXISTS ] index_name RESET ( storage_parameter [, ... ] ) ; 设置表索引或索引分区不可用。 ALTER INDEX [ IF EXISTS ] index_name [ MODIFY PARTITION index_partition_name ] UNUSABLE; 重建表索引或索引分区。 ALTER INDEX index_name REBUILD [ PARTITION index_partition_name ]; 重命名索引分区。 ALTER INDEX [ IF EXISTS ] index_name RENAME PARTITION index_partition_name TO new_index_partition_name; 修改索引分区的所属表空间。 ALTER INDEX [ IF EXISTS ] index_name MOVE PARTITION index_partition_name TABLESPACE new_tablespace;
  • 功能描述 ALTER INDEX用于修改现有索引的定义。 它有几种子形式: IF EXISTS 如果指定的索引不存在,则发出一个notice而不是error。 RENAME TO 只改变索引的名称。对存储的数据没有影响。 SET TABLESPACE 这个选项会改变索引的表空间为指定表空间,并且把索引相关的数据文件移动到新的表空间里。 SET ( { STORAGE_PA RAM ETER = value } [, ...] ) 改变索引的一个或多个索引方法特定的存储参数。 需要注意的是索引内容不会被这个命令立即修改,根据参数的不同,可能需要使用REINDEX重建索引来获得期望的效果。 RESET ( { storage_parameter } [, ...] ) 重置索引的一个或多个索引方法特定的存储参数为缺省值。与SET一样,可能需要使用REINDEX来完全更新索引。 [ MODIFY PARTITION index_partition_name ] UNUSABLE 用于设置表或者索引分区上的索引不可用。 REBUILD [ PARTITION index_partition_name ] 用于重建表或者索引分区上的索引。 RENAME PARTITION 用于重命名索引分区。 MOVE PARTITION 用于修改索引分区的所属表空间。
  • 参数说明 index_name 要修改的索引名。 new_name 新的索引名。 取值范围:字符串,且符合标识符命名规范。 tablespace_name 表空间的名称。 取值范围:已存在的表空间。 storage_parameter 索引方法特定的参数名。ACTIVE_PAGES表示索引的页面数量,可能比实际的物理文件页面少,可以用于优化器调优。目前只对ustore的分区表local索引生效,且会被vacuum、analyze更新(包括auto vacuum)。不建议用户手动设置该参数。 value 索引方法特定的存储参数的新值。根据参数的不同,这可能是一个数字或单词。 new_index_partition_name 新索引分区名。 index_partition_name 索引分区名。 new_tablespace 新表空间。
  • 参数说明 function_name 要创建的函数名称(可以用模式修饰)。 取值范围:字符串,要符合标识符命名规范。且最多为63个字符。若超过63个字符,数据库会截断并保留前63个字符当做函数名称。 argname 函数参数的名称。 取值范围:字符串,要符合标识符命名规范。且最多为63个字符。若超过63个字符,数据库会截断并保留前63个字符当做函数参数名称。 argmode 函数参数的模式。 取值范围:IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的函数定义中。 VARIADIC用于声明数组类型的参数。 argtype 函数参数的类型。可以使用%TYPE或%ROWTYPE间接引用变量或表的类型,详细可参考存储过程章节定义变量。 expression 参数的默认表达式。 在参数a_format_version值为10c和a_format_dev_version值为s2的情况下,函数参数为INOUT模式时不支持默认表达式。 推荐使用方式:将所有默认值参数定义在所有非默认值参数后。 调用带有默认参数的函数时,入参从左往右排入函数,如果有非默认参数的入参缺失则报错。 打开proc_uncheck_default_param参数,调用带有默认参数的函数时,入参从左往右排入函数,如果有非默认参数的入参缺失,则会用错位的默认值填充该参数。 在参数a_format_version值为10c、a_format_dev_version值为s1和关闭proc_outparam_override,函数参数同时包括out出参和default时,默认值不可缺省。 rettype 函数返回值的数据类型。与argtype相同,同样可以使用%TYPE或%ROWTYPE间接引用类型。 如果存在OUT或INOUT参数,可以省略RETURNS子句。如果没有省略,则该子句必须和输出参数所表示的结果类型一致。如果有多个输出参数,则该子句为RECORD类型,否则该子句与单个输出参数的类型相同。 SETOF修饰词表示该函数将返回一个集合,而不是单独一项。 PACKAGE外FUNCTION argtype和rettype中%TYPE不支持引用PACKAGE变量的类型。 column_name 字段名称。 column_type 字段类型。 definition 一个定义函数的字符串常量,含义取决于语言。它可以是一个内部函数名称、一个指向某个目标文件的路径、一个SQL查询、一个过程语言文本。 DETERMINISTIC SQL语法兼容接口,未实现功能,不推荐使用。 LANGUAGE lang_name 用以实现函数的语言的名称。可以是SQL,internal,或者是用户定义的过程语言名称。为了保证向下兼容,该名称可以用单引号(包围)。若采用单引号,则引号内必须为大写。 由于兼容性问题,A数据库风格的语法无论指定任何语言,最终创建的语言都为plpgsql。 internal函数在定义时,如果AS指定为内部系统函数,则新创建函数的参数类型,参数个数,与返回值类型需要与内部系统函数保持一致,且需要有执行此内部系统函数的权限。 internal函数只支持拥有sysadmin权限的用户创建。 WINDOW 表示该函数是窗口函数。替换函数定义时不能改变WINDOW属性。 自定义窗口函数只支持LANGUAGE是internal,并且引用的内部函数必须是窗口函数。 IMMUTABLE 表示该函数在给出同样的参数值时总是返回同样的结果。 STABLE 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该函数值可以在一次表扫描内改变,因此不会做任何优化。 SHIPPABLE|NOT SHIPPABLE 表示该函数是否可以下推执行。预留接口,不推荐使用。 PACKAGE 表示该函数是否支持重载。PostgreSQL风格的函数本身就支持重载,此参数主要是针对其它风格的函数。 不允许package函数和非package函数重载或者替换。 package函数不支持VARIADIC类型的参数。 不允许修改函数的package属性。 LEAKPROOF 指出该函数的参数只包括返回值。LEAKPROOF只能由系统管理员设置。 CALLED ON NULL INPUT 表明该函数的某些参数是NULL的时候可以按照正常的方式调用。该参数可以省略。 RETURNS NULL ON NULL INPUT STRICT STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。 RETURNS NULL ON NULL INPUT和STRICT的功能相同。 EXTERNAL 目的是和SQL兼容,是可选的,这个特性适合于所有函数,而不仅是外部函数。 SECURITY INVOKER AUTHID CURRENT_USER 表明该函数将带着调用它的用户的权限执行。该参数可以省略。 SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。 SECURITY DEFINER AUTHID DEFINER 声明该函数将以创建它的用户的权限执行。 AUTHID DEFINER和SECURITY DEFINER的功能相同。 COST execution_cost 用来估计函数的执行成本。 execution_cost以cpu_operator_cost为单位。 取值范围:正数 ROWS result_rows 估计函数返回的行数。用于函数返回的是一个集合。 取值范围:正数,默认值是1000行。 configuration_parameter value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 取值范围:字符串 DEFAULT OFF RESET 指定默认值。 FROM CURRENT 取当前会话中的值设置为configuration_parameter的值。 plsql_body PL/SQL存储过程体。 当在函数体中进行创建用户、修改密码或加解密等涉及密码或密钥相关操作时,系统表及日志中会记录密码或密钥的明文信息。为防止敏感信息泄露,不建议用户在函数体中进行涉及密码或密钥等敏感信息的相关操作。
  • 语法格式 兼容PostgreSQL风格的创建自定义函数语法。 CREATE [ OR REPLACE ] FUNCTION function_name [ ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ]} [, ...] ] ) ] [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_name column_type } [, ...] )] LANGUAGE lang_name [ {IMMUTABLE | STABLE | VOLATILE } | {SHIPPABLE | NOT SHIPPABLE} | WINDOW | [ NOT ] LEAKPROOF | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} | {fenced | not fenced} | {PACKAGE} | COST execution_cost | ROWS result_rows | SET configuration_parameter { {TO | =} value | FROM CURRENT }} ][...] { AS 'definition' } 兼容A模式数据库风格的创建自定义函数的语法。 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ] } [, ...] ] ) RETURN rettype [ DETERMINISTIC ] [ {IMMUTABLE | STABLE | VOLATILE } | {SHIPPABLE | NOT SHIPPABLE} | {PACKAGE} | {FENCED | NOT FENCED} | [ NOT ] LEAKPROOF | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER } | COST execution_cost | ROWS result_rows | SET configuration_parameter { {TO | =} value | FROM CURRENT | LANGUAGE lang_name ][...] { IS | AS } plsql_body /
  • 注意事项 如果创建函数时参数或返回值带有精度,不进行精度检测。 创建函数时,函数定义中对表对象的操作建议都显式指定模式,否则可能会导致函数执行异常。 创建存储过程时,仅对CREATE的存储过程或PACKAGE本身加写锁,仅对执行过程中编译、执行会对函数和函数依赖的PACKAGE均加读锁。 在创建函数时,函数内部通过SET语句设置current_schema和search_path无效。执行完函数后的search_path和current_schema与执行函数前的search_path和current_schema保持一致。 如果函数参数中带有出参,想要出参生效,必须打开guc参数 set behavior_compat_options = 'proc_outparam_override'; SELECT、CALL调用函数时,必须要在出参位置提供实参进行调用,否则函数调用失败。 兼容PostgreSQL风格的函数或者带有PACKAGE属性的函数支持重载。在指定REPLACE的时候,如果参数个数、类型、返回值有变化,不会替换原有函数,而是会建立新的函数。 不能创建仅形参名字不同(函数名和参数列表类型都一样)的重载函数。 不能创建与存储过程拥有相同名称和参数列表的函数。 不支持形参仅在自定义ref cursor类型和sys_refcursor类型不同的重载。 不支持仅返回的数据类型不同的函数重载。 不支持仅默认值不同的函数重载。 重载的函数在调用时变量需要明确具体的类型。 在函数内部使用未声明的变量,函数被调用时会报错。 SELECT调用可以指定不同参数来进行同名函数调用。由于语法不支持调用不带有PACKAGE属性的同名函数。 在创建function时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 新创建的函数默认会给PUBLIC授予执行权限(详见GRANT)。用户默认继承PUBLIC角色权限,因此其他用户也会有函数的执行权限并可以查看函数的定义,另外执行函数时还需要具备函数所在schema的USAGE权限。用户在创建函数时可以选择收回PUBLIC默认执行权限,然后根据需要将执行权限授予其他用户,为了避免出现新函数能被所有人访问的时间窗口,应在一个事务中创建函数并且设置函数执行权限。开启数据库对象隔离属性后,普通用户只能查看有权限执行的函数定义。 在函数内部调用其它无参数的函数时,可以省略括号,直接使用函数名进行调用。 在函数内部调用其他有出参的函数,如果在赋值表达式中调用时,需要打开guc参数 set behavior_compat_options = 'proc_outparam_override' ,并提前定义与出参类型相同的变量,然后将变量作为出参调用带有出参的其他函数,出参才能生效。否则,被调函数的出参会被忽略。 兼容Oracle风格的函数支持参数注释的查看与导出、导入。 兼容Oracle风格的函数支持介于IS/AS与plsql_body之间的注释的查看与导出、导入。 被授予CREATE ANY FUNCTION权限的用户,可以在用户模式下创建/替换函数。 函数默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置guc参数behavior_compat_options='plsql_security_definer'。 不打开参数set behavior_compat_options = 'proc_outparam_override'时,被匿名块或存储过程直接调用的函数的OUT、IN OUT出参不能使用复合类型,并且RETURN值会被当做OUT出参的第一个值导致调用失败,想正确使用OUT、IN OUT出参,需打开参数set behavior_compat_options = 'proc_outparam_override',见示例。 对于PL/SQL函数,打开参数behavior_compat_options='proc_outparam_override'后,out/inout的行为会改变,函数中如果return和out/inout,可以同时返回,参数打开前只会返回return,见示例。 对于PL/SQL函数,打开参数behavior_compat_options='proc_outparam_override'后,有以下限制: 如果同一schema和package中已存在带有out/inout参数函数,不能再次创建带有out/inout参数的同名函数。 无论使用select还是call调用存储过程,都必须加上out参数。 部分场景不支持函数参与表达式(与参数打开前相比),如存储过程中左赋值,call function等,见示例。 不支持调用无return的函数,perform function调用。 存储过程中调用函数,不支持out/inout参数传入常量,可以传入变量,见示例。 打开GUC参数proc_outparam_override后,函数返回值为setof类型时,out出参不会生效。
  • SUMMARY_STATEMENT_COUNT 显示数据库汇聚各节点(CN/DN)当前时刻执行的五类语句(SELECT、INSERT、UPDATE、DELETE、MERGE INTO)和(DDL、DML、DCL)统计信息。 表1 SUMMARY_STATEMENT_COUNT字段 名称 类型 描述 user_name text 用户名。 select_count numeric select语句统计结果。 update_count numeric update语句统计结果。 insert_count numeric insert语句统计结果。 delete_count numeric delete语句统计结果。 mergeinto_count numeric merge into语句统计结果。 ddl_count numeric DDL语句的数量。 dml_count numeric DML语句的数量。 dcl_count numeric DCL语句的数量。 total_select_elapse numeric 总select的时间花费(单位:微秒)。 avg_select_elapse bigint 平均select的时间花费(单位:微秒)。 max_select_elapse bigint 最大select的时间花费(单位:微秒)。 min_select_elapse bigint 最小select的时间花费(单位:微秒)。 total_update_elapse numeric 总update的时间花费(单位:微秒)。 avg_update_elapse bigint 平均update的时间花费(单位:微秒)。 max_update_elapse bigint 最大update的时间花费(单位:微秒)。 min_update_elapse bigint 最小update的时间花费(单位:微秒)。 total_insert_elapse numeric 总insert的时间花费(单位:微秒)。 avg_insert_elapse bigint 平均insert的时间花费(单位:微秒)。 max_insert_elapse bigint 最大insert的时间花费(单位:微秒)。 min_insert_elapse bigint 最小insert的时间花费(单位:微秒)。 total_delete_elapse numeric 总delete的时间花费(单位:微秒)。 avg_delete_elapse bigint 平均delete的时间花费(单位:微秒)。 max_delete_elapse bigint 最大delete的时间花费(单位:微秒)。 min_delete_elapse bigint 最小delete的时间花费(单位:微秒)。 父主题: Query
  • GS_SLOW_QUERY_INFO GS_SLOW_QUERY_INFO视图显示当前节点上已经转储的慢查询信息。此数据是从内核中转储到系统表中的数据。当设置GUC参数enable_resource_record为on时,系统会定时(周期为3分钟)将内核中query信息导入GS_WLM_SESSION_QUERY_INFO_ALL系统表,开启此功能会占用系统存储空间并对性能有一定影响。用户通过查询GS_SLOW_QUERY_INFO视图,可以查看已经转储的慢查询信息,本版本中已废弃。 表1 GS_SLOW_QUERY_INFO字段 名称 类型 描述 dbname text 数据库名称。 schemaname text schema名称。 nodename text 节点名称。 username text 用户名。 queryid bigint 归一化ID。 query text query语句。 start_time timestamp with time zone 开始执行时间。 finish_time timestamp with time zone 结束执行时间。 duration bigint 执行持续时间(毫秒)。 query_plan text 计划信息。 n_returned_rows bigint Select返回的结果集行数。 n_tuples_fetched bigint 随机扫描行数。 n_tuples_returned bigint 顺序扫描行数。 n_tuples_inserted bigint 插入行数。 n_tuples_updated bigint 更新行数。 n_tuples_deleted bigint 删除行数。 n_blocks_fetched bigint Cache加载次数。 n_blocks_hit bigint Cache命中数。 db_time bigint 有效的DB时间花费,多线程将累加(单位:微秒)。 cpu_time bigint CPU时间(单位:微秒)。 execution_time bigint 执行器内执行时间(单位:微秒)。 parse_time bigint SQL解析时间(单位:微秒)。 plan_time bigint SQL生成计划时间(单位:微秒)。 rewrite_time bigint SQL重写时间(单位:微秒)。 pl_execution_time bigint plpgsql上的执行时间(单位:微秒)。 pl_compilation_time bigint plpgsql上的编译时间(单位:微秒)。 net_send_time bigint 网络上的时间花费(单位:微秒)。 data_io_time bigint IO上的时间花费(单位:微秒)。 父主题: Query
  • 数据类型映射关系 数据类型、JAVA变量类型以及JDBC类型索引关系如下: 兼容模式 GaussDB 数据类型 JAVA变量类型 JDBC类型索引 ORA/MYSQL oid java.lang.Long java.sql.Types.BIGINT ORA/MYSQL numeric java.math.BigDecimal java.sql.Types.NUMERIC ORA/MYSQL tinyint java.lang.Integer java.sql.Types.TINYINT ORA/MYSQL smallint java.lang.Integer java.sql.Types.SMALLINT ORA/MYSQL bigint java.lang.Long java.sql.Types.BIGINT ORA/MYSQL float4 java.lang.Float java.sql.Types.REAL ORA/MYSQL float8 java.lang.Double java.sql.Types.DOUBLE ORA/MYSQL char java.lang.String java.sql.Types.CHAR ORA/MYSQL character java.lang.String java.sql.Types.CHAR ORA/MYSQL bpchar java.lang.String java.sql.Types.CHAR ORA/MYSQL character varying java.lang.String java.sql.Types.VARCHAR ORA/MYSQL varchar java.lang.String java.sql.Types.VARCHAR ORA/MYSQL text java.lang.String java.sql.Types.VARCHAR ORA/MYSQL name java.lang.String java.sql.Types.VARCHAR ORA/MYSQL bytea byte[] java.sql.Types.BINARY ORA/MYSQL blob java.sql.Blob java.sql.Types.BLOB ORA/MYSQL clob java.sql.Clob java.sql.Types.CLOB ORA/MYSQL boolean java.lang.Boolean java.sql.Types.BIT MYSQL date java.sql.Date java.sql.Types.DATE ORA/MYSQL time java.sql.Time java.sql.Types.TIME ORA/MYSQL timetz java.sql.Time java.sql.Types.TIME ORA/MYSQL timestamp java.sql.Timestamp java.sql.Types.TIMESTAMP ORA/MYSQL smalldatetime java.sql.Timestamp java.sql.Types.TIMESTAMP ORA/MYSQL timestamptz java.sql.Timestamp java.sql.Types.TIMESTAMP ORA/MYSQL refcursor java.sql.ResultSet java.sql.Types.REF_CURSOR java.sql.Types.OTHER 父主题: JDBC
  • PG_JOB PG_JOB系统表存储用户创建的定时任务的任务详细信息,定时任务线程定时轮询PG_JOB系统表中的时间,当任务到期会触发任务的执行,并更新PG_JOB表中的任务状态。该系统表属于Shared Relation,所有创建的job记录对所有数据库可见。普通用户需授权才能访问。 表1 PG_JOB字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 job_id bigint 作业ID,主键,是唯一的(有唯一索引) current_postgres_pid bigint 如果当前任务已被执行,那么此处记录运行此任务的线程ID。默认为 -1,表示此任务未被执行过。 log_user name 创建者的UserName priv_user name 作业执行者的UserName dbname name 标识作业要在哪个数据库执行的数据库名称 node_name name 标识当前作业是在哪个数据库主节点上创建和执行 job_status "char" 当前任务的执行状态,默认为's',各取值含义: 'r':running 's':successfully finished 'f':job failed 'd':disable 当job连续执行失败16次,会将job_status自动设置为失效状态'd',后续不再执行该job。 注:当用户将定时任务关闭(即:guc参数job_queue_processes为0时),由于监控job执行的线程不会启动,所以该状态不会根据job的实时状态进行设置,用户不需要关注此状态。只有当开启定时任务功能(即:guc参数job_queue_processes为非0时),系统才会根据当前job的实时状态刷新该字段值。 start_date timestamp without time zone 作业第一次开始执行时间,时间精确到毫秒。 next_run_date timestamp without time zone 定时任务下次执行的时间,时间精确到毫秒。 failure_count smallint 失败计数,作业连续执行失败16次,不再继续执行。 interval text 作业执行的重复时间间隔。 last_start_date timestamp without time zone 上次运行开始时间,时间精确到毫秒。 last_end_date timestamp without time zone 上次运行的结束时间,时间精确到毫秒。 last_suc_date timestamp without time zone 上次成功运行的开始时间,时间精确到毫秒。 this_run_date timestamp without time zone 正在运行任务的开始时间,时间精确到毫秒。 nspname name 标识作业执行时的schema的名称。 job_name text DBE_SCHEDULER定时任务专用,定时任务名称。 end_date timestamp without time zone DBE_SCHEDULER定时任务专用,定时任务失效时间,时间精确到毫秒。 enable boolean DBE_SCHEDULER定时任务专用,定时任务启用状态: true:启用 false:未启用 failure_msg text 最新一次执行任务报错信息。 父主题: 系统表
  • STAT_SYS_INDEXES 显示当前节点pg_catalog、information_schema以及pg_toast模式中所有系统表的索引状态信息。 表1 STAT_SYS_INDEXES字段 名称 类型 描述 relid oid 该索引的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引所在的Schema名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 该索引上执行的索引扫描次数。 idx_tup_read bigint 该索引上扫描返回的索引项数。 idx_tup_fetch bigint 使用该索引的简单索引扫描在原表中抓取的活跃行数。 父主题: Object
  • 案例环境准备 为了便于规则的使用场景演示,需准备建表语句如下: --清理环境。 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);
  • 示例 --创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; --创建表tpcds.reason。 gaussdb=# CREATE TABLE tpcds.reason ( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) ); --向表中插入多条记录。 gaussdb=# INSERT INTO tpcds.reason values(1,'AAAAAAAABAAAAAAA','reason 1'),(2,'AAAAAAAABAAAAAAA','reason 2'); --在表tpcds.reason上创建索引。 gaussdb=# CREATE UNIQUE INDEX ds_reason_index1 ON tpcds.reason(r_reason_sk); --对带索引的表tpcds.reason执行VACUUM操作。 gaussdb=# VACUUM (VERBOSE, ANALYZE) tpcds.reason; --删除索引。 gaussdb=# DROP INDEX ds_reason_index1 CASCADE; gaussdb=# DROP TABLE tpcds.reason; gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上analyze关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 ustore分区表在autovacuum=analyze的时候也会触发vacuum。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称,需要配合analyze选项使用。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 由于vacuum analyze语句的机制是依次执行vacuum和analyze,因此当column_name错误时存在vacuum执行成功但analyze执行失败的情况,对于分区表,则会出现对某个分区成功vacuum之后analyze失败的情况。 PARTITION COMPACT和PARTITION参数不能同时使用。 partition_name 要清理的表的一级分区名称。缺省时为所有一级分区。 subpartition_name 要清理的表的二级分区名称。缺省时为所有二级分区。
  • 注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的那个表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者或者被授予了指定表VACUUM权限的用户,默认系统管理员有该权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更优选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。FULL选项并不清理索引,所以推荐周期性的运行REINDEX命令。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 当含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 同时执行多个VACUUM FULL可能出现死锁。 如果没有打开xc_maintenance_mode参数,那么VACUUM FULL操作将跳过所有系统表。 执行DELETE后立即执行VACUUM FULL命令不会回收空间。执行DELETE后再执行1000个非SELECT事务,或者等待1s后再执行1个事务,之后再执行VACUUM FULL命令空间才会回收。 VACUUM FULL期间会对表加排他锁,不建议在业务高峰期运行VACUUM FULL,否则会导致等锁时间过长或者死锁。
  • 语法格式 回收空间并更新统计信息,对关键字顺序无要求。 VACUUM [ ( { FULL | FREEZE | VERBOSE | {ANALYZE | ANALYSE }} [,...] ) ] [ table_name [ (column_name [, ...] ) ] [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ]; 仅回收空间,不更新统计信息。 VACUUM [ FULL [COMPACT] ] [ FREEZE ] [ VERBOSE ] [ table_name [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ]; 回收空间并更新统计信息,且对关键字顺序有要求。 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ];
  • WLM_WORKLOAD_RUNTIME WLM_WORKLOAD_RUNTIME视图显示当前用户在CN上执行作业时当前CN的作业状态信息。 表1 WLM_WORKLOAD_RUNTIME字段 名称 类型 描述 node_name text 作业执行所在CN的名称。 thread_id bigint 后端线程ID。 processid integer 后端线程的pid。 time_stamp bigint 语句执行的开始时间。 username name 登录到该后端的用户名。 memory integer 语句所需的内存大小。 active_points integer 语句在资源池上消耗的资源点数。 max_points integer 语句在资源池上消耗的总资源点数。 priority integer 作业的优先级。 resource_pool text 作业所在资源池。 status text 作业执行的状态,包括: pending: 阻塞状态。 running:执行状态。 finished:结束状态。 aborted:终止状态。 unknown:未知状态。 control_group text 作业所使用的Cgroups。 enqueue text 作业的排队信息,包括: GLOBAL:全局排队。 RESPOOL:资源池排队。 ACTIVE:不排队。 query text 正在执行的语句。 父主题: Workload Manager
  • GS_LSC_MEMORY_DETAIL GS_LSC_MEMORY_DETAIL视图显示所有线程的本地SysCache的内存占用情况,以MemoryContext节点来统计。仅在开启GSC的模式下有数据。 表1 GS_LSC_MEMORY_DETAIL字段 名称 类型 描述 threadid text 线程启动时间+线程标识(字符串信息为timestamp.sessionid)。 tid bigint 线程标识。 thrdtype text 线程类型。可以是系统内存在的任何线程类型,如postgresql、wlmmonitor等。 contextname text 内存上下文名称。 level smallint 当前上下文在整体内存上下文中的层级。 parent text 父内存上下文名称。 totalsize bigint 当前内存上下文的内存总数,单位Byte。 freesize bigint 当前内存上下文中已释放的内存总数,单位Byte。 usedsize bigint 当前内存上下文中已使用的内存总数,单位Byte。 父主题: 系统视图
  • 示例 --创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; --创建表reason。 gaussdb=# CREATE TABLE tpcds.reason ( CD_DEMO_SK INTEGER NOT NULL, CD_GENDER character(16) , CD_MARITAL_STATUS character(100) ) ; --插入数据。 gaussdb=# INSERT INTO tpcds.reason VALUES(51, 'AAAAAAAADDAAAAAA', 'reason 51'); --创建表reason_t1。 gaussdb=# CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason; --为一个INSERT语句创建一个预备语句然后执行它。 gaussdb=# PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO tpcds.reason_t1 VALUES($1,$2,$3); gaussdb=# EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52'); --删除表reason和reason_t1。 gaussdb=# DROP TABLE tpcds.reason; gaussdb=# DROP TABLE tpcds.reason_t1; --删除SCHEMA。 gaussdb=# DROP SCHEMA tpcds CASCADE;
  • DBE_SQL_UTIL.create_hint_sql_patch create_hint_sql_patch是用于创建调优SQL PATCH的接口函数,返回执行是否成功。 限制仅初始用户、sysadmin、opradmin、monadmin用户有权限调用。 表1 DBE_SQL_UTIL.create_hint_sql_patch入参和返回值列表 参数 类型 描述 patch_name IN name PATCH名称。 unique_sql_id IN bigint 查询全局唯一ID。 hint_string IN text Hint文本。 description IN text PATCH的备注,默认值为NULL。 enabled IN bool PATCH是否生效,默认值为true。 result OUT bool 执行是否成功。 父主题: DBE_SQL_UTIL Schema
  • SQL调优指南 SQL调优的唯一目的是“资源利用最大化”,即CPU、内存、磁盘IO、网络IO四种资源利用最大化。所有调优手段都是围绕资源使用开展的。所谓资源利用最大化是指SQL语句尽量高效,节省资源开销,以最小的代价实现最大的效益。比如做典型点查询的时候,可以用seqscan+filter(即读取每一条元组和点查询条件进行匹配)实现,也可以通过indexscan实现,显然indexscan可以以更小的代价实现相同的效果。 根据硬件资源和客户的业务特征确定合理的集群部署方案和表定义是数据库在多数情况下满足性能要求的基础。下文的调优说明假设您已根据“软件安装”指引在安装过程中按照合理的集群方案完成了安装,且已经根据“开发设计建议”的指引进行了数据库设计。 Query执行流程 SQL执行计划介绍 调优流程 更新统计信息 审视和修改表定义 审视计划跳变场景 典型SQL调优点 经验总结:SQL语句改写规则 SQL调优关键参数调整 使用Plan Hint进行调优 检查隐式转换的性能问题 使用SQL PATCH进行调优 实际调优案例
共100000条
提示

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