Eu notei algo no Oracle que nunca aconteceu antes para mim. Embora eu freqüentemente faça esse tipo de coisa por muitos anos agora. Neste caso, é uma instância do Oracle11 (Oracle Database 11g Enterprise Edition Versão 11.2.0.1.0 - 64bit em execução no Linux para ser mais preciso).
Estou importando um dumpfile e, ao mesmo tempo, estou aumentando o espaço de tabela usando instruções como esta:
alter tablespace example add datafile '/path/to/oradata/instance/exampleXX.dbf' size 31000m;
Às vezes, recebo o seguinte erro ao executar a declaração acima:
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
Eu posso reiniciar a declaração alter tablespace e a maioria vai dar tudo certo na segunda tentativa.
Estou perguntando por que isso acontece porque é incomum para mim. Isso indica um erro ou impedindo a falha do sistema de arquivos? Eu entendo rodar uma importação e adicionar arquivos de dados a um tablespace ao mesmo tempo pode ser pedir muito de um servidor, no entanto este servidor tem 4 CPUs, 64 GB e alguns TB de SAS raid10 à sua disposição.
Este não é um sistema de produção.
Saída de arquivo de rastreio relevante:
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TT-00000006-00000010 36 11 SX 38 142 S
TT-00000006-00000010 38 142 S 36 11 SX
session 11: DID 0001-0024-0000005D session 142: DID 0001-0026-00000068
session 142: DID 0001-0026-00000068 session 11: DID 0001-0024-0000005D
Rows waited on:
Session 11: no row
Session 142: no row
----- Information for the OTHER waiting sessions -----
Session 142:
sid: 142 ser: 30639 audsid: 0 user: 5/SYSTEM flags: 0x8000051
pid: 38 O/S info: user: example_user, term: UNKNOWN, ospid: 14589
image: example@example (DW00)
current SQL:
CREATE TABLE EXAMPLE ...
----- Error Stack Dump -----
ORA-00060: deadlock detected while waiting for resource
----- Current SQL Statement for this session (sql_id=6bvzdgdn8vqqt8) -----
alter tablespace ...
O stacktrace e o despejo de memória podem fornecer mais informações, mas eu não sou especialista em solucionar esses problemas. O que eu sou depois é uma idéia do que poderia ser, alguém que tivesse isso acontecer antes que pudesse fazer um palpite informado. Se for um bug, um sinal de que o sistema de arquivos pode estar com problemas ou que o controlador de ataque não conseguiu lidar com a carga. Por que as duas declarações estavam aguardando o recurso e por que esse recurso estava indisponível?