
# 长查询和长事务调优
长查询或长事务将影响autovacuum对旧版本的清理，数据更新操作产生的旧版本将不能被及时清理。
数据访问时，需要遍历旧版本进行可见性判断，以便确定对当前查询快照可见的版本。长查询或长事务持续的时间越久，不能及时清理的旧版本就越多，对访问性能的影响也越大。极端场景下，例如考察基于较小数据量的索引点查吞吐的场景，旧版本增多将导致吞吐下降明显，性能受损可能在50%以上。
另外，不能及时清理旧版本，也会导致额外的存储空间占用，出现表膨胀、索引膨胀现象，数据访问时，额外的IO增加，也将会对性能产生一定影响。
Astore索引和表数据都采用非原地更新，更新索引键或非索引键，将产生索引旧版本和数据旧版本。Ustore索引采用非原地更新、数据采用原地更新，更新索引键将产生索引旧版本和数据旧版本，更新非索引键只产生数据旧版本。
长查询和长事务对Astore和Ustore的访问性能都会产生影响。
用户在业务实现上，应尽量避免长查询或长事务，可通过访问pg_stat_activity、pg_running_xacts观察系统中是否存在长查询或长事务，然后利用pg_cancel_backend(pid int)、pg_terminate_backend(pid int)函数取消掉长查询或长事务。
