Top 5 Tuning. for Oracle and SQL Server

Documentos relacionados
Índices no Oracle Database

Administração de Banco de Dados

Administrando SQL Server para "Não DBAs"

Treinamento. DBA Oracle 11g. Duração: 120 horas

Banco de Dados I Introdução SQL

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Análise e otimização de queries no MySQL. Jeronimo Fagundes da Silva

SQL Linguagem de Definição de Dados

Tabelas. Banco de Dados I MySQL

A linguagem SQL

Sidney Cirqueira. Reestruturando um Ambiente de Banco de Dados SQL Server na Prática

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Formação de DBAs SQL Server 2008 Parte 6: Gerenciamento de Performance

Sumário. Capítulo 2 Conceitos Importantes Tópicos Relevantes Instance Base de Dados Conclusão... 37

ORACLE IN-MEMORY 12c. Vantagens e Cenários de Utilização do Oracle In-Memory 12c. Willian Frasson

NoSQL Apache Cassandra para DBAs. Conceitos básicos que todo DBA deve conhecer sobre Apache Cassandra.

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

Linguagem SQL Restrições, Triggers e Views

Administração de Banco de Dados

BCD29008 Banco de dados

Aula 06 Sistemas Embarcados LT38C

Banco de dados. Prof. Emiliano S. Monteiro 5º.Sem. Licenciatura

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

BANCO DE DADOS. Vinícius Pádua

Prof. Josenildo Silva

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Oracle Database 10g: Fundamentos de SQL e PL/SQL

2 Instalando e configurando o ambiente de desenvolvimento do Microsoft SQL Server

Linguagem SQL (Parte I)

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

SGBD. Definição. Funções básicas

Oracle Advanced Compression x External Tables (Armazenamento de dados históricos)

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP

Novidades Oracle 11g. Rio Grande Energia - RGE

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Organização de Arquivos

A Linguagem SQL. Tecnologia de Base de Dados. MSc. Eugénio. Macumbe

Modelagem Física e SQL

SGBD. Funções Básicas de um SGBD

01 - Visão Geral do Ajuste de Desempenho do Banco de Dados 02 - Arquivos de Alert e Trace do Oracle

Tarefa Orientada 17 Scripts

Oracle Database 10g: Workshop de Administração II Release 2: Nova Versão

BANCO DE DADOS GERENCIAL 1 A U L A 2

26/04/2017 Triggers no SQL Server: teoria e prática aplicada em uma situação real

PARTE I INTRODUÇÃO AO MICROSOFT SQL SERVER Capítulo 1 Visão geral do Microsoft SQL Server

Oracle Database: Fundamentos de SQL e PL/SQL

Oracle Database 12c: Workshop de Administração

Laboratório de Banco de Dados. Prof. Luiz Vivacqua.

Oracle Database 11g: Workshop de Administração II Novo

Introdução ao PostgreSQL

AUMENTO DE PERFORMANCE POR MEIO DA OTIMIZAÇÃO DE BANCO DE DADOS

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s

Page 1. Prof. Constantino Jacob

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

Oracle Database 11g: Introdução à Linguagem SQL Novo

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

SQL Server Desenvolvedor

Comandos de Manipulação

IMPLEMENTAÇÃO DE BANCO DE DADOS

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Configurações de performance no SQL Server José Antônio da Cunha CEFET-RN

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

A instância Oracle é composta de :

Programação SQL. Introdução

Bancos de Dados Notas de Aula Introdução Prof. Dr. Daniel A. Furtado

Manipulação de Dados com SQL

Benvindo ao Curso de Introdução ao Firebird com Ferramenta de Relatórios!

Transcrição:

Top 5 Tuning for Oracle and SQL Server

Fábio Cotrim DBA SQL Server e Oracle Bacharel em Ciência da Computação pela Universidade Federal de São Carlos (UFSCar) Profissional certificado com mais de 27 anos de experiência em Tecnologia da Informação, sendo mais de 19 anos em Banco de dados, com atuação em empresas de diversos ramos de mercado (farmacêutico, editorial, financeiro, e-commerce, indústria automativa, etc), de todos os portes. Atualmente trabalhando na TCS - Tata Consultancy Services, em um projeto global de suporte e desenvolvimento.

Fábio Cotrim Sempre disposto a disseminar o conhecimento, já formou alguns profissionais na área de banco de dados, onde sempre incentivo a pesquisa e auto-didática, Instrutor e consultor pela DBA4All. Co-fundador do grupo DBA Brasil Visite o site: www.dbabrasil.com.br Inscreva-se: dba-brasil+subscribe@googlegroups.com Fale comigo: fabio.cotrim@dba4all.com.br

Fábio Prado Trabalho com Oracle Database: Desde 2001, como Desenvolvedor; Desde 2007, como DBA. Professor/Instrutor em Bancos de Oracle: FABIOPRADO.NET: videoaulas ou telepresenciais de SQL, PL/SQL, Adm. de BD Oracle e SQL Tuning; OraMaster: presenciais turmas abertas ou in-company: SQL Tuning e Database Performance Tuning; Centro Universitário IBTA: presenciais de Backup and Recovery em turmas de MBA em Bancos de Dados.

Autor do blog FABIOPRADO.NET (www.fabioprado.net), revista SQL Magazine e diversos sites e blogs de TI (OTN, GPO, ProfissionaisTI etc.) Certificações e títulos: ORACLE: Oracle ACE; OCP 10g, 11g e 12c; OCE 11g Performance Tuning; OCE 11g SQL Tuning; OCA 11g PL/SQL; MICROSOFT: MCP, MCSD, MCAD, MCSD.NET, MCDBA, MCTS, MCT e MCPD.

INTRODUÇÃO Apresentaremos dicas diversas, abordando 5 temas, para resolver problemas comuns de performance em Bancos de Dados Oracle e SQL Server; Os temas são: 1. Gerenciamento do I/O do Banco de Dados; 2. Desfragmentação do Banco de Dados; 3. Compressão de dados; 4. Estatísticas de objetos; 5. Performance de SQL X Stored Procedures.

1- Gerenciamento do I/O do Banco de Dados

Planejando o sistema de I/O

2/3 dos WE são por causa de I/O Fonte: Confio Sofware, http://www.confio.com, 05/2007

O que considerar? Storage HDD X Hybrid Flash (HDD + SSD) X All Flash; Tipos de RAID; Distribuição dos arquivos do Banco de Dados.

HD x SDD x ALL FLASH

HD X SSD Transações em PostgreSQL com storage híbrida (4 HDD de 10K SAS c/ RAID 10 X 1 SSD Intel S3700) Fonte: Tables and indexes vs. HDD and SSD, Tomas Vondra, http://blog.2ndquadrant.com/tables-and-indexes-vs-hdd-and-ssd/

HD X SSD Desempenho de leitura e gravação de BLOBs em SSD, no Oracle

All Flash Fonte: Justifying Investment in All-Flash Arrays, Eric Burgener, IDC (INDUSTRY DEVELOPMENTS AND MODELS)

All Flash Fonte: EMC VMAX ALL FLASH STORAGE FOR MISSION-CRITICAL ORACLE DATABASES, https://www.emc.com/collateral/white-papers/h14557-vmax3-all-flash-storage-for-oracle-database-wp.pdf

Tipos de RAID

RAIDs comumente utilizados em BD Fonte: Which RAID Level is Right for Me?, Adaptec, Storage Solutions White Paper

Performance RAID 10 X RAID 5 Ambiente típico OLTP c/ 70% leitura 30% escrita Carga de 400 GB de dados Análise de tempo de resposta de RAID 10 X RAID 5 Fonte: Comprehending the Tradeoffs between Deploying Oracle Database on RAID 5 and RAID 10 Storage Configurations, A Dell Technical White Paper

Distribuição dos arquivos do Banco de Dados no Oracle

Divisão de arquivos em FS Discos (ou grupos de discos) separados para: Dados e índices: RAID 10; Tablespaces SYSTEM, TEMP e UNDO: RAID 10; Objetos quentes: RAID 10; Redo Logs: RAID 1; Archive logs: RAID 1. Obs.: Evite RAID 5 se você puder usar RAID 10.

Divisão de arquivos em ASM Discos (ou grupos de discos) separados no mínimo para: Database area: Datafiles, control file e redo logs; Flash recovery area: Cópias control file e redo logs, archives, backups e flashback logs. Obs.: Os fabricantes de hardware possuem recomendações específicas para I/O com ASM. Alguns, como a Dell EMC, possuem documentações homologadas em conjunto com a Oracle.

Distribuição dos arquivos do Banco de Dados no SQL Server

Divisão de arquivos Arquivos de Logs: Usar RAID 10 ou 1. Bancos de Sistema: Pode usar RAID 1; Não existe a necessidade de separar Dados e Logs.

Divisão de arquivos Banco de Dados TempDB: Usar RAID 10 ou 1; Criar arquivos de dados na mesma quantidade de CPUs do sistema *; Não existe a necessidade de separar arquivos de dados dos de log.

2- Desfragmentação do Banco de Dados

O que é fragmentação? Fragmentação em tabelas, de um modo simples e genérico, é normalmente interpretado como dados armazenados em blocos não-contíguos (Ex.: linhas encadeadas e migradas) ou blocos vazios entre outros blocos utilizados; Ocasionam má performance em diversas operações do BD, tais como FTS e até mesmo backups ou exports.

O que é desfragmentação? DESFRAGMENTAÇÃO de tabelas na prática é = Reorganizar dados em bloco contíguos + Eliminar buracos Desfragmentação pode melhorar performance e liberar espaço.

Desfragmentação no Oracle

Fragmentação no Oracle

Fragmentação em Tabelas Fonte: Various Aspects of Fragmentation (Doc ID 186826.1), My Oracle Support

Como descobrir buracos nas tabelas? Fonte: How to Find Fragmentation for Tables and LOBs (Doc ID 2132004.1), My Oracle Support

Como descobrir LEMs tabelas? Fonte: Treinamento Database Performance Tuning da OraMaster / FABIOPRADO.NET

Principais métodos p/desfragmentar 1. Package DBMS_REDEFITION: Eficiente, pode ser feito online, mas requer espaço extra e é complicado de usar; 2. ALTER TABLE MOVE TABLESPACE: Muito eficiente, mas requer espaço extra; 3. CREATE TABLE AS SELECT (CTAS): Muito eficiente, mas requer espaço extra e gera trabalho adicional para recriar/renomear constraints;

Principais métodos p/desfragmentar 4. Export, TRUNCATE, Import; Muito eficiente, mas gera indisponibilidade; 5. SHRINK; Eficiente, pode ser feito online, fácil de usar, mas requer alguns cuidados e possui limitações.

SHRINK Principais características do SHRINK: Elimina blocos vazios (não utilizados) e pode reduzir a qtde. de LEMs dos segmentos; Otimiza operações de FTS; É executado em modo ONLINE e pode atualizar índices; Não necessita de espaço extra e não invalida cursores; Executa reorganização interna através de INSERTs e DELETEs internos, mas não dispara triggers; Pode fazer a desfragmentação e movimentação da HWM em processo separados.

SHRINK Cuidados e restrições: Não pode ser usado em segmentos de UNDO, tabelas clusterizadas e tabelas com colunas LONG; Deve-se habilitar ROW MOVEMENT na tabela e só funciona em tablespaces com ASSM; Pode desbalancear índices btree ou aumentar o seu fator de clusterização, por isso, neles, muitas vezes pode ser necessário fazer um REBUILD (ver artigo Quando devo reconstruir ou "fazer REBUILD" de índices?: https://goo.gl/9ancld) neles depois.

Como usar o SHRINK?

Desfragmentação no SQL Server

Fragmentação de Índices A fragmentação no SQL Server é medida pela fragmentação dos índices. Para desfragmentar um índice, vc pode reorganizá-lo ou reconstruí-lo A fragmentação pode ser verificada pela SYS.DM_DB_INDEX_PHYSICAL_STATS Reconstrua os índices com mais de 30% de fragmentação e mais de 100 páginas. Reorganize os que tiverem com mais de 10% e menos que 30% de fragmentação e mais que 100 páginas Atualize as estatísticas com mais de X dias de idade.

Fragmentação de Índices Para reconstruir um índice utilize: ALTER INDEX [ind_name] ON [schema_name].[tab_name ] REBUILD WITH (FILLFACTOR = 80) Para reorganizar um índice utilize : ALTER INDEX [ind_name] ON [schema_name].[tab_name ] REORGANIZE Para atualizar uma estatística de um índice, utilize: UPDATE STATISTICS [schema_name].[tab_name] ([@ind_name] Para atualizar todas as estatísticas de uma tabela, utilize: UPDATE STATISTICS [schema_name].[tab_name] Para atualizar todas as estatísticas de um database, utilize: EXEC sp_updatestats

Compactação de Arquivos (SHRINK) Move as páginas com dados para o início do arquivo e as vazias para o final, indiferente de ordem; Em arquivos de Dados é maléfico, pois fragmenta as tabelas e índices.

Compactação de Arquivos (SHRINK) O problema pode ser MINIMIZADO realizando um REBUILD INDEX após o SHRINK; Em arquivo de Logs pode ser benéfico, pois diminui os VLFs (Virtual Log Files). Pesquisem sobre VLF

3- Compressão de Dados em Tabelas

Compressão de Dados Tabelas compactadas apesar de consumirem mais CPU, economizam espaço em disco e reduzem a quantidade de I/O; Compressão de dados nas tabelas pode otimizar as consultas e deleções, mas normalmente degrada as atualizações e inserções.

Compressão de Dados No Oracle

Tipos compressão Tipos de compressão de tabelas: Basic Compression: Comprime de 2X a 4X operações de carga direta; Advanced Row Compression: Antigo OLTP e FOR ALL OPERATIONS. Comprime de 2X à 4X todas as operações DML. Fonte: Oracle Database Compression Best Practices, Cris Pedregal, CMTS Product Management Oracle Database Development June, 2015

Performance na compressão Fonte: Data Compression in Oracle, Carl Dudley, University of Wolverhamption - UK

Mais info sobre compressão

Compressão de Dados no SQL Server

Compressão de Dados Colunas Esparsas (pouco utilizada) valores NULL não ocupam espaço para saber quais colunas contém dados e quais estão preenchidas com NULL, são necessários 4 bytes extras para aquelas colunas que contém alguma informação.

Compressão de Dados Para criar a compressão por colunas esparsas, utilize a seguinte sintaxe durante a criação da tabela. CREATE TABLE Cliente ( IDCliente int PRIMARY KEY, NomeCliente varchar(50) NOT NULL, Empresa varchar(50) SPARSE NULL, PontosCliente smallint SPARSE NULL, ProfissaoCliente varchar(20) SPARSE NULL );

Compressão de Dados A compressão por colunas esparsas não se aplica a campos dos tipos: geography geometry image ntext text timestamp

Compressão de Dados Compressão por Linhas Redução da sobrecarga introduzida pela necessidade de armazenar metadados (pode aumentar a tabela) Utilização de estruturas de tamanho variável para o armazenamento de dados numéricos Armazenamento de sequências de caracteres utilizando estruturas de tamanho variável, evitando armazenar caracteres em branco quando colunas de tamanho fixo são utilizadas. (*char -> pseudo-varchar)

Compressão de Dados Compressão por Páginas Realizada em 3 etapas: Compressão por Linha Compressão por Prefixo Compressão por Dicionário

Compressão de Dados Compressão por Páginas Compressão por Prefixo Silvana -> Silva + na - > 5na (5 primeiros caracteres do prefixo + na ) Silva -> 5 (5 primeiros caracteres do prefixo) Silvina -> Silv + ina - > 4ina (4 primeiros caracteres do prefixo + ina )

Compressão de Dados Compressão por Páginas Após a compressão por prefixo, a compressão por Dicionário procura por sequências repetidas em qualquer lugar da página (ao contrário da compressão por Linha, que analisa uma coluna por vez) e armazena-as na estrutura CI - Compression Information.

Compressão de Dados Compressão por Páginas Compressão por Dicionário A compressão por Dicionário ainda tira proveito da compressão já realizada pela compressão por Prefixo Ao final do processo, a tabela teria os seguintes valores armazenados, reduzindo a somente 20 caracteres os 71 originais.

4- Estatísticas de objetos

O que são as EO? Estatísticas de objetos são informações sobre os objetos, tais como índices e tabelas (ex.: qtde. de linhas, média de bytes por linha, cardinalidade de colunas); As estatísticas permitem ao otimizador avaliar o custo de diferentes planos de pesquisa e escolher planos de alta qualidade, visando otimizar a execução de instruções SQL.

Estatísticas de objetos no SQL Server

Estatísticas Contêm informações sobre a distribuição de valores em uma ou mais colunas de uma tabela ou view indexada. Método padrão do SQL Server Auto Create Statistics, que só deve ser desabilitado se o DBA tiver certeza do que faz. Update statistics deve ser realizado periodicamente.

Estatísticas de objetos no Oracle

Coleta de estatísticas As estatísticas de objetos são coletadas automaticamente, em períodos diários, a partir do Oracle 10G; É importante ter estatísticas de objetos atualizadas para que o Otimizador monte um bom plano de execução; Faz parte do trabalho do DBA executar/configurar (quando necessário) estas coletas para que o BD tenha estatísticas mais precisas ou para garantir que elas ocorram.

Coleta de estatísticas Sempre que for necessário atualizar manualmente as estatísticas dos objetos, utilize a package DBMS_STATS; Para mais informações, leia o artigo Coletando estatísticas para o otimizador de queries do Oracle : https://goo.gl/m6oxh2

Estatísticas de Objeto Consultando estatísticas de objetos: Fonte: Treinamentos de SQL Tuning FabioPrado.net / OraMaster

Estatísticas de Objeto Atualizando estatísticas de objetos: Fonte: Treinamentos de SQL Tuning FabioPrado.net / OraMaster

Estatísticas de Objeto Atualizando estatísticas de objetos: Fonte: Treinamentos de SQL Tuning FabioPrado.net / OraMaster

Estatísticas de Objeto Configurando estatísticas de objetos: Fonte: Treinamentos de SQL Tuning FabioPrado.net / OraMaster

5- Performance de SQL X Stored Procedures

SQL X Stored procedures Cada vez que uma query é executada, uma análise do otimizador é necessária, a não ser que a query seja idêntica a outra que foi executada recentemente, pois o plano de execução estará em cache; Uma stored procedure é compilada e seu plano de execução é armazenado, não necessitando de otimização.

SQL X Stored procedures Além de mais rápida, a stored procedure diminui o perigo de SQL Injection, aumentando a segurança do banco de dados. A utilização de variáveis, ao invés de valores em hard code para queries é mais eficiente, pois a cada novo valor no hard code, um novo plano de execução é criado.

SQL X Stored procedures Exemplo de hard code. SELECT nome FROM clientes WHERE id = 5 SELECT nome FROM clientes WHERE id = 6 O melhor é usar DECLARE @VarID int Set @VarID = 1 SELECT nome FROM clientes WHERE id = @VarID

SQL X Stored procedures Utilize functions, stored procedures e packages para acesso/atualizações de dados (ao invés de instruções ad hoc). Estes objetos podem oferecer os seguintes benefícios: Facilitam a reutilização de instruções SQL; Forçam o uso de variáveis bind; Diminuem o tráfego de dados (round trips) na rede; Podem aumentar a eficiência das transações; Garantem a reutilização de planos de execução em memória; Podem ser pinadas (fixados) em memória.

SQL X Stored procedures

SQL X Stored procedures

SQL X Stored procedures

SQL X Stored procedures

Agradecimentos Aos nossos pais, por nos criarem A vocês, que conseguiram assistir a essa palestra até o final!

fabio.cotrim@gmail.com contato@fabioprado.net