gaussdb 数据库参数说明【预写日志设置、检查点、归档】【04】

1. 预写日志

WAL预写式日志写入方式相关参数的设置。

wal_level
参数说明:设置写入WAL信息量的多少。

注意:

  • 如果需要启用WAL日志归档和主备机的数据流复制,必须将此参数设置为archive或者hot_standby。
  • 如果此参数设置为archive,hot_standby必须设置为off,否则将导致数据库无法启动。

取值范围:枚举类型

  • 默认值:hot_standby

  • minimal
    优点:一些重要操作(包括创建表、创建索引、簇操作和表的复制)都能安全的跳过,这样就可以使操作变得更快。
    缺点:WAL仅提供从数据库服务器崩溃或者紧急关闭状态恢复时所需要的基本信息,无法用WAL归档日志恢复数据。

  • archive(可单机恢复
    这个参数增加了WAL归档需要的日志信息,从而可以支持数据库的归档恢复。

  • hot_standby(可复制同步
    这个参数进一步增加了在备机上运行的SQL查询的信息,这个参数只能在数据库服务重新启动后生效。为了在备机上开启只读查询,wal_level必须在主机上设置成hot_standby ,并且备机必须打开hot_standby参数。hot_standby和archive级别之间的性能只有微小的差异,如果它们的设置对产品的影响产生明显对比,欢迎反馈给我们。

fsync(磁盘有缓存)
参数说明:设置GaussDB服务器是否使用fsync()系统调用(可参考wal_sync_method参数设置)确保数据的更新及时写入物理磁盘中。

注意:

  • 使用fsync()系统调用可以保证在操作系统或者硬件崩溃的情况下将数据恢复到一个一致的状态。
  • 如果将此参数关闭,可能会在系统崩溃时无法恢复原来的数据,导致数据库不可用。

取值范围:布尔型

  • on表示使用fsync()系统调用。
  • off表示不使用fsync()系统调用。
  • 默认值:on

synchronous_commit
参数说明:设置当前事务的同步状态。

取值范围:枚举类型

  • on 表示将备机的同步日志刷新到磁盘。
  • off 表示异步提交。
  • local表示为本地提交。
  • remote_write表示要备机的同步日志写到磁盘。
  • remote_receive表示要备机同步日志接收数据。
  • 默认值:on

wal_sync_method
参数说明:设置向磁盘强制更新WAL数据的方法。

注意:
如果将fsync关闭,这个参数的设置就没有意义,因为所有数据更新都不会强制写入磁盘。

取值范围:字符串

  • open_datasync 表示用带O_DSYNC选项的open()打开WAL文件。
  • fdatasync 表示每次提交的时候都调用fdatasync()。(支持suse10和suse11)
  • fsync_writethrough 表示每次提交的时候调用fsync()强制把缓冲区任何数据写入磁盘。
  • fsync 表示每次提交的时候调用fsync()。(支持suse10和suse11)
  • open_sync 表示用带O_SYNC选项的open()写WAL文件。(支持suse10和suse11)
  • 默认值:fdatasync

full_page_writes
参数说明:设置GaussDB服务器在检查点之后对页面的第一次修改时,是否将每个磁盘页面的全部内容写到WAL日志中。

注意:

  • 设置这个参数是因为在操作系统崩溃过程中可能磁盘页面只写入了一部分内容,从而导致在同一个页面中包含新旧数据的混合。在崩溃后的恢复期间,由于在WAL日志中存储的行变化信息不够完整,因此无法完全恢复该页。把完整的页面影像保存下来就可以保证页面被正确还原,代价是增加了写入WAL日志的数据量。
  • 关闭此参数,在系统崩溃的时候,可能无法恢复原来的数据。如果服务器硬件的特质(比如电池供电的磁盘控制器)可以减小部分页面的写入风险,或者文件系统特性支持(比如ReiserFS 4),并且您清楚知道写入风险在一个可以接受的范畴,您可以关闭这个参数。

取值范围:布尔型

  • on 表示启用此特性。
  • off 表示关闭此特性。
  • 默认值:on

wal_buffers
参数说明:设置用于存放WAL数据的共享内存空间的大小。

注意:

  • 每次事务提交时,WAL缓冲区的内容都写入到磁盘中,因此设置为很大的值不会带来明显的性能提升。如果将它设置成几百兆,就可以在有很多即时事务提交的服务器上提高写入磁盘的性能。根据经验来说,默认值可以满足大多数的情况。

取值范围:整型(kB)

  • 建议取值大于64kB,小于WAL段大小(默认是16MB)。
  • 如果取值不等于64kB,并且小于32kB,则自动取值为32kB。
  • 默认值:-1MB

wal_writer_delay
参数说明:WalWriter进程的写间隔时间。

注意:

  • 如果时间过长可能造成WAL缓冲区的内存不足,时间过短会引起WAL不断写入,增加磁盘I/O负担。

取值范围:

  • 整型, 1~10000(毫秒)
  • 默认值:200ms

commit_delay
参数说明:表示一个已经提交的数据在WAL缓冲区中存放的时间。

注意:

  • 设置为非 0 值时事务执行commit后不会立即写入WAL中,而仍存放在WAL缓冲区中,等待WalWriter进程周期性写入磁盘。
  • 如果系统负载很高,在延迟时间内,其他事务可能已经准备好提交。但如果没有事务准备提交,这个延迟就是在浪费时间。

取值范围:

  • 整型, 0~100000(微秒)
  • 默认值:0,表示无延迟。

commit_siblings
参数说明:当一个事务发出提交请求时,如果数据库中正在执行的事务数量大于此参数的值,则该事务将等待一段时间(commit_delay的值),否则该事务则直接写入WAL。

取值范围:

  • 整型, 0~1000
  • 默认值:5

2. 检查点

WAL预写式日志检查点相关参数的设置。

checkpoint_segments(通用)
参数说明:设置自动WAL检查点之间的最大的日志文件段数目(每个段16MB)。

取值范围:

  • 整型(最小值1)
  • 默认值:3,表示每次最多checkpoint16个segments,每个segment大小为16MB。

checkpoint_timeout(全量检查点)
参数说明:设置自动WAL检查点之间的最长时间。

取值范围:

  • 整型, 30~3600(秒)
  • 默认值:5min

checkpoint_completion_target(全量检查点)
参数说明:指定检查点完成的目标。

取值范围:

  • 0.0~1.0
  • 默认值:0.5,每个checkpoint需要在checkpoints间隔时间的50%内完成。

checkpoint_warning(通用)
参数说明:如果由于填充检查点段文件导致检查点发生的时间间隔接近这个参数表示的秒数,就向服务器日志发送一个建议增加 checkpoint_segments 值的消息。

取值范围:

  • 整型(秒)
  • 默认值:30s,0s表示关闭警告。

3. 归档

WAL预写式日志归档的相关参数的设置。

archive_mode
参数说明:表示是否进行归档操作。

注意:

  • 当wal_level设置成minimal时,archive_mode参数无法使用。

取值范围: 布尔值

  • on 表示进行归档。
  • off 表示不进行归档。
  • 默认值:off

archive_command
参数说明:由管理员设置的用于归档WAL日志的命令,建议归档路径为绝对路径。

注意:

  • 字符串中任何%p都被要归档的文件的绝对路径代替,而任何%f都只被该文件名代替(相对路径都相对于数据目录的)。如果您需要在命令里嵌入%字符就必须双写%%。
  • 这个命令当且仅当成功的时候才返回零。示例如下:
archive_command = 'cp --remove-destination %p /mnt/server/archivedir/%f' 
archive_command = 'copy %p /mnt/server/archivedir/%f'  # Windows
  • -P参数(大写P)作用为:保留源文件或目录的属性;–remove-destination选项作用为:拷贝前如果目标文件已存在,会先删除已存在的目标文件,然后执行拷贝操作。
  • 如果归档路径中使用了环境变量,而该环境变量的取值是一个含有特殊字符的路径值,建议用户将环境变量使用双引号括起来,否则会导致归档功能失效。如果路径值不含有特殊字符,可以不使用双引号。
    如归档命令如下所示:
archive_command = 'cp -P --remove-destination %p $GAUSSHOME/archive/\%f'

      其中的$GAUSSHOME的值为:

echo $GAUSSHOME
/home/luo/test archive/
  • 此时的路径值中含有空格,这样会导致归档功能失效。对于此类的情况,建议将$GAUSSHOEM使用双引号括起来,即使用以下格式:
archive_command = 'cp -P --remove-destination %p \"$GAUSSHOME\"/archive/%f'

取值范围:

  • 字符串
  • 默认值:‘cp --remove-destination %p “$GAUSSHOME”/archive/%f’

archive_timeout
参数说明:表示归档周期。

注意:

  • 超过该参数设定的时间时强制切换WAL段。
  • 由于强制切换而提早关闭的归档文件仍然与完整的归档文件长度相同。因此,将archive_timeout设为很小的值将导致占用巨大的归档存储空间,建议将archive_timeout设置为60秒。

取值范围:

  • 整型
  • 默认值:0,表示禁用该功能。

archive_clean
参数说明:控制归档模式下,是否开启归档清理功能。

取值范围:布尔值

  • on表示开启归档清理。
  • off表示不进行归档清理。
  • 默认值:on

max_archive_size(也可设置定时任务按天清除等等)
参数说明:当进行归档清理时,此参数设置归档目录的大小限制。当剩余空间不足以归档下一个WAL日志文件时,会删除最旧的日志文件以保证可以继续归档。

注意:

  • 当此参数设置的值小于一个WAL文件大小时会停止归档。

取值范围:

  • 整型,最小值为0KB
  • 默认值:300MB

enable_minrecovery_check
参数说明:设置为 on,启动时当数据恢复位置早于最小恢复点,则禁止数据库启动。

  • 设置为 on 能够最大限度地保证数据库的数据一致性。但在用户希望忽略数据不一致时,设置为 off 能够使得数据库正常启动。

说明:

  • 当数据库异常停止时,可能会发生已记录WAL日志,但是数据还未持久化到磁盘的情况。最小恢复点特性可以检查出WAL日志和持久化到磁盘的数据的不一致性,并提示用户进行处理。

取值范围:

  • 布尔型
  • 默认值:on
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现GaussDB数据库的主从同步,可以使用Python编一个脚本来完成。下面是一个可能的实现示例: ```python import psycopg2 import psycopg2.extensions def sync_master_slave(master_conn, slave_conn): master_conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) slave_conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) # 获取主库的最新LSN(Log Sequence Number) master_cur = master_conn.cursor() master_cur.execute("SELECT pg_current_wal_lsn()") lsn = master_cur.fetchone()[0] master_cur.close() # 设置从库的同步位置为主库的LSN slave_cur = slave_conn.cursor() slave_cur.execute(f"SELECT pg_stat_replication.sync_replication_slot('{slot_name}', '{lsn}')") slave_cur.close() # 开始流复制 slave_cur = slave_conn.cursor() slave_cur.execute("START_REPLICATION SLOT {slot_name}") slave_conn.commit() slave_cur.close() # 监听从库的状态变化 while True: slave_conn.poll() if slave_conn.notifies: for notify in slave_conn.notifies: if notify.channel == 'state_change' and notify.payload == 'STREAMING': print("从库同步完成") return if __name__ == '__main__': master_conn = psycopg2.connect(dbname='master_db', user='username', password='password', host='master_host') slave_conn = psycopg2.connect(dbname='slave_db', user='username', password='password', host='slave_host') sync_master_slave(master_conn, slave_conn) ``` 在这个示例中,我们使用psycopg2库来连接主库和从库,并进行数据库操作。首先,我们获取主库的最新LSN,然后将从库的同步位置设置为主库的LSN。接下来,我们通过流复制启动从库的同步,最后监听从库的状态变化,直到同步完成。 请注意,这只是一个简单的示例,实际的实现可能会根据具体需求和数据库版本有所不同。同时,还需要根据实际情况进行错误处理、日志记录等操作来保证同步的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值