Collation Diferentes–Seek ou Scan ?
Republicação de Luan.Moreno A.k.a [SQL Soul]:
Introdução
O Collation no banco de dados tem um papel fundamental, ele provém regras de ordenação, e propriedades para utilização de ascento sensitivo/case sensitivo. Os collations são usados para tipos de dados caracteres como CHAR, VARCHAR…. O Collation do banco de dados é configurado durante a instalação da instância do banco de dados.
Quando um Collate é selecionado para a instância , banco de dados, campo na tabela, ou expressão os caracteres passam a possuir características únicas.
[Webcast] Instalando e configurando o SQL Server Failover Cluster
Pessoal é com grande prazer que anuncio dia 28/09 a partir das 20:00 o webcast Instalando e Configurando o SQL Server Failover Cluster que eu irei apresentar pelo user group SQL Server RS.
Se você quer aprender um pouco sobre o que de melhor em alta disponibilidade no SQL Server não percam.
Vejam a chamada em http://sqlserverrs.com.br/sqlserverrs/?p=299 e inscreva-se em https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032529833&Culture=pt-BR&community=0
Conto com a presença de todos vocês.
Dicas sobre o banco de dados do Protheus(Totvs)
Olá pessoal,
Esses dias meu amigo Leandro Ribeiro (blog | twitter) solicitou no Twitter dicas sobre o banco de dados do Protheus e então eu percebi que eu sabia vários detalhes e que poderiam ser muito útil para quem ainda não trabalha com esse produto, mas que um dia possa trabalhar. Para quem não sabe o Protheus é um dos maiores ERPs do mundo, é feito pela empresa brasileira Totvs e é líder no mercado nacional.
A grande vantagem do Protheus é que além dele ser bem completo ele é todo customizável, ou seja, você compra a licença do sistema e pode contratar um desenvolvedor para customizá-lo a seu gosto, já imaginou isso ? Já pensou se você pudesse fazer isso com qualquer software que comprasse ou utilizasse ? Pois é, por aí dá para sentir o poder do produto e dá para começar a perceber o porque ele é tão usado no mercado nacional, mas é claro que nem tudo é mil maravilhas e é obvio que esse produto tem seus pontos fracos e particularidades e é exatamente para discutir isso que esse seu amigo DBA aqui escreve esse post.
Vamos as dicas:
- Quase sempre o banco de dados se chama DADOSADV ou pelo menos começa com DADOS. Não me pergunte o motivo, pois eu não sei;
- A aplicação não acessa o banco de dados diretamente ela usa uma camada intermediária chamada Top Connect. O Top Connect é instalado no mesmo servidor que o banco de dados e a aplicação se conecta ao Top e o Top se conecta ao SQL Server;
- O Protheus é multiempresa, porém ao contrário do que estamos acostumado a ver nas modelagens onde a empresa é identificada com um campo dentro de cada tabela, o banco do Protheus é ao contrário e para cada empresa há uma tabela. É isso mesmo que você entendeu sim se a empresa tiver 1 matriz e 9 filiais o banco de dados terá 10 tabelas para funcionário, 10 tabelas para cliente, 10 tabelas para produto e assim suscetivamente, então imagine um cliente que tenha no mesmo banco mais de 100 empresas ?!?! Resumindo nesse banco há mais de 105.000 tabelas;
- O nome das tabelas não ultrapassam 6 caracteres e são representados da seguinte maneira: 3 primeiros caracteres é a família que aquela tabela pertence, os 2 próximos caracteres representa a empresa que aquela tabela pertence e o último caractere é reservado ao sistema, por exemplo a tabela de cliente da empresa 01 é a SA1010, da empresa 02 é a SA1020 onde SA1 é a família da tabela, 01 e 02 representa a empresa e o 0 no final é reservado. Como assim família ? Exemplo, cliente é SA1, fornecedor é SA2 e assim vai;
- O campo chave primaria das tabelas é sempre o mesmo, ou seja, todas as tabelas tem um campo chamado R_E_C_N_O_ que é auto-incrementado pelo Top Connect e que é a PK das tabelas;
- Os registros das tabelas nunca são deletados fisicamente. Todas as tabelas contém um campo chamado D_E_L_E_T_ e quando alguém excluí um registro no banco esse campo é preenchido com um *, então sempre que for fazer qualquer select lembrem-se de desprezar os deletados colocando no where a condição D_E_L_E_T_ = ”, ou D_E_L_E_T_ <> ‘*’. Esse conceito de exclusão lógica vem do DBF;
- Não existe campo DateTime nas tabelas. Todos os campo data são VARCHAR(8) e nunca são nulos e são sempre preenchidos com 8 caracteres em branco quando representam que estão vazios;
- Muito cuidado ao criar índices nas tabelas, pois se você criar em uma terá que criar em todas, por exemplo se criar um índice na tabela de cliente SA1XX0 lembre-se de replicar esse índice para as demais tabelas de cliente caso tenha;
- O Protheus trabalha com um dicionário de dados próprio que é onde são definidas as tabelas, campos e índices então em uma atualização de versão é feita uma checagem do dicionário de dados com a estrutura do banco de dados e tudo que não estiver definido no dicionário será apagado, seja campo, índice ou tabela, portanto ao criar um índice utilizado em um trabalho de Tuning eu aconselho a criar uma rotina que diariamente verifica a existência desse índice e então caso não exista mais crie-o novamente. Eu costumo colocar tudo dentro do step de um job que diariamente consulta a sys.indexes pelo nome;
- Nunca criei um campo em uma tabela sem antes passar para o dicionário de dados do Protheus, pois ao abrir uma tela que use a tabela onde o campo foi criado, essa tela irá travar por não ter o campo no dicionário;
- O desempenho das consultas não são grande coisa, pois a maioria dos desenvolvedores Protheus não tem grandes habilidades e conhecimento sobre indexação, então é sempre bom dar uma checada nas consultas mais lentas e dar um help para a galera de desenvolvimento;
- Uma forma de ganhar desempenho no banco é a compressão de dados a nível de página se for SQL Server Enterprise;
- Os bancos geralmente são enormes então é válido pensar em uma estratégia de particionamento das tabelas;
- Índices não usados e duplicados há muitos, então é válido analisar isso e repassar para os desenvolvedores. Nunca apague um índice sem antes apagar no dicionário, pois as telas fazem essa verificação também em sua abertura;
- O Top Connect não funciona em cluster e como é preciso instalá-lo no mesmo servidor do banco de dados, não será possível colocar ele no Service and Application do Cluster e quando ocorrer um Failover será necessário reiniciar o servidor de licença que fica geralmente em outro servidor, senão ele não voltará ao ar e a aplicação não abrirá.
Bom galera espero que essas dicas sejam úteis para todos. Conforme eu for me lembrando de mais coisas eu vou postanto.
Até mais.
Aprendendo SQL Server 2012 Always On
Olá,
Na versão do SQL Server 2012 uma das principais e mais esperadas features é o Always On que é a nova forma de implementar alta disponibilidade no SQL Server.
De forma resumida uma das coisas que mais me chamou a atenção no Always On é que você consegue implementar facilmente um cluster geográfico sem a necessidade de storage.
Para não deixar ninguém com águe na boca de como implementar essa nova feature meu amigo Nilton Pinheiro (site | twitter) publicou no seu canal do youtube uma série de vídeos que explica com mais detalhe do que é e de como fazer a implementação do Always On.
Eu ainda não tive oportunidade de implantar essa feature em produção em nenhum cliente e não vejo a hora que isso aconteça.
Aproveitem que não são todos os dias que se tem um conteúdo tão relevante e de altíssima qualidade como esse gratuito.
Parabéns Nilton Pinheiro.
