更新时间:2024-11-12 GMT+08:00
分享

事务

介绍数据库事务隔离、事务只读、最大prepared事务数、维护模式目的参数设置及取值范围等内容。

transaction_isolation

参数说明设置当前事务的隔离级别。对于开启的新事务,隔离级别固定为default_transaction_isolation的值。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:

  • 通常情况下,支持以下字符串,对大小写和空格敏感。
    • 'serializable':GaussDB目前功能上不支持此隔离级别,设置该隔离级别时,与'repeatable read'效果相同。
    • 'read committed':仅读取已提交事务的数据,无法读取未提交的数据。
    • 'read uncommitted':与'read committed'表现相同。
    • 'repeatable read':仅读取事务开始之前提交的数据,无法读取未提交的数据以及在事务执行期间由其他并发事务提交的修改。
    • 'default':设置为default_transaction_isolation所设的隔离级别。
  • 当dbcompatibility='M'且m_format_dev_version = 's2'时,还可以设置为以下字符串,对空格敏感。
    • 'SERIALIZABLE'(与'serializable'效果相同):GaussDB目前功能上不支持此隔离级别,设置该隔离级别时,与'REPEATABLE-READ'效果相同。
    • 'READ-COMMITTED'(与'read committed'效果相同):仅读取已提交的事务的数据,无法读取到未提交的数据。
    • 'READ-UNCOMMITTED'(与'read uncommitted'效果相同):与'READ-COMMITTED'表现相同。
    • 'REPEATABLE-READ'(与'repeatable read'效果相同):仅读取事务开始之前提交的数据,无法读取未提交的数据以及在事务执行期间由其它并发事务提交的修改。

默认值:'default'。在PDB场景内,若未设置该参数,则继承来自全局的设置。

  • default_transaction_isolation参数使用默认值'read committed'。通常情况下,通过show transaction_isolation;命令查询的结果为'read committed'。
  • 当dbcompatibility='M'且m_format_dev_version = 's2'时,因此default_transaction_isolation参数使用默认值的情况下,通过show transaction_isolation;命令查询的结果为'READ-COMMITTED'。

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 当dbcompatibility='M'时,查询tx_isolation和查询transaction_isolation效果相同。
  • 当dbcompatibility='M'且m_format_dev_version = 's2'时,执行“SET [local|session|@@session.] transaction_isolation = value;”会修改会话级事务特性,即同时修改default_transaction_isolation参数值。
  • 当dbcompatibility='M'且m_format_dev_version = 's2'时,执行“SET @@transaction_isolation = value;”用来设置下一个事务的隔离级别,并且不允许在显式事务内使用;如果隐式事务报错,即单个SQL语句报错,继续保持下一个事务特性。

transaction_read_only

参数说明:设置当前事务是否为只读事务。对于开启的新事务,该参数在数据库恢复过程中或者在备机里,固定为on;否则在CDB里,固定为default_transaction_read_only的值。该参数可在PDB级别设置, 设置pdb_transaction_read_only后,以pdb_transaction_read_only的值为准。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示设置当前事务为只读事务。
  • off:表示设置当前事务为读写事务。

默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 当dbcompatibility='M'时,查询tx_read_only和查询transaction_read_only效果相同。
  • 当dbcompatibility='M'且m_format_dev_version = 's2'时,执行“SET [local|session|@@session.] transaction_read_only= value;”会修改会话级事务特性。即同时修改default_transaction_read_only参数值。
  • 当dbcompatibility='M'且m_format_dev_version = 's2'时,执行“SET @@transaction_read_only= value;”用来设置下一个事务的访问模式,并且不允许在显式事务内使用;如果隐式事务报错,即单个SQL语句报错,继续保持下一个事务特性。

autocommit

参数说明:是否开启自动提交模式。如果设置为on,会话为自动提交模式,每一个单独的语句都会被隐式提交。如果设置为off,则必须使用commit提交事务或使用rollback取消事务。如果autocommit从off修改为on,则对所有未完成的事务执行自动commit。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启自动提交模式。
  • off:表示关闭自动提交模式。

默认值:on

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置,不支持gs_guc工具设置此参数。

设置建议:推荐使用默认值。

设置不当的风险与影响:如果设置为off,事务中执行DDL或DCL时,不会自动提交。

  • 当dbcompatibility='M'时,支持修改该参数为off,否则只能设置为on。
  • GaussDB中,pg_settings视图不能查询该参数,可以通过“SHOW autocommit;”查看。
  • 使用autocommit参数,要求打开内部自动提交模式,可通过“\echo :AUTOCOMMIT”方式确认内部自动提交是否为打开状态。如果不是自动提交模式,使用“\set AUTOCOMMIT on”进行打开。

xc_maintenance_mode

参数说明:设置系统进入维护模式。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示进入维护模式。
  • off:表示不进入维护模式。

谨慎打开这个功能,避免引起数据库数据不一致。

默认值:off

设置方式:该参数属于SUSET类型参数,仅支持表2 GUC参数设置方式中的方式三进行设置。

设置建议:该参数一般供维护人员排查问题使用,不建议用户开启。

设置不当的风险与影响:修改该参数取值可能导致数据库出现意料之外的结果,请保持默认值。

allow_concurrent_tuple_update

参数说明:设置是否允许并发更新。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示允许并发更新。
  • off:表示不允许并发更新。

默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

transaction_deferrable

参数说明:指定是否允许一个只读串行事务延迟执行,使其不会执行失败。该参数设置为on时,当一个只读事务发现读取的元组正在被其他事务修改,则延迟该只读事务直到其他事务修改完成。该参数为预留参数,该版本不生效。该参数可在PDB级别设置。与该参数类似的有default_transaction_deferrable,用于指定一个事务是否允许延迟。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示允许执行。
  • off:表示不允许执行。

默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_show_any_tuples

参数说明:该参数只有在只读事务中可用,用于分析。当这个参数设置为on时,表中元组的所有版本都会可见。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示表中元组的所有版本都会可见。
  • off:表示表中元组的所有版本都不可见。

默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

在toast场景下,如果reindex前后均有DML操作(主要是insert+update或insert+delete),在reindex操作后,开启只读事务并打开该GUC参数,release版本下单独查询toast表或toast索引表历史数据正常,但是通过主表查询toast列历史数据会报错“missing chunk number xxx”。

replication_type

参数说明:标记当前部署模式是一主多备模式或单主机模式。

参数类型:整型

参数单位:

取值范围:0 ~ 3

  • 0 是预留参数。
  • 1 表示使用一主多备模式,全场景覆盖,推荐使用。
  • 2 表示使用单主机模式,此模式无法扩展备机。
  • 3 是预留参数。

默认值:1

设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。该参数是CM部署时使用的参数,用户不能对该参数进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

pgxc_node_name

参数说明指定节点名称。

在备机请求主机进行日志复制时,如果application_name参数没有被设置,那么pgxc_node_name参数会被用来作为备机在主机上的流复制槽名字。该流复制槽的命名方式为 "该参数值_备机ip_备机port"。其中,备机ip和备机port取自replconninfo参数中指定的备机ip和端口号。该流复制槽最大长度为61个字符,如果拼接后的字符串超过该长度,则会使用截断后的pgxc_node_name进行拼接,以保证流复制槽名字长度小于等于61个字符。

参数类型:字符串

参数单位:

取值范围:字符串

默认值:当前节点名称。

设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。

设置建议:不建议进行修改。

设置不当的风险与影响:修改后会导致连接数据库实例失败。

enable_defer_calculate_snapshot

参数说明:延迟计算快照的xmin和oldestxmin,执行1000个事务或者间隔1s才触发计算。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示延迟计算快照xmin和oldestxmin。
  • off:表示实时计算快照xmin和oldestxmin

默认值:on

设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:设置为on时可以在高负载场景下减少计算快照的开销,但是会导致oldestxmin推进较慢,影响垃圾元组回收。设置为off时xmin和oldestxmin可以实时推进,但是会增加计算快照时的开销。

seqscan_csn_cache_num

参数说明:此参数控制csn cache的大小,此cache只有在seqscan通过MVCC快照扫描heap表页面判断可见性会使用到。

参数类型:整型

参数单位:

取值范围:0 ~ 1000。参数值为0时,表示不使用csn缓存机制。

默认值:100

设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_interp_reuse_tran

参数说明:表示是否支持存储过程中嵌套异常块子事务复用,该功能只有在开启了behavior_compat_options参数的plstmt_implicit_savepoint选项后方能生效。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示存储过程支持嵌套异常块事务复用功能(需同时开启behavior_compat_options参数的plstmt_implicit_savepoint选项,此功能才能生效)。
  • off:表示存储过程不支持嵌套异常块事务复用功能。

默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

相关文档