PostgreSQL pending patch : pg_basebackup throttling, limit network transfer rate

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:
PostgreSQL 的一个限速补丁, 目前可以实现基础备份命令pg_basebackup的限速.

PostgreSQL 9.3beta2为例
安装补丁
root@db-172-16-3-33-> cd postgresql-9.3beta2
root@db-172-16-3-33-> wget http://www.postgresql.org/message-id/attachment/29732/backup_throttling.patch
root@db-172-16-3-33-> patch -p1 < ./backup_throttling.patch
root@db-172-16-3-33-> gmake && gmake install

pg_basebackup   新增-r选项.
root@db-172-16-3-33-> pg_basebackup --help
  -r, --max-rate         maximum transfer rate between server and client


[测试]
限速1MB/s (可以单位m, k)
pg93@db-172-16-3-39-> pg_basebackup -D $PGDATA -F p -x -P -v -h 172.16.3.33 -U postgres -r 1m
WARNING:  skipping special file "./.s.PGSQL.1999"
transaction log start point: 1/6F000028 on timeline 13
WARNING:  skipping special file "./.s.PGSQL.1999"/pg_root/pg_subtrans/0059)
207155/403043 kB (51%), 0/1 tablespace (...03/pg93/pg_root/base/16384/16385)


root@db-172-16-3-39-> sar -n DEV 5 10000|grep eth0
02:47:33 PM      eth0    752.00     58.00 1110626.40   7256.80      0.00      0.00      2.00
02:47:38 PM      eth0    663.20     57.40 972859.20   7505.00      0.00      0.00      1.80
02:47:43 PM      eth0    749.00     61.20 1107662.00   7462.00      0.00      0.00      1.60
02:47:48 PM      eth0    791.80     58.40 1170254.00   7282.80      0.00      0.00      1.60


[参考]
2.
+      <term><option>--max-rate</option></term>
+      <listitem>
+       <para>
+       The maximum amount of data transferred from server per second.
+       The purpose is to limit impact of
+       <application>pg_basebackup</application> on a running master server.
+       </para>
+       <para>
+       Suffixes <literal>k</literal> (kilobytes) and <literal>m</literal>
+       (megabytes) are accepted. For example: <literal>10m</literal>
+       </para>
+      </listitem>

3. 
root@db-172-16-3-33-> pg_basebackup --help
  -r, --max-rate         maximum transfer rate between server and client

4.
+/*
+ * If the progress is more than what max_rate allows, sleep.
+ *
+ * Do not call if max_rate == 0.
+ */
+static void
+enforce_max_rate()
+{
+       int64           min_elapsed,
+                               now,
+                               elapsed,
+                               to_sleep;
+
+       int64           last_chunk;
+
+       last_chunk = totaldone - last_measured;
+
+       /* The measurements shouldn't be more frequent then necessary. */
+       if (last_chunk < RATE_MIN_SAMPLE)
+               return;
+
+
+       now = localGetCurrentTimestamp();
+       elapsed = now - last_measured_time;
+
+       /*
+        * max_rate relates to seconds, thus the expression in brackets is
+        * milliseconds per byte.
+        */
+       min_elapsed = last_chunk * (USECS_PER_SEC / max_rate);
+
+       /*
+        * min_elapsed is the minimum time we must have spent to get here. If we
+        * spent less, let's wait.
+        */
+       to_sleep = min_elapsed - elapsed;
+       if (to_sleep > 0)
+               pg_usleep((long) to_sleep);
+
+       last_measured = totaldone;
+       last_measured_time = now + to_sleep;
+}
+

 /*
  * Write a piece of tar data
@@ -852,6 +977,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
                totaldone += r;
                if (showprogress)
                        progress_report(rownum, filename);
+               if (max_rate > 0)
+                       enforce_max_rate();
        }  

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1月前
|
关系型数据库 MySQL PostgreSQL
postgresql和mysql中的limit使用方法
postgresql和mysql中的limit使用方法
57 1
|
关系型数据库 PostgreSQL
|
SQL Oracle 关系型数据库
PostgreSQL JOIN limit 优化器 成本计算 改进 - mergejoin startup cost 优化
标签 PostgreSQL , join , limit , startup cost , cbo , 优化器改进 背景 PostgreSQL limit N的成本估算,是通过计算总成本A,以及估算得到的总记录数B得到: (N/B)*A 大概意思就是占比的方法计算 对于单表查询...
1230 0
|
关系型数据库 PostgreSQL
PostgreSQL sharding : citus 系列7 - topn 加速(count(*) group by order by count(*) desc limit x) (use 估值插件 topn)
标签 PostgreSQL , topn , topn.number_of_counters , count(*) group by order by count(*) desc limit x 背景 count(*) group by order by count(*) desc limit x 用来统计 topn。
1434 0
|
SQL 关系型数据库 PostgreSQL
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 7 章 查询_7.6. LIMIT和OFFSET
7.6. LIMIT和OFFSET LIMIT和OFFSET允许你只检索查询剩余部分产生的行的一部分: SELECT select_list FROM table_expression [ ORDER BY ... ] [ LIMIT { number | ALL } ] [ OFFSET number ] 如果给出了一个限制计数,那么会返回数量不超过该限制的行(但可能更少些,因为查询本身可能生成的行数就比较少)。
1317 0
|
关系型数据库 数据库 PostgreSQL