在Postgres 9.6中调试AccessExclusiveLock

时间:2017-10-27 16:11:21

标签: postgresql

我们有一个应用程序,由Postgres支持暂时锁定。 Postgres日志显示了pg_database的一系列AccessExclusiveLock条目:

[13-1]  sql_error_code = 00000 LOG:  process 7045 still waiting for AccessExclusiveLock on object 0 of class 1262 of database 0 after 1000.123 ms 
[6-1]  sql_error_code = 00000 LOG:  process 7132 still waiting for AccessExclusiveLock on object 0 of class 1262 of database 0 after 1000.118 ms 
[6-1]  sql_error_code = 00000 LOG:  process 8824 still waiting for AccessExclusiveLock on object 0 of class 1262 of database 0 after 1000.133 ms 
[14-1]  sql_error_code = 00000 LOG:  process 7045 acquired AccessExclusiveLock on object 0 of class 1262 of database 0 after 39265.319 ms 
[7-1]  sql_error_code = 00000 LOG:  process 7132 acquired AccessExclusiveLock on object 0 of class 1262 of database 0 after 12824.407 ms 
[7-1]  sql_error_code = 00000 LOG:  process 8824 acquired AccessExclusiveLock on object 0 of class 1262 of database 0 after 6362.509 ms

1262这里指的是pg_database

=> select 1262::regclass;
+-------------+
|  regclass   |
+-------------+
| pg_database |
+-------------+

我们在Heroku上运行Postgres 9.6.5。

根据我的理解,AEL将用于“重”操作,例如DROP TABLE,TRUNCATE,REINDEX [1] ......我们的运行时操作由许多存储过程组成,每个存储过程都插入/更新/删除多个表(删除更少)。我们不会在运行时执行上面列出的任何操作,也不会在链接文档中执行任何操作,此时没有发布/维护(由我们)。

我还没有设法找到任何文档,说明在上面概述的“正常操作”期间何时可以进行此锁定。我的问题是:

  1. 什么可能导致AEL(如果我已经提供了足够的信息推测),是否有任何最佳做法可以避免将来使用它们?
  2. 我还能看到什么来帮助调试原因?
  3. [1]:Postgres docs - explicit locking

0 个答案:

没有答案