diff --git a/src/bin/gs_guc/cluster_guc.conf b/src/bin/gs_guc/cluster_guc.conf index 99783a6e873476a7f5e6fd30ab79f41055ac57bb..3047d8e15a5ee8fda5e16fb27a42e0c0b9082b1e 100755 --- a/src/bin/gs_guc/cluster_guc.conf +++ b/src/bin/gs_guc/cluster_guc.conf @@ -808,6 +808,7 @@ ss_fi_process_fault_entries|string|0,0|NULL|NULL| ss_fi_custom_fault_entries|string|0,0|NULL|NULL| ss_ondemand_recovery_mem_size|int|1048576,104857600|kB|NULL| ss_recv_msg_pool_size|int|32768,1048576|kB|NULL| +ss_drc_mem_max_size|int|131072,1073741824|kB|NULL| ss_interconnect_type|string|0,0|NULL|NULL| ss_log_level|int|0,887|NULL|NULL| ss_log_backup_file_count|int|0,1024|NULL|NULL| diff --git a/src/common/backend/utils/misc/guc/guc_storage.cpp b/src/common/backend/utils/misc/guc/guc_storage.cpp index 8cbd43d24f81d4d7b5b861c280f0f777d132a556..01d2a2a22bcc7f8fd7cd481df471592851ccdfd7 100755 --- a/src/common/backend/utils/misc/guc/guc_storage.cpp +++ b/src/common/backend/utils/misc/guc/guc_storage.cpp @@ -4038,6 +4038,20 @@ static void InitStorageConfigureNamesInt() NULL, NULL, NULL}, + {{"ss_drc_mem_max_size", + PGC_POSTMASTER, + NODE_SINGLENODE, + SHARED_STORAGE_OPTIONS, + gettext_noop("Sets the ss drc max memory size (KB)"), + NULL, + GUC_SUPERUSER_ONLY | GUC_UNIT_KB}, + &g_instance.attr.attr_storage.dms_attr.drc_max_mem_size, + 128 * 1024, + 128 * 1024, + 1024 * 1024 * 1024, + NULL, + NULL, + NULL}, {{"ss_scrlock_server_port", PGC_POSTMASTER, NODE_SINGLENODE, diff --git a/src/common/backend/utils/misc/postgresql_single.conf.sample b/src/common/backend/utils/misc/postgresql_single.conf.sample index 8c0bcf1013a2b7bf47b82470bfcd19f8591f212e..8042fddf87f88b156b73a83863625b54d7a10522 100644 --- a/src/common/backend/utils/misc/postgresql_single.conf.sample +++ b/src/common/backend/utils/misc/postgresql_single.conf.sample @@ -852,6 +852,7 @@ job_queue_processes = 10 # Number of concurrent jobs, optional: [0..1000] #ss_fi_process_fault_prob = 10 #ss_fi_custom_fault_param = 3000 #ss_recv_msg_pool_size = 64MB +#ss_drc_mem_max_size = 128MB #ss_interconnect_type = 'TCP' #ss_interconnect_url = '0:127.0.0.1:1611' #ss_rdma_work_config = '' diff --git a/src/gausskernel/ddes/adapter/ss_init.cpp b/src/gausskernel/ddes/adapter/ss_init.cpp index fed7e69ad43f4f84f4ab4947a1bfe29e38129297..c98144b427fd21774f9c278250586c514183ebd5 100644 --- a/src/gausskernel/ddes/adapter/ss_init.cpp +++ b/src/gausskernel/ddes/adapter/ss_init.cpp @@ -420,6 +420,12 @@ static void setDMSProfile(dms_profile_t* profile) profile->parallel_thread_num = dms_attr->parallel_thread_num; profile->max_wait_time = DMS_MSG_MAX_WAIT_TIME; profile->spin_sleep_time_nsec = SS_SPIN_WAIT_TIME; + unsigned long long drc_limited_min_size = SSCalcDrcMinMemSize(profile->data_buffer_size); + if (dms_attr->drc_max_mem_size >= drc_limited_min_size) { + profile->drc_buf_size = dms_attr->drc_max_mem_size; + } else { + profile->drc_buf_size = drc_limited_min_size; + } if (dms_attr->enable_ssl && g_instance.attr.attr_security.EnableSSL) { InitDmsSSL(); diff --git a/src/include/ddes/dms/ss_common_attr.h b/src/include/ddes/dms/ss_common_attr.h index 3fa19ae6770e9c07e17b04a4ccbdb315a056aeb8..5b53d969f72a7054d6c73759fa880e8bb0925192 100644 --- a/src/include/ddes/dms/ss_common_attr.h +++ b/src/include/ddes/dms/ss_common_attr.h @@ -159,6 +159,7 @@ #define SS_REFORM_WAIT_TIME (5000) // 5ms #define SS_WAIT_TIME (20*10000000) // 200s #define SS_SPIN_WAIT_TIME (200000) // ns +#define SSCalcDrcMinMemSize(a) ((a * 11) / 320 + 131072) /* length of segment filename like '/1' */ #define SEG_MAINFORK_FILENAME_LEN 2 diff --git a/src/include/knl/knl_guc/knl_instance_attr_storage.h b/src/include/knl/knl_guc/knl_instance_attr_storage.h index 741a31089edd8aec6280cdb62f3764db961cb774..7c2393de8515d4759ce5db1332f22326dbd8f081 100755 --- a/src/include/knl/knl_guc/knl_instance_attr_storage.h +++ b/src/include/knl/knl_guc/knl_instance_attr_storage.h @@ -140,6 +140,7 @@ typedef struct knl_instance_attr_dms { int32 work_thread_pool_max_cnt; bool enable_dyn_trace; bool enable_reform_trace; + int drc_max_mem_size; } knl_instance_attr_dms; typedef struct knl_instance_attr_storage { diff --git a/src/test/regress/output/recovery_2pc_tools.source b/src/test/regress/output/recovery_2pc_tools.source index bb748b5637455637524fb79505932aa511887fd7..0cf84d5a0f0c50d2af69701cbaed91525c8f7346 100644 --- a/src/test/regress/output/recovery_2pc_tools.source +++ b/src/test/regress/output/recovery_2pc_tools.source @@ -683,6 +683,7 @@ select name,vartype,unit,min_val,max_val from pg_settings where name <> 'qunit_c ss_parallel_thread_count | integer | | 0 | 64 ss_rdma_work_config | string | | | ss_recv_msg_pool_size | integer | kB | 32768 | 1048576 + ss_drc_mem_max_size | integer | kB | 131072 | 1073741824 ss_scrlock_server_bind_core | string | | | ss_scrlock_server_port | integer | | 0 | 65535 ss_scrlock_worker_bind_core | string | | |