我在一个相当大的表上对PostgreSQL 9.3.12数据库运行了两次删除操作。每个人都需要一次表格扫描,大约需要10分钟才能完成。
虽然他们在运营客户并未受到影响。磁盘I / O很高,超过70%,但这很好。
第二次删除完成后,磁盘I / O接近零,负载平均值从顶部开始。请求没有及时完成,因为新的请求继续到达,所有请求都堆积起来。
我的两个理论是:
-
底层I / O层导致所有I / O请求阻塞一段时间的事情,或者
-
Postgres获得(并且在非平凡的一段时间内持有)客户需要的锁定。全局一个或与删除行的表相关的全局一个或一个。该表经常被客户插入;如果有人持有阻止插入的锁,那肯定会解释这种行为。
醇>
有什么想法吗?负载超过40,即使在负载很重的时候也不会在我们的环境中发生。删除期间/之后网络I / O很高,但仅仅是因为它们被流式传输到我们的复制服务器。