我希望能够在另一个现有会话中查询设置。特别是transaction_isolation。我们有:
current_setting('transaction_isolation')
我想打电话给:
session_setting('transaction_isolation', backend_pid )
找出现有会话/连接/后端实际使用的事务隔离级别。
背景
我有一个问题,我认为自动真空卡住了。手动运行真空会使某些表保留许多(比方说一百万)死元组。 我认为,这会大大降低性能。此类表上的单行更新可能需要一秒钟。它通常需要一毫秒。
查看pg_stat_activity有很多应用程序访问此数据库。 杀掉任何长时间打开的读/写事务一次有助于解决问题。 (真空运行,第二次吞吐量大约增加1000倍) 在其他情况下,这种方法不起作用。 似乎某些读取会话可能导致问题,即使他们不查询可疑表。如果我们说这些其他应用程序的会话正在使用顺序读取事务隔离,这可能是有意义的。 我认为其他一些应用程序正在使用JDBC。一些ODBC。还有一些PgAmdins也加入进来。
很难找到如何直接在某些监控/报告工具的内容中创建连接/会话。
默认的transaction_isolation是正常的read-committed。 我们正在运行v9.3 postgres。
答案 0 :(得分:8)
您可以通过运行SHOW all
来显示所有信息。
如果要显示隔离级别,请执行以下命令:
SHOW default_transaction_isolation
答案 1 :(得分:1)
我认为没有办法从另一个会话中查看一个会话。 (我可能错了。)
我能想到的唯一选择是扩展您的日志记录。在postgresql.conf中,设置
logging_collector = on
log_statement = 'all'
重启服务器。
这将记录所有SQL语句,包括那些设置事务隔离级别的语句。有很多设置; log_connections可能很有用。
所以你假设隔离级别是“read committed”,除非你记录了不同的隔离级别。