Olá pessoal,
Como sempre observo em fóruns questões relacionadas ao gerenciamento de tablespaces e também ouvi questões semelhantes até mesmo no famoso evento GUOB TECH DAY (em uma das palestras em que estive presente este ano), vou apresentar neste artigo 10 dicas, que podem ser consideradas como boas práticas para gerenciar tablespaces em Bancos de Dados Oracle, com uma breve justificativa sobre o porquê de implementá-las. É importante ressaltar, que algumas restrições ou configurações de seu ambiente podem impedir o uso de algumas dessas dicas, portanto, antes de implementá-las pesquise mais sobre o item da dica. Se você é leigo no assunto e deseja entender melhor o que é um tablespace, sugiro a leitura do artigo Introdução ao conceito de Tablespaces.
DICAS PARA GERENCIAMENTO DE TABLESPACES
1- Crie tablespaces separados para cada aplicação
Separar o armazenamento de dados de cada aplicação do BD em tablespaces diferentes permite isolar os dados de forma que isso facilite manutenções futuras, possibilite melhores configurações de otimização e segurança, e possibilite também, recuperações mais rápidas e simples.
Se por exemplo, você tem 2 aplicações em um BD, onde uma delas tem a característica principal de ter muitas consultas e a outra tem muitas atualizações; visando otimizar a performance destas aplicações, você pode criar o primeiro tablespace com um tamanho de bloco maior que o padrão (Ex. 32k), e o segundo com o tamanho de bloco padrão (8k) e configurações de armazenamento customizadas, tais como: NOLOGGING e INITRANS, com valor correspondente à quantidade de transações médias concorrentes etc. Visando otimizar o I/O, você pode também criar os tablespaces em discos ou conjuntos de discos separados. Outro benefício: Se uma das aplicações efetuar uma operação indevida e você precisar restaurar os dados para um estado prévio, você pode fazer isso no nível do tablespace de uma aplicação, sem afetar a outra.
Pelo mesmo motivo da dica anterior, você também pode separar dados e índices das aplicações em tablespaces diferentes. Aqui, uma dica que eu dou em meus treinamentos de tuning visando otimizar a manutenção de índices, é configurar o tablespace deles para não gerar log, desde que você tenha armazenado em algum lugar os scripts de criação dos índices. Índices não contém dados críticos, portanto, se por exemplo, o seu datafile corromper e você tiver os scripts de criação deles, muitas vezes é mais rápido e mais fácil, recriar o datafile e os índices, do que recuperar o datafile de um backup (essa recuperação sem perdas, exigiria a geração de log). Em ambientes com Data Guard, isso não se aplica, pois nos BDs destes ambientes é necessário forçar a geração de logs para garantir a replicação efetiva dos dados.
Imagem 01: Armazenamento de tabelas e índices em Tablespaces Fonte: Oracle Corporation |
Crie tablespaces gerenciados localmente (TGLs) se você estiver usando Oracle Database 10G. No 11G não há mais opção de criar tablespaces gerenciados por dicionário, portanto, os TGLs são a única opção disponível. TGLs causam, em geral, menor contenção de dados, e por isso são mais performáticos em ambientes com alta carga de trabalho.
4- Crie BIGFILE Tablespaces
Até o 10G você tinha bons motivos para não criar Bigfile Tablespaces, como por exemplo, o tamanho das peças de backup e o desempenho do backup de um grande tablespace, que não podia ser melhorado com o uso de paralelismo. No 11G, podemos dividir o backup do datafile de um Bigfile Tablespace em partes menores chamadas seções (um grande avanço desta versão), que permitem gerar peças de backup menores e até mesmo utilizar paralelismo ao backupeá-lo!
Bigfile Tablespaces oferecem os seguintes benefícios:- Simplificam o gerenciamento de datafiles;
- Permitem criar BDs 1024 X maiores do que com SmallFile Tablespaces;
- Melhoram a performance da abertura do BD, dos processos de checkpoint e dos processos DBWR.
5- Minimize a quantidade de datafiles em um tablespace
5- Minimize a quantidade de datafiles em um tablespace
Menos datafiles implicam em melhor performance na abertura do BD, nos processos de checkpoint e nos processos DBWRs. Se você não usa Bigfile Tablespaces, crie a menor quantidade possível de datafiles necessária para cada tablespace. Uma forma de minimizar a quantidade de datafiles é criar o tablespace com tamanhos de blocos maiores, como por exemplo, blocos de 32k. Tablespaces com blocos de 32k podem conter datafiles com tamanho 4 X maiores que um datafile de um tablespace com bloco de 8k, portanto, ao invés de criar 4 datafiles você poderia criar apenas 1. Porém, tenha CUIDADO! Blocos maiores são muito bons para operações de leitura, mas normalmente prejudicam as atualizações. Comento sobre isso em mais detalhes nos treinamentos de SQL Tuning e Performance Tuning for Oracle DBAs.
6- Crie tablespaces com gerenciamento de segmentos automático
A partir do Oracle 10G, crie tablespaces com o Gerenciamento de Espaço de Segmentos Automático (ASSM), ao invés de gerenciar PCTUSED, freelists e freelists groups (gerenciamento de segmentos manual). ASSM otimiza a maior parte das aplicações OLTP e é recomendado até mesmo para ambientes RAC. Somente em casos específicos, tais como aplicações que possuem tabelas com alto nível de concorrência realizando FTS e alto volume de INSERTs, avalie o uso do gerenciamento de segmentos manual.
7- Planeje o tamanho máximo dos tablespaces
Faça um bom planejamento do tamanho máximo de cada tablespace do Banco de Dados, de modo que eles comportem os dados de todas as aplicações, no espaço de armazenamento total que você tem disponível. Configurar o tamanho máximo evita que um determinado tablespace utilize desnecessariamente o espaço que poderia ser utilizado, por exemplo, para um novo tablespace, de uma nova aplicação.
8- Cuidado com o auto-incremento dos tablespaces
Se você configurou o auto-incremento (AUTOEXTEND) nos tablespaces, especifique um tamanho de auto-incremento apropriado para que o novo tamanho comporte mais dados por um período que não seja muito curto. O ideal é que este auto-incremento ocorra com a menor frequência possível, pois há um custo considerável para aumentar o tamanho do tablespace, que influencia negativamente na performance das aplicações quando ocorrem atualizações em seus objetos. Já vi uma aplicação com sérios problemas de performance em uma empresa em que trabalhei, por causa da configuração inadequada deste auto-incremento. Demonstro isso em mais detalhes no treinamento Performance Tuning for Oracle DBAs.
9- Separe LOBs em tablespaces exclusivos
Para otimizar performance (principalmente consultas FTS que não envolvem a coluna LOB) e evitar fragmentação de linhas, armazene as colunas LOB em um tablespace separado da tabela, preferencialmente com tamanho de bloco maior. Existem mais dicas e cuidados que devemos ter com colunas do tipo LOB, mas essas eu deixo para explicar também no treinamento Performance Tuning for Oracle DBAs.
10- Gerencie o tamanho dos tablespaces de sistema
- Oracle Database Performance Tuning Guide 12c Release 1 (12.1)
- Pro Oracle Database 12c Administration, Editora: Apress, Autor: Darl Kuhn.
Cuidado com o tamanho e fragmentação do tablespace SYS. Uma boa forma de minimizar o risco dele crescer muito e evitar fragmentação, é não criar objetos neste tablespace e mudar a configuração da tabela AUD$ para que ela armazene seus dados em um tablespace diferente do SYS. Pesquise também boas práticas para gerenciar o tablespace TEMP e o UNDO. Para gerenciar o tablespace de UNDO, leia o artigo Configurando o UNDO Tablespace.
Por hoje é só!
[]s
Referências:
- MOS Doc Id 1434614.1
- MOS Doc Id 1310035.1
- MOS Doc Id 1522807.1
- MOS Doc ID 1493350.1
- Oracle® Database Concepts10g Release 2 (10.2): Tablespaces, Datafiles, and Control Files- MOS Doc ID 1493350.1
- Oracle Database Performance Tuning Guide 12c Release 1 (12.1)
- Pro Oracle Database 12c Administration, Editora: Apress, Autor: Darl Kuhn.
Oi Fábio, parabéns pelo BLOG. Ele é muito rico e a linguagem facilita o entendimento. Também estou nesta jornada em obter cada vez mais a excelência em banco de dados Oracle e estou acompanhado e seguindo os seus passos em obter mais conhecimento, certificações e reconhecimento.
ResponderExcluirQueria adicionar para os demais leitores do seu blog como comentário do item 4 "BIGFILES" que o script de backup que estava sendo usado em ambientes sem BIGFILES deverá ser ajustado para usar "MULTISECTION". É impressionante como o tempo de backup aumenta drasticamente quando há BIGFILES e não usamos o multisection no RMAN.
Fiz um teste onde numa base de dados "X" haviam 190GBs ocupados (180GBs só um tablespace BIGFILE) e o backup levava mais tempo que uma outra base de dados "Z" com o dobro do espaço alocado SEM BIGFILES (o tamanho final de saída em disco do backup era praticamente o mesmo). Tudo isso por conta do BIGFILE.
O backup deve usar a cláusula SECTION SIZE (tamanho) para quebrar os BIGFILES do banco de dados. Por exemplo:
RMAN> backup section size 5G database;
(o RMAN automaticamente dividirá todos os tablespaces bigfiles do banco de dados em pedaços de 5GB durante o backup total.)
Somente adicionando "SECTION SIZE", o backup que levava 8h30min, caiu pra 2h30min. Para melhorar mais ainda o tempo de backup/restore, avalie com cuidado também o uso de paralelismo se tiver Enterprise Edition.
Eduardo, eu não entro em detalhes, mas falo sobre dividir o backup em seções no item 4. Que bom que vc viu o ganho de performance, mas é bom deixar claro que SECTION SIZE é um recurso que só existe a partir do 11G e que vc só consegue ganhar performance no backup se estiver usando paralelismo e múltiplos canais, ok?
ExcluirObrigado pelo comentário!
[]s
Valeu Fábio. É isso aí, do 11g onwards. Seu post não precisa de tantos detalhes. Apenas complementei com minha experiência que é um de nossos papéis como leitores e membros dessa comunidade. Isso enriquece o post!
ExcluirAbraços!
Eduardo Valentim
Fortaleza-CE
Fábio bom dia!
ResponderExcluirShow de bola, com relação o que você ao que você informa no autoextend, tenho uma dúvida.
Aqui tivemos um certo problema de lentidão e quedas de conexão ou até desistência de alguns clientes na hora de comprar. A tablespace nossa correlata a loja está com autoextend, gostaria de saber se existe a possibilidade de que ao mesmo tempo que esteja sendo feito o autoextend ter algum tipo de concorrência de informações inputadas ou gravadas nestes datafiles, gerando assim essa indisponibilidade? Ou no caso é possível haver uma alteração maior que o próprio tamanho expandido? Fico preocupado com relação a esse autoextend, sei que é a premissa básica de manutenção dos datafiles, mas qual é o real impacto desse autoextend? Existe sim essa questão de concorrência quando o oracle executa o mesmo!
Muito obrigado!
Quando ocorrer autoextend, as operações DML poderão entrar em wait, gerando uma indisponibilidade ou atraso temporário.
Excluir