标签:VBA 自Excel 2010发布以来,已经具备删除工作表中重复行的功能,如下图1所示,即功能区“数据”选项卡“数据工具——删除重复值”。...图1 使用VBA,可以自动执行这样的操作,删除工作表所有数据列中的重复行,或者指定列的重复行。 下面的Excel VBA代码,用于删除特定工作表所有列中的所有重复行。...如果没有标题行,则删除代码后面的部分。...如果只想删除指定列(例如第1、2、3列)中的重复项,那么可以使用下面的代码: Sub DeDupeColSpecific() Cells.RemoveDuplicates Columns:=Array...(1, 2, 3), Header:=xlYes End Sub 可以修改代码中代表列的数字,以删除你想要的列中的重复行。
注意: 因为一个页是8K,如果一个表的列中可能存储相当大的项,那么该表就会有个与之相关联的TOAST表, 它用于存储无法保留在在表行中的域值的线外存储。 参考68.2. TOAST。...2、物理存储结构 每个表每8K分一页,行数据存在页中 -- 查询表页数、行数 SELECT relpages as 页个数, reltuples as 行个数 FROM pg_class WHERE...line pointer(s) – 一个行指针有 4 个字节长,并保存一个指向每个堆元组的指针。它也称为项目指针。 行指针组成一个简单的数组,起到元组索引的作用。...pd_lower, pd_upper – pd_lower 指向行尾指针,pd_upper 指向最新堆元组的开头。 pd_special – 此变量用于索引。在表中的页面中,它指向页面的末尾。...其他影响: 1、主从即便有延迟,也是跑数数据没有及时生成,只要延迟不高,影响则不大。 2、系统变复杂,易维护性降低。
此时数据库中被修改的数据行有两个‘版本’,第一个版本是数据行修改前的版本,第二个版本是数据行修改后的版本, 在读提交的场景下,重新启动新会话(txid=101),查询tbl表中的数据,数据库会先返回A元组...频繁更新或删除操作影响 接下来看一个例子,感受死元组对性能的影响: 建表并插入200万条数据: postgres=> create table t_mvcc(id int primary key,val...('t_mvcc')); pg_size_pretty ---------------- 1859 MB (1 row) 往表里insert4000万数据,delete删除2000万,删除数据后表大小并没有改变...原因是删除数据只在数据行上打上标识,并没有做真正的删除,真正的清理死元组操作依赖vacuum进程完成。...合理使用vacuum参数会对性能起到非常重要影响,之后的文档中聊一聊autovacuum优化典型案例。 在你的业务场景中有没有类似的场景呢?如果有,会怎么优化?
下面整理的都是一些比较有用的系统信息函数,有需要的可以收藏一下,以备不时之需。...查看当前日志文件lsn位置: select pg_current_xlog_location(); select pg_current_wal_lsn(); 当前xlog buffer中的insert位置...pg_xlogfile_name(lsn); select pg_walfile_name(lsn); 查看某个lsn在日志中的偏移量: select pg_xlogfile_name_offset('...gen_random_uuid(); 重载配置文件信息: select pg_reload_conf(); 查看数据库启动时间: select pg_postmaster_start_time(); 查看用户表、...: select pg_relation_size(); select pg_table_size(); select pg_total_relation_size(); 物理、逻辑复制槽: pg_create
SQL DELETE 语句 SQL DELETE 语句用于删除表中的现有记录。 DELETE 语法 DELETE FROM 表名 WHERE 条件; 注意:在删除表中的记录时要小心!...请注意DELETE语句中的WHERE子句。WHERE子句指定应删除哪些记录。如果省略WHERE子句,将会删除表中的所有记录!...可以在不删除表的情况下删除表中的所有行。...这意味着表结构、属性和索引将保持不变: DELETE FROM 表名; 以下 SQL 语句将删除 "Customers" 表中的所有行,而不删除表: DELETE FROM Customers; 删除表...要完全删除表,请使用DROP TABLE语句: 删除 Customers 表: DROP TABLE Customers; SQL TOP、LIMIT、FETCH FIRST 或 ROWNUM 子句
txids 的功能注解: PostgreSQL 的 MVCC 事务的实现是依赖于比较事务ID XID 的数字来完成的,这里插入的行版本信息XID要大于当前的行事务XID ,并且当前的XID 信息在未来是不应该被可见的...针对冻结过期的事务的ID的问题,扫描堆表和真空堆表的过程是必须的,但是真空索引和截断heap并不包含在操作内。因此在回收 transaction id 的过程中,跳过上面的提到的步骤是有益的。...对于大表并且附带多个索引的问题,这里会牵扯到对索引的处理中花费更多的时间在索引的处理中的部分,如果能跳过这个阶段,则VACUUM 的时间将会大大缩短。...的表,进行索引重建 (注:这点我觉得也有问题,可以分析索引的碎片率在对部分索引进行重建) 5 在此验证操作后,事务ID 的使用的水平线是否降低 注意:尽管vacuum 操作不会引起DOWN机时间...80% ,则说明需要对这个数据库进行必要的 vacumming 去回收 事务ID , 当然这样的表很可能已经在 AUTOVACUUM 的工作中 下面的一些后续的操作和分析的步骤 选择那些表正在进行
简介 PostgreSQL中大量更新或者删除记录后,加上autovacuum参数未做优化或设置不当,会导致表及索引膨胀。...使用pg_repack或pg_squeeze对表做重组时,比vacuum full对系统的影响小,且性能更高。...>= 9.4 pg_squeeze PostgreSQL >= 9.4 2.重组表的方式 pg_repack 基于触发器方式实现,对被重组的表,有一定的DML性能影响。...pg_squeeze 基于逻辑复制槽实现,重组时对原表的DML几乎没有性能影响,可能有复制槽争用,注意设置复制槽参数。...pg_squeeze目前支持的功能比pg_repack更灵活些,除了可手工或自动处理,也可以设置参数降低对后端进程的影响。
('block_size')::int) AS table_size中的heap_blks_total表示表中堆块的总数,block_size为当前pg块的大小,该参数是在initdb初始化时指定的。...total_size: 总大小pg_total_relation_size(单位字节bytes),等于表大小+索引大小。...注意:如果不包含死元组(标记为需要删除的行)的块会被跳过,因此这个计数器可能有时会向前跳跃一个比较大的增量。...vaccum各阶段: 通过vacuum的各个阶段,我们可以总结出:1)vacuum除了清理表,同时还会清理索引(移除指向标记为删除的行死元组的索引行索引元组)。...2)如果堆表尾部存在空页可以返回给操作系统,也就是页截断(truncating heap),注意仅当尾部空闲空间至少占表的 1/16 大小或已达到 1000 页的长度时才执行截断,那普通vaccum清理后大小是存在减少的情况的
一旦在shared_buffers中命中,那么读就不会下沉到操作系统缓存。如果shared buffer和操作系统缓存有相同页,操作系统缓存中的页很快会被驱逐替换。...我能影响操作系统的fsync将脏页刷回磁盘吗? 当然,通过postgresql.conf中参数bgwriter_flush_after,该参数整型,默认512KB。...可以通过checkpoint_flush_after影响checkpoint进程的fsync,通过backend_flush_after影响后台进程的fsync。...从shared_buffers中采集信息保存到pg_buffercache表中: create extension pg_buffercache; 安装好后,执行下面查询查看内容: SELECT c.relname...os_cache_mb表示OS cache中缓存多少。我们的表emp有8301MB数据,92%数据在OS cache,49.3%在shared buffers,大约50%的数据是冗余的。
下面的内容主要是基于几点来围绕的 监控表的dead tumple ,下面的语句可以展示每个表中的dead_tuple的数量,以及占整体表中的行的百分比,以及最近一次表进行autovacuum的时间。...通过下图可以看到有些表并没有进行 autovacuum 的操作,哪怕是一次,但已经有88万行的dead tuple ,定期通过语句和匹配的条件可以对一些表长期没有autovacuum 进行关注,或者在自定义的监控系统中增加...通过获取数据存储容量最大的表的排列来获得需要监控的表的list SELECT relname AS "table_name", pg_size_pretty(pg_table_size...~ '^pg_toast' AND relkind IN ('r') ORDER BY pg_table_size(C.oid) DESC LIMIT 10; 接下来在系统中执行 autovacuum...时需要注意的是,系统中是否正在有正在工作的 autovacuum 的进程, 并且这些进程在做什么操作 SELECT psa.pid,granted,query FROM pg_locks pl LEFT
PG可 执行文件目录中的文件 3 重新编译带有 lz4的配置文件,同时在重新编译前需要删除之前已经编译的目录中的文件 4 重新进行应用程序编译 5 启动数据库,并修改参数 Expanded...我们通过下面的示例可以看到,两个表在数据插入之间的区别,一个是使用LZ4 来进行数据压缩处理的,一个是使用PGLZ方式来进行数据处理的。...,可以明显的看出,使用LZ4的表大小是由 119MB 而 使用PGLZ的压缩方式的表的大小为238MB 。...,那么会发生什么 1 表重新建立 2 表的新的数据插入会使用新的压缩模式来进行数据插入 到底是那个结果我们可以看一下,下面的图,注意表在修改了压缩模式后,filename 是否改变,结果显而易见,还是没有变化...最后我们truncate 表后再次插入数据看是否压缩的模式变化了,下图验证了,的确压缩的模式变化了。
前提 当我们收到反馈说数据库响应慢或者压测过程中数据库有报错,第一步先收集数据库服务器资源使用情况,这一步是处理所有故障的前提。...enable_xlog_prune = on max_size_for_xlog_prune:默认是2T,建议修改值为104857600 (100GB),或根据磁盘空间自行调整 无效复制槽: 查看是否存在无效的复制槽导致...Xlog清理不及时,需要将延时最大的复制槽删除。...二.CPU使用率高 除了数据库BUG、其他程序耗CPU高影响数据库外,绝大部分原因是SQL执行慢且并发量大引起。...2、查看SQL的执行计划 explain (analyze,costs,buffers,timing) QUERY 3、SQL涉及的表是否有表膨胀、索引失效或缺失或重复 的情况,这步可以处理80%的慢
它支持完全 ACID compliant 的事务,并实现了一个称为多版本并发控制的独特功能。这使得多个事务可以同时运行,而不会造成交通拥堵或需要锁定。...查询吞吐量和延迟指标 如果您的查询执行时间比应该的时间长,那么您使用什么类型的机器或数据库都无关紧要。因此,如果随着表或数据库的大小,查询延迟指数增长,则始终跟踪查询延迟。...您还可以根据要求从 pg_stat_statements 表中查看其他指标,如调用次数或最小和最大执行次数。 分析这些数据有助于识别可能导致性能问题的查询,从而进行有针对性的优化工作。...该查询列出了 PostgreSQL 数据库中的表和索引,显示了它们的类型、名称、模式名称和大小 如果您正在使用 PostgreSQL 并希望检查是否有任何可能影响数据库性能的额外索引,则可以使用一个简单的查询...这使得及时调查和干预成为可能,最大限度地减少了对数据库性能和可用性的潜在影响。 平衡敏感度和实用性: 设置敏感程度足以检测实际问题但不太紧密的阈值,从而不会生成过多的误报。
-f 表示备份后的sql文件的名字 -d 表示要恢复数据库名称 恢复数据单表操作 psql -U postgres -h localhost -p 5432 -d product -f staff.sql...# 只显示表名和占用磁盘大小 SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size...current_query '' ORDER BY lap DESC; # 参数解释 procpid:进程id start:进程开始时间 lap:经过时间 current_query:执行中的...# select pg_terminate_backend(pid int) 可以kill 各种DML(SELECT,UPDATE,DELETE,DROP)操作 虽然可以使用 kill -9 来强制删除用户进程...因为:对于执行 update 的语句来说,kill掉进程,可能会导致 Postgres 进入到 recovery mode 而在 recovery mode 下,会锁表,不允许链接数据库。
背景 PG中,页是存储数据的单位,默认是8KB。一般情况下,一行数据不允许跨页存储。然而,有一些变长的数据类型,存储的数据可能超出一页大学。为了克服整个限制,大字段域会被压缩或者分割成多个物理行。...使用pgbench测试SQL语句执行时间,pg_table_size检查表大学(每次执行前都执行VACUUM FULL排除死记录的影响)。...因为压缩并没有高效节省磁盘空间,还会带来解压锁的额外时间和资源消耗。 当前PG14中,PGLZ需要至少25%的压缩率,LZ则仅比未压缩数据时小即可。我比较了LZ4、PGLZ的表与未压缩表大小。...LZ4压缩算法的数据与未压缩数据相比,函数处理的速度几乎一样,LZ4算法几乎不会影响字符串操作速度。 与PGLZ相比,LZ4压缩和解压缩TOAST数据更加高效,并提供很好的性能。...同样需要注意,需要考虑表中的数据是否合适压缩。如果压缩率不好,它仍然会尝试压缩数,然后放弃。这将导致额外的内存资源浪费,并极大影响插入数据的速度。
对于AO存储,虽然是appendonly,但实际上GP是支持DELETE和UPDATE的,被删除或更新的行,通过BITMAP来标记删除与修改。...AO存储是块级组织,当一个块内的数据大部分都被删除或更新掉时,扫描它浪费的成本实际上是很高的。而PostgreSQL是通过HOT技术以及autovacuum来避免或减少垃圾的。...,将中间结果存放在临时文件中,这些中间结果的临时文件最终会再次合并排序,所以增加此参数可以减少临时文件个数进而提升排序效率。...smitable 表名。 smisize 这些表有统计信息吗?如果这些表没有行数量统计以及行大小统计记录在系统表中,取值为false(简写f),这也表明该表需要被分析。...请看 的表倾斜情况> 详解 5.11 Bloat 状态 Bloat 阶段主要查看表的膨胀率,过高的表的膨胀率会影响表的查询以及增删改查性能,原因是表中存在的不可见的文件过大
1 PG MVCC 寄生与行中,行中有每个行属于哪个事务的标记,以及行在后期经过delete 或 update 后的事务标记, xmin, xmax 字段。...实际上对于动态表,经常进行Autovacuum 这个事情并不重要,而对于静态表来说,这才是重要的问题,基于autovacuum永远不会扫到这样的表。...同时用FROZENXID 替换记录中的xmin #vacuum_freeze_min_age = 50000000 默认值为 5000万,这个值设置的越小,针对I/O 和 CPU的影响会越大,但对于系统来说更积极的回收有利于尽快回收事务...3 在系统不繁忙的情况下,一定要定期的针对系统进行VACUUM 的手动操作,尤其针对分析出的系统中的大表进行操作。...5 针对大表的DDL 操作对于AUTOVACUUM 的影响的问题,这点也是需要重视的,DDL 操作会导致autvacuum 操作被推迟,所以针对大表的DDL 尽量在业务不繁忙时间进行,并且在针对某些大表操作后
select pg_size_pretty(pg_total_relation_size('relation_name')); -- 查看表的总大小,包括索引这些等分区表:select schemaname...显示哪些没有统计信息且可能需要ANALYZE的表SELECT * from gp_toolkit.gp_stats_missing;注:空表会一直在里面17....查看db中创建的extensionselect * from pg_extension22....查看表的存储格式select relstorage from pg_class where relname = '{table_name}'; a -- 行存储AO表 h -- heap堆表...查看资源队列中的等待查询SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';4.
一旦页面在shared_buffers上命中,读取就永远不会到达操作系统缓存,如果有任何副本,则很容易删除它们。 是否可以设置操作系统的fsync()方法刷新脏页到磁盘?...这样做将限制内核页面缓存中的脏数据量,减少在检查点结束时发出fsync或操作系统在后台大量回写数据时暂停的可能性。 它被用作块,即BLCKSZ字节,通常为8kB。...即使在这里,我们也可以分别使用checkpoint_flush_after和backend_flush_after命令来影响操作系统的fsync()(尽管关于检查指针和后端进程的讨论超出了本文的范围)。...,大部分的系统内存都是给数据库的,而操作系统缓存是通过同步和直接写绕过的,你就不会想用同样的方法来设置PostgreSQL。...在这里,我们的emp表有8301 MB大小,92%的数据在操作系统缓存中,同时49.3%的数据在共享缓冲区中,也就是大约50%的数据是冗余的。
公式为 表的行数* autovacuum_vacuum_scale_factor + autovacuum_vacuum_threshold 如果我按照图上的设置来进行,估计一般的PG 数据库是不会在进行...第一种方式是直接关闭 此时值需要进入到数据库中,针对要关闭autovacuum 的表操作如下的命令就可以将表的autovacuum操作关闭。...的成本是比较高的,同时一个表如果有多个索引,这个问题将发生的更加明显,根据日常工作中的经验,如果一个表的索引超过6个以上,则整体的 autovacuum 的工作时间70 -80%的时间都在索引本身,而不再表本身...,所以 1 发现经常对表进行autovacuum,但是就是做不完,或者时间很长的情况下,并且影响到系统的性能的情况下 1 通过上面将表的 autovacuum 暂时关闭,避免影响业务 2 在非业务时间...,运行 vacuum 针对这个表,并且如果发现还做不完的情况下,可以查看索引的碎片情况,如果碎片严重,那么加以删除索引,然后在做 vacuum , 在重建索引。
领取专属 10元无门槛券
手把手带您无忧上云