这对我来说是一个非常令人困惑的问题。
我正在运行db2加载操作,但是否将stdout重定向到本地日志文件会有很大的不同。
以下是统计数据:
[dbadmin@mymachine:/home/dbadmin]# time db2 -tv "LOAD FROM ./mat.AK OF DEL METHOD P (1,2,3) MESSAGES ./mat.AK.log REPLACE INTO myschema.mytable (col1, col2, col3) STATISTICS YES AND INDEXES ALL INDEXING MODE REBUILD;" >> ./mat.AK.log
real 1m56.75s
user 0m0.00s
sys 0m0.01s
[dbadmin@mymachine:/home/dbadmin]# time db2 -tv "LOAD FROM ./mat.AK OF DEL METHOD P (1,2,3) MESSAGES ./mat.AK.log REPLACE INTO myschema.mytable (col1, col2, col3) STATISTICS YES AND INDEXES ALL INDEXING MODE REBUILD;"
Number of rows read = 69379
Number of rows skipped = 0
Number of rows loaded = 69379
Number of rows rejected = 0
Number of rows deleted = 0
Number of rows committed = 69379
real 0m1.42s
user 0m0.01s
sys 0m0.00s
我不确定为什么将stdout重定向到./mat.AK.log整个操作的成本接近2分钟,而在没有重定向的情况下将其导入db2表需要不到2秒。
请问,好吗?
答案 0 :(得分:0)
事实证明,问题的原因是LOAD操作中的“MESSAGES”命令和尾部的重定向指令之间的竞争条件。保持它们并使它们都指向同一个文件会产生竞争条件并导致延迟。
在我丢弃其中一个之后,问题就解决了。