这个工具恐怕曾经施展到了极致! 在渣滓数据清算方面

  • 电脑网络维修
  • 2024-11-15

pg_squeeze 简介

它是一个 PostgreSQL 裁减,用于删除表中未经常使用的空间,并可选用依据特定索引对元组启动排序(就像在惯例读/写运转的同时,口头CLUSTER命令一样)。理想上,pg_squeeze 试图用来交流pg_repack裁减。

虽然提供的性能十分相似,但pg_squeeze驳回了不同的方法:

1. 齐全在服务端成功性能。

2. 应用 PostgreSQL 数据库主机最新提供的才干。

与同时经常使用了服务端和客户端代码的pg_repack相比,(1) 不只简化了性能和经常使用,还可以经常使用后盾上班进程顺利成功智能化解决。

至于 (2),除了经常使用后盾上班进程,一个关键的区别是,咱们经常使用逻辑解码而不是触发器来捕捉并发的修正。

注销表启动惯例解决

首先,确保您的表具备主键或惟一解放。这是在pg_squeeze上班时解决其余事务或许启动的更改所必需的。

要让pg_squeeze裁减知道该表,须要在squeeze.tables表中拔出一条记载。在参与后,它会活期审核表上的统计消息。只需表满足"收缩"规范,就会向队列中参与一个"义务"。义务会依照创立的顺序依次解决。

最便捷的"注销"是这样的:

  squeeze tabschema tabname schedule       

还可以选用指定其余的列,例如:

  squeeze tabschematabnameschedulefree_space_extravacuum_max_agemax_retry

以下是表的元数据的完整描画。

•tabschema和tabname区分是形式名和表名。

•schedule列会指定什么时刻应该对表启动审核,并或许启动收缩。schedule 由上方的复合数据类型的值来描画,相似于一个 crontab 条目:

  schedule  minuteshoursdays_of_month dommonthsdays_of_weekdow

在这里,minutes(0-59)和hours(0-23)指定了一天内的审核时期,而days_of_month(1-31)、months(1-12)和days_of_week(0-7,其中 0 和 7 都代表星期日)则选择了审核的日期。假设minute、hour和month都与时期戳相婚配,则会口头审核,而 NULL 值区分示意恣意分钟、小时和月份。至于days_of_month和days_of_week,须要至少有一个与时期戳婚配,或许两个都为 NULL,才干启动审核。例如,上方的条目通知咱们,应在每周三和周五的 22:30 审核表public.bar。

•free_space_extra是触宣布解决所需的extra free space的最小百分比。extra描画词指的是,从fillfactor失掉的闲暇空间,并不会触宣布的收缩。例如,假设fillfactor等于 60,那么在反常运转时期,每个页面至少应有 40% 的空间是可用的。假设要让 pg_squeeze 解决到表的可用空间能到达 70%,可将free_space_extra设置为 30(即 70% 的可用空间减去因fillfactor而发生的 40% 可用空间)。free_space_extra的自动值为 50。

•min_size是表必需占用的最小磁盘空间(以 MB 为单位)。自动值为 8。

•vacuum_max_age是自上一次性 VACUUM 成功后,以为闲暇空间映射表(FSM)已清算的最长时期。一旦过了这个时时期隔,死元组的比例或许会很大,因此须要破费比便捷审核 FSM 更多的精神,来评价pg_squeeze的潜在影响 。自动值为 1 小时。

•max_retry是在相应义务第一次性解决失败后,额外尝试收缩表的最大次数。重试解决的典型要素是在收缩表时,表定义出现了更改。假设到达重试次数,则以为表的解决曾经成功。一旦抵达下一个预约时期,就会立刻创立下一个义务。max_retry的自动值为 0(即不重试)。

•clustering_index是解决过的表的现有索引。解决成功后,表中的元组将依据该索引的键启生物理排序。

•rel_tablespace是表应移动到的现有表空间。NULL 示意表应留在原处。

•ind_tablespaces是一个二维数组,其中每一行都指定了索引的表空间映射。第一列和第二列区分代表索引称号和表空间称号。一切未指定映射的索引都将保管在原来的表空间中。对于表空间,有一种不凡状况值得一提:假设为表指定了表空间,但没有为索引指定表空间,则表会被移动到该表空间,但索引会保管在原来的表空间(也就是说,表的表空间不是索引的自动表空间)。

•skip_analyze示意在表解决之后不应口头 ANALYZE 命令。自动值为false,示意自动口头 ANALYZE。

squeeze.table是用户惟一应该修正的表。假设您想修正其余表,请确保您齐全明确自己在做什么。

对任何表启动暂时解决

也可以在不注销的状况下手动收缩表(即无需在squeeze.tables中拔出相应的记载),并且无需事前审核实践收缩的状况。

函数签名:

squeezesqueeze_tabletabchema nametabname nameclustering_index namerel_tablespace nameind_tablespaces name

口头样例:

 squeezesqueeze_table 

启用/禁用表的解决

要解决收缩的表,请以超级用户运转此语句:

 squeezestart_worker

该函数会启动一个后盾上班进程(scheduler worker),活期审核有哪些已注销的表须要启动收缩审核,并为每个表创立一个义务。只需特定数据库存在义务,就会启动另一个上班进程(squeeze worker)。

假设数据库已在运转scheduler worker,函数不会报错,但新的上班进程会立刻分开。

假设有上班进程正在数据库中运转,可以经常使用上方语句中止它们:

 squeezestop_worker

只要本文档中提到的函数才应视为用户接口。假设您想调用其余函数,请确保您齐全明确自己在做什么。

假设宿愿后盾上班进程在整个 PostgreSQL 实例启动时智能启动,请在postgresql.conf文件中参与如下条目:

squeezeworker_autostart  squeezeworker_role  postgres

下次启动实例时,将为my_database启动两个或多个上班进程(即一个scheduler worker,和一个或多个squeeze workers),并为your_database启动雷同的上班进程。请留意,假设您驳回这种方法并满足上方任一条件,任何上班进程都会拒绝启动,或许中止而不做任何上班:

1.pg_squeeze裁减不存在于数据库中,或

2.squeeze.worker_role参数指定了不具备超级用户权限的角色。

虽然实践上有两个上班进程,但上述函数/性能变量经常使用了复数方式的worker。这是由于在以前的 pg_squeeze 版本中只要一个上班进程,它同时担任义务的调度和口头。在更新环节中,强迫一切用户调整性能文件或许并不值得。

控制对其余后端进程的影响

虽然被收缩的表在大局部时期里都可以被其余事务读写,但它在成功解决时须要失掉排他锁。假设 pg_squeeze 偶然看下来阻塞了对表的访问,可以思考设置 GUC 参数squeeze.max_xlock_time。例如:

 squeezemax_xlock_time  

设置排他锁的坚持时期不应超越 0.1 秒(100 毫秒)。假设最后阶段须要更多时期,pg_squeeze 会监禁排他锁,解决两边其余事务提交的更改,并再次尝试最后阶段。假设再次超越锁的继续时期,就会报错。假设出现这种状况,要么参与设置,要么将解决疑问表的时期布置在写入优惠较少的另一天。

每个数据库运转多个上班进程

假设以为单个收缩上班进程不可接待负载,可思考将squeeze.workers_per_database性能变量的值设置为大于 1。这样,pg_squeeze裁减就能同时解决多个表,每个收缩上班进程解决一个表。不过,请留意这一设置会影响一切经常使用pg_squeeze裁减的数据库。实例中一切收缩上班进程(包括"调度上班进程")的总数,不能超越内核性能变量max_worker_processes。

监控

•squeeze.log表中,每个成功收缩的表都会蕴含一个条目。tabschema和tabname这两列标识解决的表。started和finished这两列标识解决的开局和成功时期。ins_initial是在 "初始加载阶段 "拔出到新表存储中的元组数,即解决开局前表中存在的元组数。另一方面,ins、upd和del是在表解决环节中由运行程序拔出、更新和删除的元组数。(这些 "并发的数据更改" 也必需合入收缩的表,否则就会失落数据)。

•squeeze.errors表中蕴含了收缩环节中出现的失误。此处报告的一个经常出现疑问是,有人更改了正在启动解决的表的定义(如参与或删除列)。

•squeeze.get_active_workers()函数前往一个收缩上班进程的表,这些收缩上班进程正在数据库中解决表。pid列蕴含了上班进程的系统 PID。其余列的含意与squeeze.log表中的对应列相反。squeeze.log表只显示已成功的收缩操作消息,而squeeze.get_active_workers()函数则可让您审核解决环节中的进展。

敞开注销表

假设不再须要对特定表启动活期收缩,只需从squeeze.tables表中删除相应行即可。

虽而后盾上班进程会活期敞开注销不存在的表,但敞开注销要删除的表也是一种好的做法。

并发性

1. 该裁减在解决的某些阶段并不阻止其余事务更改表。假设一个 "破坏性命令"(即ALTER TABLE,VACUUM FULL,CLUSTER或TRUNCATE)在收缩成功前提交,squeeze_table()函数就会中止,对表的一切更改都会回滚。squeeze.tables表的max_retry列选择了收缩上班进程重试的次数。此外,更改调度时期也可以防止终止。

2.与pg_repack一样,pg_squeeze也会扭转行的可见性,从而准许出现MVCC 提示第一段中描画的 MVCC 不安保行为。

磁盘空间要求

口头全表收缩所需的可用磁盘空间,大约是指标表及其索引的两倍。例如,假设要收缩的表和索引的总大小为 1GB,则须要额外的 2GB 磁盘空间。

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8827.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号