【PGCCC】commit_delay 对性能的提升:PostgreSQL 基准测试

在这里插入图片描述

通过禁用参数可以来调整事务工作负载synchronous_commit。该措施有惊人效果。但在操作系统崩溃期间丢失已提交事务的可能性使其成为许多应用程序无法启动的因素。因此我决定写下来。

WAL 刷新是事务数据库工作负载的瓶颈

为了确保已提交的事务不会丢失,PostgreSQL 必须确保事务的WAL已刷新到磁盘,然后才能向客户端报告成功。如果数据库工作负载主要由小数据修改组成,则这些事务产生的IOPS可能会使磁盘饱和,即使写入的数据量适中。

参数对commit_delay可以commit_siblings通过减少这些 WAL 刷新所需的 IOPS 数量来缓解瓶颈。

commit_delay和如何commit_siblings工作?

您可以通过将其设置为大于零的值来激活该功能commit_delay。每当事务在提交期间达到将 WAL 刷新到磁盘的点时,它首先检查当前有多少其他事务处于活动状态。如果至少有其他commit_siblings事务处于打开状态并且没有等待锁定,PostgreSQL 不会立即刷新 WAL,而是等待commit_delay几微秒。经过该延迟后,其他一些事务可能已达到准备刷新 WAL 的点。然后,所有这些后端都可以在单个 I/O 操作中执行其 WAL 刷新。

commit_delay调整起来并不容易,因为延迟会使事务耗时更长。另一方面,如果选择的值太低,则在延迟过去时可能没有其他事务准备就绪,并且您无法减少执行的 IOPS 数量。

commit_delay基准设置

基准测试在我的 ASUS ZenBook UX433F 笔记本上运行,该笔记本具有本地 NVME 磁盘、8 个 CPU 核心和 16GB RAM。我设置了sh

# global settings pid_dir: '~/.pg_chameleon/pid/' log_dir: '~/.pg_chameleon/logs/' log_dest: file log_level: info log_days_keep: 10 rollbar_key: '' rollbar_env: '' dump_json: No alert_log_collection_enable: false alert_log_kafka_server: 127.0.0.1:9092 alert_log_kafka_topic: my_log # type_override allows the user to override the default type conversion # into a different one. type_override: # "tinyint(1)": # override_to: boolean # override_tables: # - "*" # specify the compress properties when creating tables compress_properties: compresstype: 0 compress_level: 0 compress_chunk_size: 4096 compress_prealloc_chunks: 0 compress_byte_convert: false compress_diff_convert: false # postgres destination connection pg_conn: host: "localhost" port: "5432" user: "usr_replica" password: "never_commit_passwords" database: "db_replica" charset: "utf8" params: # maintenance_work_mem: "1G" # param1: value1 # param2: value2 sources: mysql: readers: 4 writers: 4 retry: 3 db_conn: host: "localhost" port: "3306" user: "usr_replica" password: "never_commit_passwords" charset: 'utf8' connect_timeout: 10 schema_mappings: delphis_mediterranea: loxodonta_africana limit_tables: - delphis_mediterranea.foo skip_tables: - delphis_mediterranea.bar enable_compress: No compress_tables: - delphis_mediterranea.foo grant_select_to: - usr_readonly lock_timeout: "120s" my_server_id: 100 replica_batch_size: 10000 replay_max_rows: 10000 batch_retention: '1 day' copy_max_memory: "300M" copy_mode: 'file' out_dir: /tmp csv_dir: /tmp contain_columns: No column_split: ',' sleep_loop: 1 on_error_replay: continue on_error_read: continue auto_maintenance: "disabled" index_parallel_workers: 2 gtid_enable: false type: mysql skip_events: insert: - delphis_mediterranea.foo # skips inserts on delphis_mediterranea.foo delete: - delphis_mediterranea # skips deletes on schema delphis_mediterranea update: keep_existing_schema: No migrate_default_value: Yes mysql_restart_config: No is_create_index: Yes index_dir: '~/.pg_chameleon/index/' is_skip_completed_tables: No with_datacheck: No slice_size: 100000 csv_files_threshold: csv_dir_space_threshold:
最新发布
07-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值