记一次PostgreSQL数据库超级慢故障排除


title: 记一次PostgreSQL数据库超级慢故障排除
categories: 数据库
tags:
- PostgreSQL
timezone: Asia/Shanghai
date: 2019-01-06


环境

REHL6.8(128G内存、16路CPU、5T硬盘)
PostgreSQL 9.6

问题描述

数据库查询任何数据时间都需要超长的时间等待
select count(*)一个看空表都需要30分钟

问题排查

1.查看内存占用,发现内存占用不高

free -h

2.查看cpu负载,也不高

top

3.查看硬盘负载

iostat -x 1 5
iostat -m 1 5
    -x 选项将用于显示和io相关的扩展数据;
    -m 表示单位为m
    1表示间隔;10表示次数
    
    tps         每秒钟发送到的I/O请求数
    MB_read/s   读取多少MB/s
    MB_wrtn/s   写入多少MB/s
    MB_read     以上命令设置间隔时间内读取数据总数
    MB_wrtn     以上命令设置间隔时间内写入数据总数

此时已经将所有业务全部停掉为分析原因让路。通过观察发现,没有数据库操作的时候服务器的IO非常低,但是只要有一个小小的写入或者查询操作硬盘读取速度能到600M/s。到这里问题初步判定,是由于硬盘IO问题造成了数据库读写缓慢。

经过询问,数据库是大数据平台用数据库。表并不多,也就三四十个表,最多的表数据也就几百万行,按理说不应该出现这样的问题。

继续查找原因。

找到数据库存储目录,发现一共占用磁盘空间1.3T。这样的数据量不应该占用如此之大的硬盘空间。PostgreSQL记得是一个表用就是一个文件。其中有一个表文件有500多个,每个1G,也就是这个表占用了500多G的空间。

4.查询上边占用500G空间的表

pg_class 表
select relname, relnamespace, relfilenode from pg_class where relfilenode = xxx;

    xxx是上边占用500多G的文件名(数字)

经过询问这个表有几百万行数据,而且刚执行了delete操作。

继续询问得知,现在的上册数据源有问题,所有做的定时任务每天先将本地所有表使用delete命令清空,然后再重新从上层数据库拉去全部数据。问题到这里基本明朗,delete命令删除数据的同时还会记录相关操作记录。造成了虽然表里所有数据已经清空,但是并没有释放磁盘空间,由此造成查询效率奇低。

5.问题的解决。

既然知道了原因,那问题就好办了,先备份表结果,然后将之前每天delete的表drop后重建,操作完成后数据库已经由1.3T变为30多G,速度问题也就此解决。

总结

delete  命令用来删除数据,但是不适用于以上场景,因为delete会生成大量日志

truncate    如果确认表内所有数据全部没用了,而且不需要日志可以采用此命令。或者干脆drop删除掉后重建。

附录:pg_class表详解

名字 类型 引用 描述
relname name 表、索引、视图等的名字。
relnamespace oid pg_namespace.oid 包含这个关系的名字空间(模式)的 OID
reltype oid pg_type.oid 对应这个表的行类型的数据类型(索引为零,它们没有 pg_type 记录)。
relowner oid pg_authid.oid 关系所有者
relam oid pg_am.oid 如果行是索引,那么就是所用的访问模式(B-tree, hash 等等)
relfilenode oid 这个关系在磁盘上的文件的名字,如果没有则为 0
reltablespace oid pg_tablespace.oid 这个关系存储所在的表空间。如果为零,则意味着使用该数据库的缺省表空间。如果关系在磁盘上没有文件,则这个字段没有什么意义。
relpages int4 以页(大小为 BLCKSZ)的此表在磁盘上的形式的大小。它只是规划器用的一个近似值,是由 VACUUM, ANALYZE 和几个 DDL 命令,比如 CREATE INDEX 更新。
reltuples float4 表中行的数目。只是规划器使用的一个估计值,由 VACUUM, ANALYZE 和几个 DDL 命令,比如 CREATE INDEX 更新。
reltoastrelid oid pg_class.oid 与此表关联的 TOAST 表的 OID ,如果没有为 0 。TOAST 表在一个从属表里"离线"存储大字段。
reltoastidxid oid pg_class.oid 对于 TOAST 表是它的索引的 OID ,如果不是 TOAST 表则为 0
relhasindex bool 如果它是一个表而且至少有(或者最近有过)一个索引,则为真。它是由 CREATE INDEX 设置的,但 DROP INDEX 不会立即将它清除。如果 VACUUM现一个表没有索引,那么它将清理 relhasindex 。
relisshared bool 如果该表在整个集群中由所有数据库共享则为真。只有某些系统表(比如 pg_database)是共享的。
relkind char r = 普通表, i = 索引, S = 序列, v = 视图, c = 复合类型, t = TOAST 表
relnatts int2 关系中用户字段数目(除了系统字段以外)。在 pg_attribute 里肯定有相同数目对应行。又见 pg_attribute.attnum
relchecks int2 表里的检查约束的数目;参阅 pg_constraint
reltriggers int2 表里的触发器的数目;参阅 pg_trigger
relukeys int2 未使用(不是唯一值的数目)
relfkeys int2 未使用(不是表中外键的数目)
relrefs int2 未使用
relhasoids bool 如果为关系中每行都生成一个 OID 则为真
relhaspkey bool 如果这个表有一个(或者曾经有一个)主键,则为真。
relhasrules bool 如表有规则就为真;参阅 pg_rewrite
relhassubclass bool 如果有(或者曾经有)任何继承的子表,为真。
relfrozenxid xid 该表中所有在这个之前的事务 ID 已经被一个固定的("frozen")事务 ID 替换。这用于跟踪该表是否需要为了防止事务 ID 重叠或者允许收缩 pg_clog 而进行清理。如果该关系不是表则为零(InvalidTransactionId)。
relacl aclitem[] 访问权限。参阅 GRANTREVOKE 获取详细信息。
reloptions text[] 访问方法特定的选项,使用"keyword=value"格式的字符串
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,717评论 0 44
  • 需要原文的可以留下邮箱我给你发,这里的文章少了很多图,懒得网上粘啦 1数据库基础 1.1数据库定义 1)数据库(D...
    极简纯粹_阅读 7,417评论 0 46
  • --- layout: post title: "如果有人问你关系型数据库的原理,叫他看这篇文章(转)" date...
    蓝坠星阅读 782评论 0 3
  • 好盛大的一次三阶!
    李波_天地创和阅读 198评论 0 1
  • 我还是很喜欢你,像风走了八百里,不问归期。这是我比较喜欢的一个句子,每每见到这个句子,都会忍不住想要去读一下。是呀...
    幽竹君子阅读 187评论 1 0