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