Aprenda PL/SQL

Tag Archive: Tuning

Estou escrevendo esse texto para colocar meu parecer sobre o novo curso de SQL Tuning oferecido pela Nerv. Como eu participei da primeira turma de SQL Tuning, tenho o privilégio de compartilhar sobre o curso de antemão. Este é o segundo curso que eu faço na Nerv. O primeiro, você pode ver o review neste link.

Instrutor

O professor é o Ricardo Portilho Proni que é uma referência técnica no Brasil. Para quem não conhece, ele possui uma grande quantidade de certificações, incluindo Oracle ACE e palestrante em diversos eventos sobre Oracle. Possui uma experiência profissional muito grande. Sou totalmente suspeito em falar sobre o Portilho, pois quem me conhece, sabe que eu sou fã de carteirinha dele desde 2010. 😀

Nerv1Nerv2Nerv Certificados

A Turma

Tive a grande alegria de re-encontrar amigos e conhecer novos. Na turma estavam os seguintes alunos:
* Fernando Franquini (DBA Capin do certificacaobd.com.br. Atualmente DBA na Softplan )
* Eduardo Ribeiro ( DBA na UOL Diveo )
* Hugo Torralbo ( DBA no Itaú / Unibanco )
* Itagyba Kuhlmann ( Arquiteto de soluçoes na Pernambucanas )
* Thomas Glufke ( Oracle EBS Senior Developer na Dell Computers )
* Abaixo, o instrutor Ricardo Portilho ( Instrutor e Owner da Nerv Informática )

Turma SQL Tuning

O curso

São três dias de treinamento, alternando entre teoria, exemplos práticos, laboratório e muita troca de experiência. Como sempre, turmas pequenas.

O assunto Tuning é quase sempre um tabu, pois muita coisa pode afetar o comportamento do Oracle, mesmo em ambientes idênticos. É bem comum o profissional simplesmente “ir testando” algumas coisas pra ver se melhora a performance. É neste momento que o curso faz a diferença!

Como o Portilho mesmo disse, se o curso fosse sobre carros, “eu não vou te ensinar a pilotar, eu vou te ensinar a ser um mecânico!“. Isso é realmente verdade. O curso não é baseado em dicas, ou seja, receitas de bolo: “Se isso, faça aquilo”. É totalmente voltado ao funcionamento do otimizador, plano de execução, funcionamento e comportamento de índices e estatísticas, etc.

É realmente impressionante fazer um TRACE do otimizador e ver o que ele faz pra decidir qual plano de execução vai optar, e todas transformações que uma query sofre. Com os tópicos que estudamos, é possível analisar o motivo da demora e ajustá-las para ganhar performance.

Se você quiser saber mais detalhes de todos assuntos que são abordados, veja o link do curso aqui.

Opinião Pessoal

Já fiz alguns cursos de Tuning, mas até hoje nenhum deles foi tão aprofundado no assunto. Eu diria que o curso é voltado tanto pra DBAs como para desenvolvedores. É ideal se você já conhece algumas coisas sobre o assunto e quer ir mais a fundo.

Se você tiver a oportunidade de ir pra São Paulo e fazer este treinamento, tenho certeza que será um grande investimento e um upgrade na sua carreira.




A maioria das pessoas tem essas perguntas sobre Index Partition:

  • O que é um Local Index?
  • O que é um Global Index?
  • Quando você forçaria a criação de um Global Index em uma partition table?
  • Quando você recomendaria criar um Global Index em vez de um Local Index?

Para responder a essas perguntas….

1. O que é um Local Index?

Local Indexes particionados são mais fáceis de gerenciar, cada partição do Local Index está associado a uma partição. Eles também oferecem maior disponibilidade e são comuns em ambientes de DSS. Quando tomamos qualquer ação (MERGE, SPLIT,EXCHANGE etc) em um Local Index, isso impacta apenas aquela partição e as outras estarão disponíveis. Nós não podemos adicionar explicitamente um Local Index para uma nova partição. O Local Index será adicionado implicitamente a nova partição, quando for criada uma nova partição na tabela. Da mesma forma, não podemos dropar o índice local em uma partição específica. Ele pode ser dropado automaticamente quando nós dropamos a partição da tabela subjacente. Local Indexes podem ser UNIQUE quando a chave da partição é parte do índice composto. Unique Local Indexes são úteis para o ambiente OLTP. Podemos também criar bitmap indexes em tabelas, com a restrição de que os índices de bitmap deve ser local para a tabela particionada. Eles não podem ser Global Indexes.

SQL> CREATE TABLE employees
2 (employee_id NUMBER(4) NOT NULL,
3 last_name VARCHAR2(10),
4 department_id NUMBER(2))
5 PARTITION BY RANGE (department_id)
6 (PARTITION employees_part1 VALUES LESS THAN (10) TABLESPACE ODS_STAGE_DATA,
7 PARTITION employees_part2 VALUES LESS THAN (20) TABLESPACE ODS_STAGE_DATA,
8 PARTITION employees_part3 VALUES LESS THAN (30) TABLESPACE ODS_STAGE_DATA);

Table created.

SQL> declare
2 v_no number :=1;
3 begin
4 delete employees;
5 for i in 1..10 loop
6 insert into employees values(v_no,'name...',v_no);
7 v_no := v_no+1;
8 end loop;
9 end;
10 /

PL/SQL procedure successfully completed.

SQL>
SQL> create index idx_local on employees(last_name) local;

Index created.

SQL>


Leia mais…




Essa é para quem faz tunning de SQL. Digamos que você quer verificar se a criação de um novo í­ndice vai ser realmente usada pelo otimizador. Antes de criá-lo, você pode testar se ele resolverá seu problema atraves de INDICE VIRTUAL.
Leia mais…




Imagine que você rodou um SQL que está demorando muito. O Trace está desligado e você quer saber o que pode estar errado com o SQL. Com essa dica, você enxerga o plano de execução deste SQL.
Leia mais…