Fazendo Um Elefante Passar Debaixo da Porta - FISL
-
Upload
fabio-telles-rodriguez -
Category
Technology
-
view
874 -
download
0
description
Transcript of Fazendo Um Elefante Passar Debaixo da Porta - FISL
- 1.
2. Equilbrio 3. Flexibilidade
-
- Fcil de manter;
-
- Fcil de portar/ migrar;
-
- Fcil de entender;
-
- Fcil de mudar;
4. Desempenho
-
- Transaes/ Atualizaes;
-
- Conexes simultneas;
-
- Consultas complexas;
-
- Carga e exportao de dados;
-
- Suporte a grande volume de dados;
5. Segurana
-
- Evitar acesso no autorizado a informaes confidenciais;
-
- Evitar alteraes indesejadas;
-
- Evitar perda de dados;
-
- Evitar indisponibilidade;
-
- Recuperao rpida de desastres;
6. Leiam a Documentao Oficial
-
- DBAs: Leiam tudo!
-
- Sysadmins: ao menos III - Server Administration
-
- Desenvolvedores: Leiam ao menos as partes
-
-
- II - The SQL Language
-
-
-
- IV Client Interfaces
-
-
-
- V Server Programing
-
-
- http://www.postgresql.org/docs/manuals
7. Monitore sempre!
-
- Configurando os logs do PostgreSQL voc pode:
-
-
-
- Detectar gargalos de performance, erros nas aplicaes, falhas de segurana, etc;
-
-
-
-
-
-
- Encontrar sugestes para melhorar a configurao do seu servidor;
-
-
-
-
-
- Voc pode configurar onde, quando, como e o que logar;
-
-
-
- Voc ainda pode importar os logs para uma tabela dentro do seu banco de dados (Novo no 8.3).
-
8. Inteligncia da Aplicao no Banco de Dados
- Vantagens:
-
- Maior controle por parte do DBA;
-
- Maior velocidade em operaes que envolvem um grande volume de dados e um nmero limitado de clculos;
-
- Acesso padronizado para diversas aplicaes;
-
- Facilidade de manuteno;
-
- Baixa curva de aprendizado;
9.
- Desvantagens:
-
- Menor controle por parte do desenvolvedor;
-
- PL = Procedural Language, ou seja no orientado a objeto;
-
- Dificuldade em migrar aplicao para outros SGDBs;
-
- No existe COMMIT ou ROLLBACK dentro de uma funo;
-
- Cdigo no pode ser ofuscado;
-
- Alguns servidores de aplicao escalam processamento melhor que o PostgreSQL;
-
- Concentrao de carga de processamento no SGDB;
Inteligncia da Aplicao no Banco de Dados 10. Inteligncia da Aplicao no Banco de Dados
- Boas Prticas:
-
- Confie no PostgreSQL para reforar restries!
-
- Utilize funes para clculos em lote;
-
- Utilize gatilhos para auditar tabelas chave;
-
- Utilize funes e vises para aumentar a segurana no acesso a informaes sensveis;
-
- Utilize gatilhos, funes e vises para integrar dados de diferentes aplicaes;
11. Modelagem
-
- Estrutura de dados inteligentes e cdigo burro trabalham muito melhor que ao contrrio. (Eric Raimond)
-
- A origem de todo mal est da otimizao de performance precoce. (Leandro Dutra)
-
- Problemas de performance quando causados por falhas na modelagem podem demorar anos para aparecer.Quando surgem so quase insolveis.
12. Modelagem x Flexibilidade
-
- Use domnios para melhorar a semntica dos dados;
-
- Use seqncias para gerar nmeros nicos;
-
- Use vises para tornar o modelo lgico mais simples que o modelo fsico;
-
- Documentar DDL, DER e Dicionrio de Dados;
13. Modelagem X Segurana
-
- Use as restries de integridade: PK, FK, NOT NULL, CHECK;
-
- Use vises e funes para proteger o acesso a informaes sensveis.
-
- Nunca crie campos e tabelas do tipo FLEX;
-
- Documentar DDL, DER e Dicionrio de Dados;
14. Modelagem X Desempenho
-
- Evite desnormalizar o modelo de dados;
-
- Separe o modelo fsico do modelo lgico
-
- Nunca crie campos e tabelas do tipo FLEX;
-
- Cuidado com FRAMEWORKs e GERADORES DE CDIGO;
15. SQL X Desempenho
-
- Use funes para processar tarefas em lote;
-
- Agregue vrias consultas pequenas em uma nica consulta maior;
-
- Use o PREPARE ... EXECUTE quando no for possvel agregar vrias transaes pequenas e repetitivas;
-
- Use poucas transaes grandes no lugar de muitas transaes pequenas;
16. SQL X Desempenho
-
- Use ndices em campos muito utilizados em clusulas WHERE;
-
- Evite utilizar muitos ndices em ambiente transacional pesado;
-
- Evite operaes pesadas de DELETE e UPDATE;
-
- Evite o uso indiscriminado de gatilhos;
-
- Evite usar funes quando SQL puro resolve;
17. SQL X Segurana
-
- Use o nome do esquema em operaes DML e nomes explcitos para ndices, restries e seqncias em DDL ;
-
- Evite realizar operaes pesadas em ambiente grfico;
-
- Evite criar objetos em interfaces grficas;
-
- Antes de dizer que um SQL no funciona, teste sempre no psql;
18. SQL X Flexibilidade
-
- S utilize editores de texto puro;
-
- Use o psql com a opo i
-
- Escreva palavras reservadas em letra maiscula e nome de objetos em letra minscula;
-
- Use o nome do esquema em operaes DML e nomes explcitos para ndices, restries e seqncias em DDL ;
19. O PostgreSQL case sensitive!
- Ruim :
- CREATE TABLE FUNCIONARIO (
- IDFUNCIONARIO SERIAL PRIMARY KEY,
- NOME VARCHAR(50) NOT NULL,
- DEPTO INTEGER REFERENCES DEPTO(IDDEPTO));
- Pssimo :
- Create Table Funcionario (
- IdFuncionario Serial Primary Key,
- Nome Varchar(50) Not Null,
- Depto Integer References Depto(IdDepto));
20. USE MINSCULAS para nome de objetos
- Bom :
- CREATE TABLE funcionario (
- id_funcionario SERIAL PRIMARY KEY,
- nome VARCHAR(50) NOT NULL,
- id_depto INTEGER REFERENCES depto(id_depto)
- );
21. Explcito > Implcito
- timo :
- CREATE SEQUENCEhr. funcionario_seq;
- CREATE TABLEhr. funcionario (
- id_funcionario INTEGER
- DEFAULT NEXTVAL('hr.funcionario_seq'),
- nome VARCHAR(50) NOT NULL,
- depto INTEGER
- CONSTRAINTS
- funcionario_pkPRIMARY KEY (id_funcionario)
- USING INDEX TABLESPACE tbs_rh_index,
- funcionario_depto_fkFOREIGN KEY (id_depto)
- REFERENCESrh .depto(id_depto)
- ) TABLESPACE tbs_rh_table;
22. Explcito > Implcito
- Excelente :
- SET DEFAULT_TABLESPACE = tbs_rh_table;
- CREATE SEQUENCErh. funcionario_seq;
- CREATE TABLErh. funcionario (
- id_funcionario INTEGER
- DEFAULT NEXTVAL(' rh .funcionario_seq'),
- nome VARCHAR(50) NOT NULL,
- depto INTEGER
- );
- SET DEFAULT_TABLESPACE = tbs_rh_index;
- ALTER TABLE rh.funcionario ADD CONSTRAINTfunc_pk
- PRIMARY KEY (id_funcionario) USING INDEX func_pk_ix;
- ALTER TABLE rh.funcionario ADD CONSTRAINTfunc_depto_fk
- FOREIGN KEY (id_depto) REFERENCESrh .depto(id_depto);
23. Padres
-
- Aplicaes independentes de SGDB no existem...
-
- Use funes especficas do PostgreSQL quando:
-
-
-
- houver grande ganho de performance ou
-
-
-
-
-
- esta funo for chave para a sua aplicao;
-
-
24. Padres
-
- ... mas a necessidade de fornecer solues para mais de um SGDB existe!
-
- Use ao mximo o padro ANSI/SQL;
-
- Evite o uso de funes que no sejam em PL/pgSQL;
-
- Evite o uso de funes exticas que no tenham implementao similar em outro SGDB de mercado;
25. Estruturas Lgicas e Fsicas
-
- Esquema : estrutura lgica onde os objetos so criados. Todo objeto criado em um esquema;
-
- Tablespace : local fsico p/ armazenamento de tabelas e ndices;
-
- Banco de Dados : conjunto de esquemas e seus objetos.
-
- Cluster(initdb): conjunto de arquivos que compe uma nica instncia do PostgreSQL. Esta utiliza um nico conjunto de processos, memria, porta de rede, mas pode conter vrios bancos de dados;
26. Um Esquema Por Aplicao
- PostgreSQL no acessa nativamente outros bancos de dados;
- Crie um esquema para cada aplicao com seu prprio dono;
- Utilize um esquema separado para auditoria de vrios sistemas;
- Utiliza um esquema separado para monitoramento do DBA;
- Utilize o esquemapublicapenas para compartilhar dados entre diversas aplicaes;
- No coloque objetos noinformation_schema ,pg_catalogoupg_toast .
27. Dois tablespaces por aplicao
- Utilizar nomnimoum tablespace para ndices e um para tabelas;
- Mais fcil identificar o espao fsico ocupado pela aplicao;
- Mais fcil identificar arquivos de backup fsico;
- Mais fcil identificar uso e volume de ndices ou tabelas;
- Mais fcil fazer ajuste de I/O e desempenho;
- Uma camada a mais de segurana na criao de objetos;
28. Na Prtica
- No bash do Linux:
- #mkdir /postgresql
- #chown postgres /postgresql
- #su postgres
- $cd /postgresql
- $mkdir /postgresql/tbs_hr_index
- $mkdir /postgresql/tbs_hr_table
- $psql pgcon
29. Na Prtica
- No psql do PostgreSQL:
- pgcon=#REVOKE ALL ON TABLESPACE pg_default,pg_global FROM public;
- pgcon=#REVOKE ALL ON SCHEMA public FROM public;
- pgcon=#CREATE ROLE hr NOLOGIN;
- pgcon=#CREATE TABLESPACE hr_index OWNER hr LOCATION '/postgresql/tbs_hr_index';
- pgcon=#CREATE TABLESPACE hr_table OWNER hr LOCATION '/postgresql/tbs_hr_table';
- CREATE SCHEMA AUTHORIZATION hr;
30. Novos TABLESPACES?
-
- S faz sentido utilizar muitos tablespaces se voc tem ou pretende ter vrios discos!
-
- Tablespace temporrio em ambiente com muitas consultas pesadas (novo no 8.3!);
-
- Separar dados histricos e parties de tabelas pouco utilizadas em discos mais baratos;
-
- Tabelas e ndices onde o desempenho crtico (Usar RAID);
-
- Tabelas onde a disponibilidade crtica (Usar RAID);
31. Ambientes
-
- Produo: utilizado por todos usurios da aplicao;
-
- Homologao: aceite de novas verses pelo usurio, testes de performance;
-
- Teste: desenvolvimento de aplicaes;
-
- Laboratrio: teste de novas verses, patches e funcionalidades do SGDB.
32. Segurana
-
- Use transaes com BEGIN, COMMIT e ROLLBACK;
-
- Use proteo efetiva contra SQL Injection na aplicao;
-
- Use desconexo automtica por ociosidade;
-
- Use de tratamento de erros especial para erros de violao de restries de integridade;
-
- Nunca exiba mensagens de erro do banco na tela do usurio;
-
- Nunca confie em converses implcitas de tipo de dados;
33. Segurana
-
- Faa backup peridico do seu ambiente de produo e teste;
-
- Teste todas rotinas de backup e restaurao;
-
- Nunca utilize TRUST ou PASSWORD como mtodo de autenticao no pg_hba.conf;
-
- Acompanhe os logs de erro;
-
- No utilize codificao de caracteres SQL_ASCII;
-
- Durma!!!
34. Backup e Alta Disponibilidade
-
- Backups:
-
-
-
- Lgico (pg_dump)
-
-
-
-
-
- Fsico off line
-
-
-
-
-
- Fsico on line (via PITR)
-
-
-
-
-
- Snapshot (via storage)
-
-
-
- Alta disponibilidade:
-
-
-
- Stand By (via PITR);
-
-
-
-
-
- Replicao (via pg_pool, Slony, pg_cluster, etc)
-
-
-
-
-
- Cluster (PL Proxy + pg_bouncer)
-
-
35. Autenticando Aplicaes no PostgreSQL
-
- Autenticao Interna : um usurio do PostgreSQL por usurio da Aplicao;
-
- Autenticao Externa : um usurio do PostgreSQL por usurio da Aplicao com autenticao externa (LDAP, AD, etc);
-
- Autenticao via Aplicao : um usurio do PostgreSQL para todos usurios da aplicao;
36. Autenticao Interna
-
- Auditoria consistente;
-
- Uso de ROLEs para agrupar privilgios em objetos;
-
- DBA precisa criar usurios no banco de dados manualmente;
-
- Aplicao deve trocar senha do usurio na primeira vez em que ele se conectar;
-
- Um usurio e senha para vrias aplicaes;
-
- Se a aplicao for Cliente/Servidor,PostgreSQL no consegue impedir o usurio de se conectar por fora da aplicao;
37. Autenticao Externa
-
- Tem as mesmas caractersticas da Autenticao Interna com as seguintes diferenas:
-
-
-
- Administrao de senhas fica a cargo do Administrador de Sistemas;
-
-
-
-
-
- Se integra com os demais usurios da rede;
-
-
-
-
-
- mais complexo para ser configurado;
-
-
38. Autenticao pela Aplicao
-
- Auditoria deve ser implementada pela aplicao;
-
- Cadastro de usurios, senhas e permisses de inteira responsabilidade da aplicao;
-
- Senha de acesso ao PostgreSQL deve ficar dentro da aplicao;
-
- O ROLE da aplicaonuncapode ser mesmo que o ROLE do desenvolvedor ou o dono dos objetos da aplicao;
39. Autenticao Boas Prticas
-
- Aplicaes web no corporativas com muitos usurios devem utilizar autenticao pela aplicao;
-
- Aplicaes que precisam de pool de conexes devem utilizar autenticao pela aplicao;
-
- Aplicaes corporativas com 3 ou mais camadas devem preferir devem preferir autenticao externa;
-
- Mude opg_hba.confconforme o ambiente (produo, homologao, teste e laboratrio)
40. pg_hba.conf
-
- Sempre identifique o nome do banco de dados;
-
- Utilize SSL para encriptar o trfego de informaes pela rede.
-
- Utilize 'ident' apenas para conexes locais;
-
- Utilize MD5 para conexes remotas;
-
- Limite a faixa de IPs ao mximo:
-
-
-
- No caso aplicaes em 3 ou mais camadas,limite aos IPs dos servidores de aplicao;
-
-
-
-
-
- No caso de aplicaes Cliente/Servidor, limite a rede local que eles utilizam;
-
-
41. pg_hba.conf
-
- Separe as regras por grupos (ROLES) de usurios:
-
-
-
- DBAs;
-
-
-
-
-
- Desenvolvedores;
-
-
-
-
-
- Aplicaes (autenticao pela aplicao);
-
-
-
-
-
- Aplicaes (autenticao interna);
-
-
-
-
-
- Aplicaes (autenticao externa);
-
-
-
-
-
- Usurios especiais;
-
-
42. Vrios ambientes no mesmo servidor?
-
- Voc tem que garantir a disponibilidade de recursos (Processador, Memria e Discos) para o servidor de produo;
-
- Uma nica consulta mal feita pode comprometer a performance de todos usurios;
-
- No possvel virtualizar os canais de I/O ;
43. Quando utilizar mais de um banco de dados no mesmo cluster?
-
- Voc quer aproveitar os processos do cluster existente mas precisa comparar uma nova verso dos mesmos objetos;
-
- Voc tem aplicaes que precisam utilizar diferentes codificaes de caracteres;
-
- NUNCA coloque um ambiente de teste e produo no mesmo cluster!
44. Quando utilizar mais de um cluster no mesmo Sistema Operacional?
-
- Voc precisa utilizar um LC_COLLATE diferente;
-
- Voc precisa utilizar diferentes verses do PostgreSQL no mesmo servidor;
-
- NUNCA coloque um ambiente de teste e produo no mesmo SO!
45. Melhores Prticas
- Melhores prticas so diretrizes e no dogmas:
- Uma pessoasembom senso no se preocupa com melhores prticas;
- Uma pessoa com bom senso e pouca experincia procura aprender e utilizar as melhores prticas;
- Uma pessoa com bom senso e muita experincia sabequandono utilizar as melhores prticas;
46. OBRIGADO
-
- Dvidas, sugestes, correes, indignaes e cervejas so bem vindas!
-
- Fbio Telles Rodriguez,
-
- SAVEPOINT:http://www.midstorm.org/~telles
-
- e-mail:[email_address]