- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个在 Django 项目中的 Heroku 上运行的 Postgres 9.4.18 数据库。我注意到查询变得越来越慢,所以我对一个查询运行了“EXPLAIN ANALYZE”,并注意到对于一个节点,行估计值大大高于实际行数:
-> Seq Scan on listings_listing u1 (cost=0.00..1536692.01 rows=5030003 width=8) (actual time=0.811..11263.410 rows=173537 loops=1)
然后我在表上运行“VACUUM FULL ANALYZE”,然后在查询上重新运行“EXPLAIN ANALYZE”并得到:
-> Seq Scan on listings_listing u1 (cost=0.00..23554.61 rows=173537 width=8) (actual time=0.001..33.884 rows=173537 loops=1)
执行时间现在快了 100 倍。
所以这两个问题是:A) 自动吸尘器不应该阻止这种情况吗? (我如何检查它是否已启用?)B)如果没有执行吸尘,它是如何做到这一点的?
--------------------------------更新
我从 heroku 中找到了这个命令,它提供了 autovacuum 统计信息,这是输出(不幸的是,我在手动清理后运行了它。
heroku pg:vacuum_stats DATABASE_URL
schema | table | last_vacuum | last_autovacuum | rowcount | dead_rowcount | autovacuum_threshold | expect_autovacuum
--------+-----------------------------------------+-------------+------------------+----------------+----------------+----------------------+-------------------
public | listings_listing | | 2018-06-27 15:36 | 173,537 | 0 | 34,757 |
似乎指示的阈值应该在很久以前就导致它运行真空。
此外,这里是 Heroku 页面,其中包含关于 vacuuming 设置的文档: https://devcenter.heroku.com/articles/managing-vacuum-on-heroku-postgres
最佳答案
要查明 autovacuum 是否按应有的方式启用,请运行
SHOW autovacuum;
要查明你的特定表是否禁用了 autovacuum,请运行
SELECT reloptions FROM pg_class WHERE relname = 'listings_listing';
B)的答案很简单:
如果 autovacuum 没有运行,每个 UPDATE
或 DELETE
都会在表中创建一个“死元组”(或“死行版本”)。这些将永远不会被清理,除非您手动运行 VACUUM
并且会导致表增长,从而使顺序扫描变慢。
A) 的答案更难:
有几件事可以阻止 autovacuum 完成其工作:
此表的更改率可能如此之高,以至于默认运行缓慢的 autovacuum 无法跟上,以免影响正常事件。
在这种情况下,您应该将 autovacuum 调整为对该表更具侵略性:
ALTER TABLE listings_listing SET (
autovacuum_vacuum_cost_limit = 1000,
toast.autovacuum_vacuum_cost_limit = 1000
);
如果这还不够好,你可以
ALTER TABLE listings_listing SET (
autovacuum_vacuum_cost_delay = 0,
toast.autovacuum_vacuum_cost_delay = 0
);
存在并发的长事务。
Autovacuum 只能删除比最旧的运行事务更早的死元组,因此长事务会阻止它完成工作。
故事还有很多;阅读 this blog post .
但是,这也会使 VACUUM (FULL)
无法正常工作,所以这可能不是您的问题。
该表经常被SHARE UPDATE EXCLUSIVE
或更强的锁锁定,例如通过运行“LOCK listings_listing
”。
当 autovacuum 遇到这样的锁时,它会退却而不是阻止用户事件。
确定发生了什么的有用方法是像这样查询 pg_stat_user_tables
:
SELECT n_live_tup, n_dead_tup, last_vacuum, last_autovacuum
FROM pg_stat_user_tables
WHERE relname = 'listings_listing';
但现在您已经运行 VACUUM (FULL)
,该证据可能已被销毁。
另一件好事是将 log_autovacuum_min_duration
设置为 -1 以外的值,并偶尔查看日志。
关于django - Postgres EXPLAIN ANALYZE 成本估算行数大大高于实际行数。没有吸尘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51147476/
当试图在 C 中存储大于 32,767 的短整数值时,只是为了看看会发生什么,我注意到打印到屏幕上的结果是我试图存储的数字 - 65,536。例如。如果我尝试将 65,536 存储在一个短变量中,则打
有时,当我在某些情况下运行 locust 时,95% 的值大于最大值。据我了解,95% 意味着 95% 的请求花费的时间比这短。那么 Max 值怎么会小于 95%?我在这里做错了什么。 我还发现只有在
我有一个从 NSStatusItem 显示的 NSPopover。这个 Popover 会时不时地显示 NSAlerts。问题是这些警报总是出现在弹出窗口下方,即使它们成为关键窗口。即使我拖动它,它仍
我正在某个数据集中绘制几条线。几个数据点(下例中的第 13 列)是特殊的,我希望它们用圆圈标记并标记(标签在第 12 列中)。 plot "data.csv" using 0:13 with circ
在我下面的代码中,我有一个高度为 8dp 的白色 View 。蓝色按钮的高度为 10dp,因此理论上它应该显示。然而,事实并非如此。它只显示不在白色 View 正上方的部分。我知道这与海拔有关,但我不
我在 nib 文件的 View 中有一个 mapView,委托(delegate)设置为文件的所有者,导出设置为 IBOutlet MKMapView* mapView; 我遇到的问题是 map 高于
function getNum() { num = $('.slicesinput').val(); num2 = $('.numinput').val(); if (num
Android 的 VelocityTracker 类中的缺陷是,如果 X 方向的速度超过 maxVelocity,它会更改为等于 maxVelocity,Y 方向也相同。但是,这意味着如果我们要20
我们有如下表格。我正在尝试使用发现的一些技巧使其响应 here . 现在的结果是我在 iPhone 上看到了以下内容: header1 header2 etc col1 col2 etc 当我希望 h
我想在同一个 Android 应用程序中使用 AdMob 和 ActionBarSherlock,但我无法将 AdMob 放在屏幕顶部(Sherlock ActionBar 上方)。 有人遇到过类似的
我的 javasacript 源代码是严格的 ascii,我想表示 anger symbol在字符串文字中。这在 javascript 中可能吗? 最佳答案 JavaScript 字符串实际上是 UT
我正在开发一个带有 ActiveX 的网络应用程序,该应用程序使用 FFMPEG 解码视频并使用 VMR9 呈现视频。出于某种原因,每次我尝试放置一些 HTML(即使使用 IFrame)都会导致面板闪
我有一个可以高于页面主体的元素“div”。我希望页面不会向下滚动。我需要一个 CSS 技巧,我不能使用 JS 来获取屏幕高度。有什么想法吗? http://jsfiddle.net/L83aLbk4/
在 WooCommerce 结帐字段中,我试图在结帐表单上将 billing_address_2 设置在 billing_address_1 之上。 所以不是: Street Address Apar
我在使用 AudioKit 时遇到了一个小问题框架: ----> 我无法让 AudioKit 框架拾取高于和低于特定数量的特殊频率。 (频率低于 100Hz 和高于 20kHz) 编辑:我已经在我的
我正在尝试激活我的手机中的应用程序但我需要代码许可我尝试了所有这些来发出声音 android.permission.RECORD_AUDIO android.permission.CAPTURE_AU
我有一个 div,其中的值是 0 标准。我有两个按钮,+ 和 - 当值为 0 时,我希望禁用我的 - 按钮,并且从它被禁用的那一刻起高于 0 我希望启用它。 if (number == 0) {
我使用 metrics=['accuracy'] 编译了一个模型,并且我获得的值始终高于验证准确度 val_acc。例如: Epoch 19/20 53/53 [===================
我这里有一个导航栏代码。当我将鼠标悬停在链接上时,一个 png 图像的小箭头应该显示在它下方的中央。下面的代码在 Firefox 和 Chrome 中运行良好,但在 IE 中,箭头稍微低于 div,因
这是我的 div(父/子)HTML 代码: Arvan Tourism Explore our wonderful Albania.
我是一名优秀的程序员,十分优秀!