Postgresql postgres 9.3.6在小表上非常缓慢地截断

Postgresql postgres 9.3.6在小表上非常缓慢地截断,postgresql,truncate,Postgresql,Truncate,在Postgres 9.3.6中,对带有 TRUNCATE已完成,会话正在等待下一条语句或COMMIT 听起来这是一个应用程序方面的问题,但是如果没有关于运行TRUNCATE的信息,就无法确定这是一个非常有用的见解!该应用程序是一个Pentaho-Kettle转换,截断由一个表输出步骤运行,该步骤也插入记录。我可以看出发布提交的速度可能会有多慢。我们将在那里重新聚焦。谢谢事实证明,我们在上游有一个生成UUID的步骤,它阻塞了/dev/random。当表输出步骤初始化时,它运行truncate,但

在Postgres 9.3.6中,对带有
TRUNCATE
已完成,会话正在等待下一条语句或
COMMIT


听起来这是一个应用程序方面的问题,但是如果没有关于运行
TRUNCATE

的信息,就无法确定这是一个非常有用的见解!该应用程序是一个Pentaho-Kettle转换,截断由一个表输出步骤运行,该步骤也插入记录。我可以看出发布提交的速度可能会有多慢。我们将在那里重新聚焦。谢谢事实证明,我们在上游有一个生成UUID的步骤,它阻塞了/dev/random。当表输出步骤初始化时,它运行truncate,但直到/dev/random抛出足够的随机性来生成UUID并实际向其发送一行,它才提交truncate。
warehouse=# select pid,usename,backend_start,xact_start,query_start,now()-query_start as wait_time,state_change,waiting,state,query from pg_stat_activity;
-[ RECORD 1 ]-+-----------------------------------------------------------------------------------------------------------------------------------------------
pid           | 25123
usename       | dev
backend_start | 2015-04-13 23:25:47.728267+00
xact_start    | 2015-04-14 00:23:39.969074+00
query_start   | 2015-04-14 00:23:39.969074+00
wait_time     | 00:00:00
state_change  | 2015-04-14 00:23:39.969081+00
waiting       | f
state         | active
query         | select pid,usename,backend_start,xact_start,query_start,now()-query_start as wait_time,state_change,waiting,state,query from pg_stat_activity;
-[ RECORD 2 ]-+-----------------------------------------------------------------------------------------------------------------------------------------------
pid           | 5288
usename       | fk-etl
backend_start | 2015-04-14 00:21:20.913133+00
xact_start    | 2015-04-14 00:21:20.921312+00
query_start   | 2015-04-14 00:21:20.92142+00
wait_time     | 00:02:19.047654
state_change  | 2015-04-14 00:21:20.928318+00
waiting       | f
state         | idle in transaction
query         | TRUNCATE TABLE foo_schema.foo


warehouse=# select * from pg_locks;
warehouse=# SELECT relation::regclass as object, mode,granted,pid FROM pg_locks;
-[ RECORD 1 ]---------------------------------------------------------------------------
object  | 
mode    | ExclusiveLock
granted | t
pid     | 5288
-[ RECORD 2 ]---------------------------------------------------------------------------
object  | pg_locks
mode    | AccessShareLock
granted | t
pid     | 25123
-[ RECORD 3 ]---------------------------------------------------------------------------
object  | 
mode    | ExclusiveLock
granted | t
pid     | 25123
-[ RECORD 4 ]---------------------------------------------------------------------------
object  | foo_schema.foo_compound_idx
mode    | AccessExclusiveLock
granted | t
pid     | 5288
-[ RECORD 5 ]---------------------------------------------------------------------------
object  | foo_schema.foo
mode    | ShareLock
granted | t
pid     | 5288
-[ RECORD 6 ]---------------------------------------------------------------------------
object  | foo_schema.foo
mode    | AccessExclusiveLock
granted | t
pid     | 5288
-[ RECORD 7 ]---------------------------------------------------------------------------
object  | foo_schema.foo_pkey
mode    | AccessExclusiveLock
granted | t
pid     | 5288
-[ RECORD 8 ]---------------------------------------------------------------------------
object  | pg_toast.pg_toast_10043463
mode    | ShareLock
granted | t
pid     | 5288
-[ RECORD 9 ]---------------------------------------------------------------------------
object  | pg_toast.pg_toast_10043463
mode    | AccessExclusiveLock
granted | t
pid     | 5288
-[ RECORD 10 ]--------------------------------------------------------------------------
object  | pg_toast.pg_toast_10043463_index
mode    | AccessExclusiveLock
granted | t
pid     | 5288
-[ RECORD 11 ]--------------------------------------------------------------------------
object  | 
mode    | ExclusiveLock
granted | t
pid     | 5288
state         | idle in transaction
query         | TRUNCATE TABLE foo_schema.foo