Por que adicionar um arquivo de dados causaria um impasse no Oracle?

4

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?

    
por aseq 17.08.2012 / 22:48

4 respostas

2

Pode ser útil ver o (s) recurso (s) real (is) na disputa, mas acredito que ambas as operações estejam tentando tocar nos metadados do espaço de tabela e, assim, bloquear um ao outro. Um bom teste seria reorganizar suas tarefas para que o comando alter tablespace não tivesse um enorme nível (criando o arquivo de dados):

imp dumpfile control=blahblah.ctl
create datafile ....
alter tablespace add datafile...

No entanto, em uma máquina executando o 11g e com os recursos que você descreve, eu recomendaria dar uma olhada no uso do ASM em vez de gerenciar os arquivos manualmente. O ASM torna a vida de um DBA muito mais fácil (bem, meu de qualquer maneira).

    
por 20.08.2012 / 21:22
2

De acordo com este site (que eu encontrei com uma pesquisa na Web muito simples ) é porque a sua sessão está em conflito outro:

ORA-00060 error indicates that a dead lock occurred due to a resource contention with another session and Oracle rolled back your current statement to resolve the dead lock. The other session can proceed further as usual . Your current sessions rolled backed statements needs to be resubmitted for the execution after the required resources are available.

Leia mais desse artigo para mais informações sobre impasses.

    
por 18.08.2012 / 02:17
2

Bem, é um post muito antigo, mas chego a essa página enquanto tento resolver o mesmo problema com o meu servidor Oracle 12c. Finalmente, foi porque cheguei ao limite padrão de 200 arquivos de dados configurados nos arquivos de controle:

SQL> select max(FILE_ID) from DBA_DATA_FILES;
MAX(FILE_ID)
------------
         200

Eu tive que aumentar esse valor, e então eu poderia criar um novo espaço de tabela ou adicionar um arquivo de dados a um existente:

alter system set db_files = 2000 scope = spfile;
dbshut / dbstart
    
por 23.12.2016 / 15:42
0

Um deadlock ocorre quando duas sessões bloqueiam uma à outra, tentando atualizar uma linha, que já foi atualizada por outra sessão, mas ainda não foi confirmada ou revertida. Pode haver mais de duas sessões envolvidas, mas a ideia principal é a mesma.

link

...

    
por 14.03.2018 / 07:16

Tags