有人可以解决我对pg_stat_activity
postgres 9.5 的以下疑问吗?
state
IDLE
行中的表示是pg_stat_activity
什么吗?它是否像检查所有打开的 postgres 连接,如果连接没有执行任何查询,则IDLE
表示该连接执行的最后一个查询?select * from pg_stat_activity
我看到有行state
IDLE
和query_start_date
超过2天?这意味着什么?我应该担心这个吗?Select * from pg_stat_activity
它是从 postgres 维护的某个快照中生成详细信息,还是检查 postgres 中打开的当前连接以提供详细信息?Postgres 文档声明了以下有关仅索引扫描和覆盖索引的内容:
如果您经常运行类似的查询
SELECT y FROM tab WHERE x = 'key';
加速此类查询的传统方法是仅在 x 上创建索引。然而,索引定义为
CREATE INDEX tab_x_y ON tab(x) INCLUDE (y);
可以将这些查询作为仅索引扫描来处理,因为可以从索引中获取 y 而无需访问堆。
因为列 y 不是索引搜索键的一部分,所以它不必是索引可以处理的数据类型;它仅存储在索引中,并且不被索引机制解释。另外,如果索引是唯一索引,即
CREATE UNIQUE INDEX tab_x_y ON tab(x) INCLUDE (y);
唯一性条件仅适用于 x 列,不适用于 x 和 y 的组合。(INCLUDE 子句也可以用 UNIQUE 和 PRIMARY KEY 约束编写,为设置这样的索引提供替代语法。)
问题1:如果 的数据类型y
可以添加到索引中,并且没有唯一性要求,那么使用CREATE INDEX tab_x_y ON tab(x) INCLUDE (y)
overCREATE INDEX tab_x_y ON tab(x, y)
进行查询有什么优势SELECT y FROM tab WHERE x = 'key';
?
在向索引添加非键有效负载列(尤其是宽列)时保持保守是明智的做法。如果索引元组超过索引类型允许的最大大小,数据插入将失败。在任何情况下,非键列都会复制索引表中的数据并使索引的大小膨胀,从而可能会减慢搜索速度。 …