sexta-feira, 6 de julho de 2018

Eventos de auto-growth dos datafiles

Quando os datafiles estão configurados com propriedade "auto-growth" ou auto-crescimento, é possível identificar quando os eventos de expansão do arquivo ocorrem com o script abaixo.

Quando a quantidade de eventos for muito grande, pode gerar fila de espera de I/O, e a sugestão é colocar um tamanho maior como parâmetro de crescimento.

Como recomendação, não utilizar percentuais, mas sim valores fixos, como 64MB por exemplo.

declare @curr_tracefilename varchar(500);
declare @base_tracefilename varchar(500);
declare @indx int;

select @curr_tracefilename = path from sys.traces where is_default = 1;
set @curr_tracefilename = reverse(@curr_tracefilename);
select @indx  = patindex('%\%', @curr_tracefilename) ;
set @curr_tracefilename = reverse(@curr_tracefilename) ;
set @base_tracefilename = left( @curr_tracefilename,len(@curr_tracefilename) - @indx) + '\log.trc'; 
select
servername as [sql_instance],
databasename as [database_name],
filename as [logical_file_name],
(duration/1000) as [duration_ms],
convert(varchar(50),starttime, 100) as [start_time],
cast((integerdata*8.0/1024) as decimal(19,2)) as [change_in_size_mb]
from ::fn_trace_gettable(@base_tracefilename, default)
where eventclass between 92 and 95
order by databasename, starttime desc;
go

Abcs!

quarta-feira, 9 de agosto de 2017

Tempo de execucao de um comando no Management Studio x JOBs

Olá,

uma situação não muito comum, mas que pode arruinar com o plano de execução das suas Queries, principalmente Stored Procedures, é sobre a utilização das opções de usuário no início do bloco de execução na aplicação-cliente.

Cenário:
- no Management Studio, executa-se uma Procedure, ou um SELECT em uma VIEW, e o código executa rapidamente;
- na aplicação-cliente (web ou desktop), ou até mesmo via JOB, a query leva horas pra terminar.

A lista de opções da sessão do usuário (USER OPTIONS) abaixo pode causar este comportamento:

ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
NUMERIC_ROUNDABORT
QUOTED_IDENTIFIER

Não cabe aqui explicar sobre o que cada opção significa, isto você encontra aqui:
https://technet.microsoft.com/pt-br/library/ms176031(v=sql.105).aspx

A questão levantada é a diferença no tempo de execução entre as várias aplicações-cliente que irão utilizar o código ou rotina criada.

Tais opções afetam os resultados e principalmente, o plano de execução criado para sua query originalmente.

Desta forma, sugere-se utilizar o mesmo conjunto de opções utilizadas na criação do objeto (procedure por exemplo) na chamada da sua aplicação-cliente.

Exemplo:
SET ANSI_NULLS ON
SET ANSI_PADDING ON
EXEC sp_minha_procedure

Como na maioria dos casos a falta dessas opções SET não causa nenhum problema, acabamos esquecendo da boa prática. Mas em algumas situações, pode fazer toda a diferença.

Todos os detalhes aqui:
https://technet.microsoft.com/pt-br/library/ms175088(v=sql.105).aspx

Boa sorte!

quinta-feira, 13 de julho de 2017

quinta-feira, 11 de maio de 2017

SQL Workbooks - Tips from Kendra Little

I found this Youtube Channel from DBA Kendra Little.

SQL Workbooks - https://www.youtube.com/channel/UCrJ8WLrVoKxL94mKv2akxTA

There's a lot of very rich and good information about SQL Server.

She also talks about career and other stuff, like this one:

How Does a DBA Build Confidence After Making Mistakes?
https://www.youtube.com/watch?v=aKQWoNJ3jPw

You'll find it very helpful !

Her Twitter handle: @Kendra_Little

Greetings!

quinta-feira, 13 de abril de 2017

Diego Nogare - Azure Machine Learning

Veja esta sessão interessantíssima do nosso amigo Diego Nogare, falando sobre o mais novo recurso da plataforma Azure.

Azure Machine Learning permite criar modelos preditivos utilizando qualquer fonte de dados.



Twitter: @DiegoNogare

Abcs!

Vitor Fava - SQL Server com Docker

Segue dica de video super interessante do nosso amigo Vitor Fava, falando sobre o uso do SQL Server na plataforma Docker.

Essa sessão conta com a participação especial do especialista Andre Kamman.
Twitter: @AndreKamman

Video: https://www.youtube.com/watch?v=MzXomsqqwxI

Blog: https://vfava.wordpress.com/

Twitter: @sqlservermaniac

Abcs!

sexta-feira, 7 de outubro de 2016

SQL Server - Trace Flags

As Trace Flags alteram o comportamento da instância, database ou sessão de usuário, quanto ativas.

Elas podem ser resultado de um "workaround" (contorno/solução) de algum "bug" conhecido, ou terem sido recomendadas pelo suporte da Microsoft, ou simplesmente porque o DBA/programador estão fazendo alguma experimentação no banco de dados.

Em todo o caso, elas só deveria estar ativas por algum motivo bem específico e devidamente fundamentado.

Faz parte do check-list do DBA verificar quais flags estão ativas, principalmente em um ambiente desconhecido, para apurar possíveis causas de problemas.

Isto pode ser feito executando-se o comando abaixo:

DBCC TRACESTATUS

A lista completa (e em crescimento) de trace flags pode ser encontrada aqui, num belíssimo trabalho de compilação da descrição e fonte de referência para as mesmas:

http://www.sqlservice.se/updated-microsoft-sql-server-trace-flag-list/

Abcs!

quarta-feira, 21 de setembro de 2016

Blog do Dirceu Resende

Recomendo o Blog de de desenvolvimento e SQL Server do nosso amigo Dirceu Resende:

http://www.dirceuresende.com/blog/

Abcs!

Windows 10 - Erro ao acessar compartilhamento no Linux

Depois destas últimas atualizações do Windows 10, perdi o acesso a um compartilhamento no Samba, segue abaixo dicas pra resolução do problema:

https://techjourney.net/cannot-connect-to-cifs-smb-samba-network-shares-shared-folders-in-windows-10/

Abcs!

segunda-feira, 1 de agosto de 2016

Big Data e Data Science: mini-curso gratuito de Diego Nogare

Nosso colega e MVP Data Platform, Diego Nogare, montou um mini-curso muito bacana, falando mais sobre os conceitos envolvendo o assunto do momento: Big Data.

Sao 12 aulas, segue abaixo link da primeira aula.

Fonte:
http://www.datascienceinstitute.com.br/mini-curso-introducao-a-big-data-e-data-science-aula-1/

Aproveite!

sexta-feira, 29 de julho de 2016

Terça de Dados - Canal DBA Brasil

Estou acompanhando um blog DBA Brasil, criado pelo amigo DBA Fábio Cotrim e alguns amigos:
http://www.dbabr.com.br/blog/

Achei interessante uma seção chamada Terça de Dados:
http://www.dbabr.com.br/blog/index.php/category/tercasdedados/

Acompanhe também pelo YouTube:
https://www.youtube.com/channel/UCAZxnrkOD_PTrfMK3-SbCLA/videos

Recomendo!

quarta-feira, 27 de julho de 2016

Management Studio 2016

Última versão do Management Studio, atualizada em 14/07/2016, com uma série de bug fixes.

Pode ser utilizado desde a versão 2008 até a versão 2016.

Link: https://msdn.microsoft.com/en-us/library/mt238290.aspx

terça-feira, 26 de julho de 2016

Propriedade do Database - Delayed Durability

A propriedade "delayed durability" do database muda a forma de gravação do log em disco.


Por padrão, a mesma está desligada (DISABLED), e o log é gravado em disco assim que possível, conforme a fila.

Quando esta opção é alterada para ALLOWED ou FORCED, a transação é marcada como gravada e o processo de gravação em disco é feito em background.

Fazendo um paralelo com o Oracle, trata-se da opção COMMIT WRITE... NOWAIT.

Neste momento, o banco está abrindo mão do "D" da regra ACID, e o banco pode se comportar de maneira inesperada, ficando inconsistente.

Em ambientes onde percebe-se o wait tipo WRITELOG, algum DBA pode recomendar que esta opção seja alterada, para resolver o gargalo do log de transações.

Eu preciso dizer que a alteração desta propriedade é extremamente desaconselhável.

Principalmente, se o seu sistema não tolera perda de dados (algum tolera ?)

Não digam que não avisei...

Mais informações:
http://sqlperformance.com/2014/04/io-subsystem/delayed-durability-in-sql-server-2014

domingo, 17 de julho de 2016

Autodidata

Olá,

se você é como eu, um autodidata nato, você não pode deixar de conferir o vasto conteúdo disponível nos sites abaixo, voltado para área de tecnologia:

EDX: https://www.edx.org/

Os cursos são gratuitos, com atividades semanais, e somente o certificado é pago, opcionalmente.

Uma parceria com diversas instituições, como MIT, Harvard, Berkeley, entre outras, portanto, o conteúdo é de altíssima qualidade.

O outro site é da própria Microsoft, com grupos de estudo para quem está se preparando para algum exame de certificação, com muito material disponível e muitos vídeos.

Born to Learn: https://borntolearn.mslearn.net/

Vão faltar horas no seu dia, aproveite !

quinta-feira, 14 de julho de 2016

Desastre - RPO e RTO

Créditos da Imagem: http://www.hill2dot0.com


No planejamento da estratégia de HA/DR (alta disponibilidade/recuperação de desastres), é muito importante definir os níveis de SLA com seu gestor e/ou cliente, aceitáveis para o negócio.

Se você ainda não definiu uma estratégia de BACKUP das informações, este é o momento.
Num evento de desastre, é inútil lamentar...

Os conceitos aqui apresentados não servem apenas para SQL Server, mas sim, se aplicam a todos os bancos de dados, e se extendem à todas as informações relevantes para o negócio.

Para simplificar então:

- RPO significa o PONTO de recuperação das informações.
Em outras palavras, em que momento as informações do backup estão 100% aproveitáveis.

- RTO significa o TEMPO de recuperação das informações.
Em outras palavras, quanto tempo vou levar para disponibilizar a aplicação para o usuário final, com todas as informações intactas.

Aqui há uma discussão sobre a Matriz de Responsabilidades e SLA, pois vários fornecedores podem estar envolvidos no processo de recuperação do ambiente, e cada um responde pela sua parte, e a sua atividade vai depender da atividade anterior.

Como exemplo, o sistema depende do banco de dados, que depende do sistema operacional, que depende de um componente (disco por exemplo), que depende do fabricante, e assim por diante.

No entanto, cabe a cada um dos envolvidos reduzir ao máximo os tempos destes 2 indicadores.

No caso de banco de dados, dependendo do tamanho total dos arquivos a serem recuperados, há que se balancear os tempos destes 2 indicadores.

Você pode ter que abrir mão de um em relação ao outro, de acordo com as necessidades do negócio.

Na sua estratégia de backup, considere a plataforma Azure da Microsoft, por exemplo, que pode lhe ajudar com uma solução de HA (alta disponibilidade).

Mais informações no blog do Vitor Fava:
https://vfava.wordpress.com/2013/08/20/dicas-para-dba-iniciante-estrategia-de-backup/

Mais informações no blog do Thomas LaRock:
http://thomaslarock.com/2016/07/survive-any-database-disaster/

Abcs!

quarta-feira, 13 de julho de 2016

Excellent article from Kimberly about Isolation Levels

If you want to understand better what are the main Isolation Levels available on SQL Server, this article from Kimberly Tripp (SQL Server MVP) is a must.

http://www.sqlskills.com/blogs/kimberly/locking-isolation-and-read-consistency/

It discusses about locking strategies and how to avoid blocking, one of the biggest issues developers have to deal it when designing applications for databases in general.

Have a good reading!

terça-feira, 12 de julho de 2016

SQL Server Video Archive

98 vídeos sobre diversos tópicos ref. SQL Server:

- Integration Services;
- Master Data Services;
- PowerPivot for Excel;
- Data Quality Services;
- Data Mining;
- Analysis Services;
- Microsoft Certified Master;
- e muito mais!

Só baixar e assistir, em 2 formatos disponíveis (WMV e MP4).

Imperdível!

Fonte: https://technet.microsoft.com/en-us/dn912438

segunda-feira, 11 de julho de 2016

SQL Server 2014 SP2 Liberado

Liberado novo Service Pack do SQL Server 2014, com uma série de correções e novidades.

Download: https://support.microsoft.com/en-us/kb/3171021

Novidade: Comando DBCC CLONEDATABASE

Utilizado para criar uma cópia da estrutura (schema) e das estatísticas de um database, para fins de análise de performance.

Como utilizar: https://support.microsoft.com/en-us/kb/3177838

Fonte: http://sqlserverupdates.com/news/sql-server-2014-sp2-released/

Em detalhes:
http://www.webtelligence-itc.net/webtelligence-itc-blog/2016/7/13/sql-server-2014-sp2-is-released-huge-improvements.html

Características disponíveis somente na versão Enterprise

Principais características disponíveis somente na versão Enterprise Edition (EE) do SQL Server:

- Always Encrypted: criptografia de colunas com informação sensitiva, através de chaves;

- Transparent Data Encryption (TDE): proteção de dados com criptografia (backups e arquivos de dados);

- AlwaysOn Availability Groups: solução HA/DR (Alta Disponibilidade e Disaster Recovery);

- Change Data Capture: log/auditoria de alterações em tabelas;

- Column Store Index: tipo de índice especial de coluna, voltado para Data Warehouse;

- Data Compression: compressão de dados de linhas e páginas de tabelas;

- Database Snapshot: backup instantâneo do database, para fins de relatórios históricos;

- In Memory OLTP: opção para colocar vários objetos diretamente em memória;

- Master Data Services Database: sistema de organização e padronização de dados de múltiplas fontes;

- Online Indexing: "rebuild" de índices sem gerar bloqueios (locks) para a aplicação;

- Oracle Publishing: permite utilizar o Oracle como publicador de uma replicação SQL Server;

- Mirrored Backups: backups espelhados para 2 locais, em paralelo;

- NUMA Aware: fácil integração com sistemas de arquitetura NUMA;

- Resource Governor: controle de CPU e Memória por usuário ou grupo;

- R Server: serviço fornecedor utilizado pela linguagem "R";

- Table and Index Partitioning: particionamento de tabelas e índices.

Fonte: https://msdn.microsoft.com/en-us/library/cc645993.aspx

sexta-feira, 8 de julho de 2016

Exames para Certificação SQL Server 2016

Segue informações sobre os exames (atualizados) para Certificação no SQL Server 2016:

https://borntolearn.mslearn.net/b/weblog/posts/certification-update-sql-2016

Abcs!

terça-feira, 5 de julho de 2016

DatabaseCast: Como ser um DBA ogro!

Ótimo podcast sobre banco de dados!

http://imasters.com.br/banco-de-dados/databasecast-dba-ogro/?trace=1519021197&source=author-archive

Vale a pena conferir, recomendo.

Não deixe de dar uma espiadinha na loja, com alguns brindes, como essa caneca que contém as funções de manipulação de datas em vários bancos.

http://www.zazzle.com.br/caneca_datassql_branca_325ml-168900583784663517

Abcs!

Migracao de Database SQL 2005 -> SQL 2016

Qual o nível de dificuldade de migração de um database que está na versão SQL 2005 para qualquer outra versão mais recente ?

A resposta é Zero!

Você pode simplesmente fazer um detach/attach ou restaurar um backup da versão mais antiga para a versão mais nova, sem a necessidade de passos intermediários.

Não se esqueça de rodar a atualização de estatísticas após a migração !

Mais informações:
http://www.sqlskills.com/blogs/paul/you-can-upgrade-from-any-version-2005-to-any-other-version/

terça-feira, 28 de junho de 2016

Planos de Manutenção

Olá, tudo bem?

Pra você que descobriu os "Maintenance Plans" ou "Planos de Manutenção" do SQL Server, onde você pode configurar os backups, reorganização diária de índices e tabelas, "shrink" etc...

Simplesmente pare!

Em especial, o "shrink", é extremamente desnecessário, e deve ser utilizado somente quando os registros das tabelas de um filegroup são apagados, e muito espaço foi liberado.

Vejo sistemas por aí, que fazem "shrink" dos databases toda noite... sem comentários.

Não acredita em mim ?

Segue uma referência de respeito, Brent Ozar:
https://www.brentozar.com/archive/2009/08/stop-shrinking-your-database-files-seriously-now/

Então faça um favor ao SQL Server, desligue o "auto-shrink" de todos os databases, e exclua esse Plano de Manutenção automático, que só demonstram a incompetência de quem está gerenciando este ambiente.

Crie um plano de atualização de estatísticas, e comece a monitorar a fragmentação dos índices, pra organizar uma reindexação/reorganização somente dos índices necessários, de forma periódica.

Esta aparente facilidade de gerenciamento do SQL Server, faz com que muitos DBAs deixem de fazer o trabalho básico de observação e compreensão do funcionamento do mesmo, e acabem por deixar as coisas no modo automático.

PS. O(s) fornecedor(es) do(s) software(s) ainda tem acesso ao usuário "SA" ou tem um usuário com a role "sysadmin" ? Passe no RH por gentileza...

quinta-feira, 23 de junho de 2016

Comparação SQL Server x PostgreSQL

Para pessoas sem restrições de aprender outro banco de dados, sem ficar dizendo o que "seu" é que é o melhor... segue um comparativo macro entre o PostgreSQL e SQL Server.

http://www.davewentzel.com/content/postgresql-sql-server-guy

Estou estudando este banco de dados e preciso dizer que é muito parecido com o SQL Server, principalmente na sua programação PL/pgSQL.

Nos meus treinamentos de SQL Server, sempre tem algum aluno que já utiliza o PostgreSQL e fala maravilhas do mesmo.

Abcs!

terça-feira, 14 de junho de 2016

3 conceitos pra simplificar a vida do desenvolvedor

Esses 3 conceitos sempre me acompanharam durante minha vida como programador, de forma inconsciente:

KISS: Keep It Simple Stupid
Ou seja, não complique, mantenha as coisas na sua forma mais simplificada.
Este conceito não serve apenas para desenvolvimento de software, mas sim, para a vida!

YAGNI: You Aren't Gonna Need It
Não coloque funções extras no software, que você nunca irá utilizar.
Foque no escopo!

DRY: Don't Repeat Yourself
Centralize funções ou blocos de programa que façam coisas parecidas.
Desta forma, no dia em que der problema ou se precisar expandir, você irá mexer num ponto único.

Abcs!

Fonte: http://pt.slideshare.net/jeppec/agile-ddd-cqrs

terça-feira, 31 de maio de 2016

Lumina - Banco de Dados

Olá a todos!

Gostaria de apresentar a empresa Lumina, de Blumenau/SC, especialista em monitoramento e projetos para banco de dados Oracle e SQL Server.

http://site.lumina.inf.br/servicos/banco-de-dados/

Com toda sua equipe certificada em Oracle e SQL Server, a Lumina também tem grande experiência em Projetos de:

- instalação de servidores Standalone, RAC e Cluster;
- migração de sistemas entre vários fornecedores de bancos de dados;
- análise abrangente de ambiente;
- tuning/performance de aplicações;
- políticas de segurança;
- desenvolvimento de rotinas de coleta de estatísticas;
- melhores práticas em rotinas de backup.

A Lumina também é revendedora de Licenças Oracle, Suporte Oracle Database e demais aplicações.

quarta-feira, 18 de maio de 2016

Processos - sp_who

Quais as sessões estão rodando na minha instância?

1. sp_who: procedure padrão e suportada pela documentação do SQL Server.

2. sp_who2: é uma variação da procedure "sp_who", com mais colunas.

3. sp_whoisactive: script desenvolvido por Adam Machanic, que retorna uma série de informações adicionais, tais como o percentual de andamento do processo. Script indispensável para qualquer DBA.

Autor: Machanic, Adam.
URL: http://sqlblog.com/files/folders/beta/entry42453.aspx

Management Studio - The application cannot start

Erro comum ao iniciar o SQL Server Management Studio:

"The application cannot start".

Executar o seguinte comando:

devenv /resetuserdata

Pronto!
Se tiver mais alguma dica, mande nos comentários.

Abraços e até a próxima!

sexta-feira, 13 de março de 2015

Blog de Desenvolvimento

A dica do dia é o blog sobre Desenvolvimento de Software, do colega André Luis Celestino:

http://www.andrecelestino.com/

Ótimos artigos, escritos de uma forma simples, clara e objetiva, sem deixar de ser abrangente.

Recomendo!


terça-feira, 27 de janeiro de 2015

Relatorio/Grafico dos Reservatorios de Agua em SP

Melhor página de acompanhamento do nível dos reservatórios de água em SP que eu vi até agora:

http://www.apolo11.com/reservatorios.php

Abcs.

sexta-feira, 12 de dezembro de 2014

Minion Reindex

Jen and Sean McCown, the most famous DBA couple, from Midnight SQL, created the ultimate indexing solution for professional DBAs called Minion Reindex.

They made a lot of documentation explaining the whole thing including tutorial videos.

And now the best: it's all FREE !

The installation process is super easy, just executing a single script on your server.

It creates all the Jobs for you, to run the reindexing procedures.

I just downloaded the solution and I am looking at the documentation.

I have to say, it's a very professional material.

It's also possible to change all the parameters desired, e.g. FillFactor, PadIndex, SortInTempDB.

Their credentials: Jen is a SQL Server MCM and Sean is SQL Server MCM and MVP.

Check it out at: http://www.midnightsql.com/Minion/


quarta-feira, 10 de dezembro de 2014

MVA - Academia Virtual Microsoft

A dica do dia é APRENDER !

Como aprender nunca é demais...

Se você tem tempo disponível, ou como eu, trabalha ouvindo as aulas da faculdade no fone de ouvido, pra maximizar o tempo, tenho uma excelente dica.

A Microsoft Virtual Academy - MVA:
http://www.microsoftvirtualacademy.com/

Neste portal da Microsoft é possível realizar cursos de todos os seus produtos.

No momento estou fazendo um curso de SQL Server 2012, em Português !

É simplesmente fantástico, e você acumula pontos ao longo dos cursos.

O resgate dos pontos acumulados garante a evolução nos níveis de associação:

Nível Bronze: de 0 a 99 pontos;
Nível Prata: 100 a 499 pontos;
Nível Ouro: 500 a 2999 pontos;
Nível Platina: 3000 pontos ou mais.

Bons estudos!

sábado, 6 de dezembro de 2014

Chave Primária vs Indice Unico (PK x UQ)

Olá aos visitantes!

Gostaria de dar uma dica super importante, aos que estão tendo dificuldades com índices em tabelas com muitos registros.

Todos aprendemos no processo de Normalização dos dados, a sempre criar uma chave primária (PK) em todas as tabelas do banco.

Pois bem, o que muitos não percebem, é que este é o momento mais importante na vida de uma tabela!

Tá, exagerei um pouco no transcendentalismo, mas é sério !

No momento em que estamos definindo a chave primária (PK) de uma tabela, talvez estejamos desperdiçando o índice mais importante para ela.

É de praxe criarmos uma chave primária (PK) na 1a. coluna da tabela, de Funcionários ou Clientes, por exemplo, sem nem ao menos pensar no que estamos fazendo.

Minha hipótese é que isto ainda ocorra, talvez por causa de um velho hábito que os programadores do sistema dBase (Clipper, Paradox, etc.) tinham na criação de tabelas, onde a chave primária garantiria a ordem física dos registros.

Como as tabelas do exemplo acima, teoricamente, contém poucos registros, isto não geraria muito impacto na performance.

Mas numa tabela gigante, por exemplo, com milhões de registros, a coisa fica séria.

Considere, por exemplo, uma tabela-header de Notas Fiscais de Venda fictícia, com os seguintes atributos:

Código, Data, CFOP, Cliente, Documento, Valor Total, Transportadora, Observações, etc.

Em 99% dos casos que já tive a oportunidade de visualizar a estrutura desta tabela, nos sistemas que costumo analisar em minhas consultorias, há uma chave primária (PK) definida na coluna Código.

Considero isto um erro grave, um desperdício de índice.

No SQL Server, há uma mudança de paradigma em relação ao sistema dBase, a chave primária (PK) cria automaticamente um Clustered Index, ou seja, um índice físico.

O índice físico é o mais utilizado e o mais rápido em qualquer busca de registros em uma tabela, pelo menos na maioria dos casos.

Desta forma, um índice físico em cima da coluna Código seria totalmente inútil, porque neste caso, acredito que a busca mais utilizada nos relatórios não seja nesta coluna em específico.

Se você simplesmente precisa garantir que não haja 2 registros com o mesmo código, sugiro que crie apenas um índice único nesta coluna, conforme abaixo:

CREATE UNIQUE INDEX iCodigo ON NotaFiscal (Codigo)
go

E para garantir a melhor performance nas suas buscas, considere por exemplo, as colunas Data e Cliente como as mais utilizadas nos relatórios do seu sistema.

Para elas então, crie um índice físico:

CREATE CLUSTERED INDEX iNotaFiscal ON NotaFiscal (Data, Cliente)
go

Os índices do tipo UNIQUE também permitem a criação de Chaves Estrangeiras (FOREIGN KEYS), ou seja, não perde-se assim, a 2a. principal função da chave primária.

Em um ambiente OLTP, onde ocorre muitas inclusões por minuto, ou até por segundo, sugiro uma análise mais cuidadosa, pois o tempo gasto na reorganização dos dados a cada Insert pode comprometer a estratégia, mas a dica ainda é válida.

Nos meus testes, em um ambiente controlado, a inclusão de 100 mil registros em uma tabela teste levou:

- 22 segundos: com um índice Clustered nas colunas Data e Cliente + índice Único na coluna Código;
- 27 segundos com uma Chave Primária na coluna Código.

Após a inclusão, foi realizado uma consulta básica com as colunas Data e Cliente na cláusula WHERE, e o Plano de Execução analisado:

- utilizando a estratégia sugerida, de índice Clustered nas colunas Data e Cliente, atingiu-se o objetivo esperado, ou seja, o Plano de Execução retornou a busca como Clustered Index Seek;

- utilizando o método antigo, de Chave Primária na coluna Código, o método da busca utilizado foi Clustered Index Scan, ou seja, o SQL precisou fazer um Scan em todas as linhas para obter o resultado.

Espero desta forma, ter demonstrado o melhor aproveitamento do índice Clustered de uma tabela, em colunas que realmente serão utilizadas nas buscas.

Concorda, discorda, alguma sugestão ?
Entre em contato!

Abraços e até a próxima.

SQL Server Radio

Hello SQL community !

There is a new way to be updated with the latest news from SQL Server.

Guy Glantser (@guy_glantser) and Matan Yungman (@MatanYungman) from Madeira SQL Server Services (www.madeirasql.com), a company from Israel had just created a online radio/podcast covering several topics of the product.

The radio site is: www.sqlserverradio.com

I was aware of the radio just today, and I am still catching up the 11 episodes created so far.

The conversation style is very casual and if you listen carefully you'll get a lot of great tips.

Until next time !

quarta-feira, 16 de julho de 2014

CRUD + Bootstrap + SQL Server

A dica de hoje é uma série de 19 vídeos feitos pela Glaucia Lemos, programadora WEB do Rio de Janeiro, onde ela explica passo-a-passo, os conceitos de CRUD em C#, utilizando o Bootstrap + banco de dados SQL Server.

Segue link dos vídeos:
https://www.youtube.com/watch?v=s5_83He6HmI&list=PLb2HQ45KP0WuY6bCj-kCSa2LvvnaThRQ_

Ela também escreveu alguns artigos para o portal Code4Coders:
http://code4coders.wordpress.com/author/glaucia86/

Twitter: @glaucia_lemos86

Abraços!

sexta-feira, 25 de janeiro de 2013

Triggers


Olá,

por mais "batido" que pareça o assunto, gostaria de reforçar o conceito de tratamento dos registros inseridos, atualizados ou excluídos através de TRIGGERS.

Assim como no trânsito existe a Direção Defensiva, em desenvolvimento de software existe a Programação Defensiva.

Seguindo este conceito, eu recomendo sempre utilizar o CURSOR nas triggers, desta forma fica garantido o tratamento correto dos registros atualizados.

Então, lá vai o "esqueleto" padrão de uma trigger com o tratamento correto dos registros:

-- Tabela monitorada: Produto
-- Evento monitorado: Insert
CREATE TRIGGER ProdutoInsert ON Produto
WITH ENCRYPTION
FOR INSERT
AS
BEGIN
  -- Declaracao de variaveis e cursor
  DECLARE @Codigo INTEGER
  DECLARE Cursor1 CURSOR
  FOR
    SELECT Codigo
    FROM INSERTED
  -- Abertura do cursor
  OPEN Cursor1
  FETCH NEXT FROM Cursor1 INTO @Codigo
  -- Loop dos registros enquanto nao houver erros
  WHILE @@FETCH_STATUS = 0
  BEGIN
    -- To-do...

    -- Proximo
    FETCH NEXT FROM Cursor1 INTO @Codigo
  END
  -- Fechamento do Cursor
  CLOSE Cursor1
  DEALLOCATE Cursor1
END
go

sexta-feira, 18 de janeiro de 2013

Dicas sobre o Protheus (Totvs)

Segue dicas valiosas sobre o database deste software...

http://4sqlserver.wordpress.com/2012/09/12/dicas-sobre-o-banco-de-dados-do-protheustotvs/

Achei no blog do Marcel Inowe:
http://4sqlserver.wordpress.com/

Tambei naveguei e encontrei dicas interessantes no blog do Leandro Ribeiro:
http://sqlleroy.com/

Abraco !

terça-feira, 5 de julho de 2011

Treinamento SQL Server em Chapecó/SC

Em parceria com o DEATEC, de Chapecó/SC, promovemos no período de 28/06 e 02/07 um treinamento em SQL Server.

O curso teve a carga horária de 22 horas, onde foram abordados em linhas gerais os seguintes tópicos: SQL Básico, Tabelas Temporárias, Stored Procedures, Triggers, Functions, SQL Dinâmico, Views, Transações, Tuning e Particionamento.

Além da ementa, todos os alunos tiveram oportunidades de trazer outros tópicos que foram abordados, e também dificuldades específicas encontradas dentro das empresas.

Também foi importante o repasse de uma metodologia baseada em um check-list, para apurar possíveis problemas que afetam a performance do banco de dados.

A ementa do curso foi formada através de uma pesquisa realizada com todos os associados que apontou dentre vários outros tópicos, informações sobre a necessidade de outros cursos técnicos, gerenciais e que envolvem o setor de TI e automação.

Foram 16 alunos de 16 empresas participantes:
- Aurora
- Auto Viação Chapecó
- Gama Tecnologia
- H & S
- H2J Soluções
- Infogen Sistemas
- Log e CIA
- Mantomaq
- Onsis Sistemas
- SGI Sistemas
- Unoesc Chapecó
- Vision System

"Formar uma turma enxuta, com um equipamento por participante, além de fazer tudo de forma prática, com a ementa baseada em pesquisa realizada anteriormente ao curso, foi importante pois impactou diretamente no nível de aprendizado dos alunos." ressalta Francis Marcel Post, presidente do DEATEC.

O aproveitamento do curso foi excepcional pois todos os participantes já tem contato com o SQL Server em suas atividades, o que oportunizou a abordagem de tópicos mais avançados.

Mais informações:
DEATEC - Polo Tecnológico de Chapecó/SC
www.deatec.org.br

quarta-feira, 15 de junho de 2011

Centro de Treinamento SQL 2008

Site com excelentes recursos para quem deseja conhecer as ferramentas do SQL Server.

http://technet.microsoft.com/pt-br/hh210186

[]s

Péricles.

domingo, 13 de março de 2011

Estudando para prova 70-433 de SQL 2008

Pessoal,

segue link interessante para aqueles que estão estudando para a prova de entrada do SQL 2008.

http://estudandopara70433.wordpress.com/

abraços,

Péricles.

sábado, 12 de março de 2011

Google Maps - Geocode pelo Endereço

Olá,

existe uma forma de retornar a Latitude/Longitude de um determinado endereço, utilizando-se a API do Google Maps, a partir do SQL Server.

No mundo real, acredito que tal aplicação não estaria dentro do banco de dados, e sim em uma aplicação CLR, porém, para ilustrar o recurso disponível no SQL, resolvi demonstrá-lo aqui.

O objeto a ser utilizado é o MSXML2.ServerXMLHttp, praticamente da mesma forma que é feito em AJAX, e é acessado através das Procedures de Automação OLE do SQL Server, e para isto, você precisa habilitar o recurso.

Testei no SQL 2005 e 2008, não sei dizer se funciona no SQL 2000.

Abstract: using the SQL Server to return the coordinates of an address at Google Maps with OLE Automation Procedures (XMLHttp GET).

Segue o código:

-- Para habilitar o uso de OLE
-- Activate OLE
sp_configure 'show advanced options', 1
go
reconfigure
go
sp_configure 'Ole Automation Procedures', 1
go
reconfigure
go

-- Variaveis
-- Variables
DECLARE @Response VARCHAR(8000)
DECLARE @XML XML
DECLARE @Obj INT
DECLARE @Result INT
DECLARE @HTTPStatus INT
DECLARE @ErrorMsg VARCHAR(MAX)
DECLARE @URL VARCHAR(MAX)
DECLARE @GPSLatitude NUMERIC(20,6)
DECLARE @GPSLongitude NUMERIC(20,6)
DECLARE @Endereco VARCHAR(100)

-- Endereco para teste
-- Test address
SELECT @Endereco = 'Av. Paulista, 500, Sao Paulo, SP'
SELECT @URL = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=' + @Endereco

-- Criacao do objeto XMLHttp
-- Object XMLHttp creation
EXEC @Result = sp_OACreate 'MSXML2.ServerXMLHttp', @Obj OUT

-- Envio do comando GET
-- GET command
BEGIN TRY
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL,
'Content-Type', 'application/x-www-form-urlencoded'

EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml', @Response OUT
END TRY
BEGIN CATCH
-- Controle de Erro com bloco Try/Catch
-- Error Control
SELECT @ErrorMsg = ERROR_MESSAGE()
END CATCH

-- Destruicao do objeto
-- Object free
EXEC @Result = sp_OADestroy @Obj

-- Transformacao do resultado em XML
-- Convert result in XML Datatype
SELECT @XML = CAST(@Response AS XML)

-- Leitura dos valores desejados (latitude/longitude)
-- Gathering coordinates from XML
SELECT @GPSLatitude = @XML.value('(/GeocodeResponse/result/geometry/location/lat) [1]', 'numeric(10,6)')
SELECT @GPSLongitude = @XML.value('(/GeocodeResponse/result/geometry/location/lng) [1]', 'numeric(10,6)')

-- Exibicao dos resultados
-- Results
SELECT @GPSLatitude AS [Latitude], @GPSLongitude AS [Longitude], @XML AS [XML]
go

[]s

Péricles.

sexta-feira, 4 de março de 2011

Five Classic Videos Every DBA Should Watch

Brent Ozar made a series of interviews and presentations that we should watch carefully.

It's actually Four videos...

http://www.brentozar.com/archive/2011/03/five-videos-every-dba-should-watch/

Péricles.

quarta-feira, 2 de março de 2011

Check DB

Olá a todos !

Só pra lembrar, comando básico para fazer uma checagem no database...
De vez em quando é bom !

ALTER DATABASE Pubs SET SINGLE_USER
go
DBCC CHECKDB (Pubs, REPAIR_ALLOW_DATA_LOSS)
go
ALTER DATABASE Pubs SET MULTI_USER
go

Troque "Pubs" pelo nome do database em questão.

O database deve estar em SINGLE_USER MODE.

O parâmetro importante do CHECKDB tem 3 opções:
- REPAIR_ALLOW_DATA_LOSS: esta forma de reparo pode causar a perda de dados.
- REPAIR_FAST: mantido por questões de compatibilidade, não faz nada estrutural.
- REPAIR_REBUILD: corrige estruturas que não irão causar perda de dados.

Abraços.

sábado, 19 de fevereiro de 2011

SQLRockstar - English SQL Bloggers

I found a very nice SQL Blog today from Thomas LaRock.

He made a special list of SQL Bloggers grouping them like the database names: Master, ResourceDB, MSDB, Model and TempDB.

He couldn't be more nerd...

It worths the look:
http://thomaslarock.com/rankings/#axzz1DIObJzHY

See ya.

terça-feira, 21 de dezembro de 2010

Qual versão do SQL estou rodando ?

SELECT @@version

Tabela mais completa, impossível:

SQL Server Builds


Abracos,

Pericles.

segunda-feira, 6 de dezembro de 2010

Compêndio XML

Olá a todos,

estava estudando para a prova 70-433 do SQL 2008, e segundo o descritivo da prova, caem várias questões sobre XML, então saí em busca de mais informações sobre o assunto.

Encontrei na revista Plugmasters, vários artigos do nosso colega Gustavo Maia Aguiar, inclusive cito o blog dele nos posts anteriores.

Fiz uma compilação dos artigos sobre XML que ele escreveu naquele site, e cheguei a um documento com 75 páginas !

São artigos sobre SQL 2005, porém servem muito bem de base para o 2008.

Achei que o resultado ficou interessante, e seria de muita importância que outras pessoas pudessem ter acesso a este material, então consultei o Gustavo, para obter uma autorização de publicação deste material no meu blog, e fiquei muito feliz em saber que ele gostou da idéia.

Bem, sem mais explicações, segue o link do material.
Na primeira página, estão listados os artigos que fazem parte do documento.

Arquivo:
Compendio XML -Gustavo Maia.pdf

São artigos muito bem ilustrados, inclusive com vários exemplos !

Blog do Gustavo:
http://gustavomaiaaguiar.spaces.live.com/

Revista Plugmasters:
http://www.plugmasters.com.br

abraços e até mais.
Péricles.

domingo, 8 de agosto de 2010

Ferramentas Úteis

Olá galera,

gostaria de citar duas ferramentas muito interessantes que utilizei recentemente.

A primeira me ajudou a recuperar uma base corrompida.
Depois de tentar todo tipo de comando DBCC no SQL Server, pesquisei e baixei algumas ferramentas de Recovery, e a única que resolveu o problema foi esta:

RECOVERY FOR SQL SERVER
http://www.officerecovery.com/mssql/index.htm


A segunda, como todos sabem, na versão Express do SQL 2005/2008, não está incluído o SQL Profiler, ferramenta essencial para detectar problemas de performance... encontrei esta aí, com uma interface muito parecida com o original inclusive:

ANJLAB SQL PROFILER

http://sites.google.com/site/sqlprofiler/

Vale a pena conferir.

abraços,

Péricles Sevegnani.

quinta-feira, 10 de junho de 2010

Performance Tuning no SQL Server

Olá,

gostaria de abordar um tema que está começando a gerar interesse de muitos administradores de banco de dados: "performance tuning" ou melhoria de desempenho.

Seu banco de dados está crescendo, o servidor fica cada dia mais lento, você começa a procurar as possíveis causas da lentidão, e se pergunta: onde está o problema ?

Raramente, a resposta é simples.
Encontrar um serviço/processo rodando no servidor que está tomando muito tempo de CPU; anti-virus; baixar a última atualização; são alguns exemplos... mas convenhamos, é praticamente uma loteria.

Na maioria dos casos, o problema está relacionado a vários fatores.

Sem olhar seu sistema, eu diria que 90% dos problemas relacionados a performance estão na sua aplicação.

Portanto, faça sua lição de casa, e revise seu código, seu modelo de dados, sua metodologia de acesso aos dados, a forma de exibição, etc.

No mais, segue abaixo uma lista de boas práticas para manter seu servidor com uma boa performance.

As primeiras dicas são as que estão ao seu alcance, e não há necessidade de desembolso... em seguida, outras dicas que exigem um pouco de investimento.

1) Básicas:
- mantenha seu Windows com o último Service Pack disponível;
- mantenha seu SQL Server com o último Service Pack disponível + pacotes acumulativos (CUs);
- disponha de uma janela de manutenção mensal, onde você vai reindexar sua base de dados, com base no índice de fragmentação das tabelas mais críticas;
- desfragmente seu disco rígido também, com o serviço SQL Server desligado;
- se o seu database é grande (acima de 10Gb por exemplo), separe as tabelas por Filegroups, e distribua quando possível, estes Filegroups em discos rígidos diferentes;
- configure o anti-virus do servidor SQL Server para não escanear as pastas onde estão os arquivos MDF/NDF e LDF dos databases, tampouco as pastas dos System Databases;
- não instale impressoras no servidor SQL Server;
- evite compartilhamento com outras aplicações, isole seu servidor única e exclusivamente para o serviço SQL Server;
- coloque os Filegroups em outro disco rígido, assim como o TempDB;
- desligue as opções de Auto-Close e Auto-Shrink de cada database;
- revise as tabelas, de forma que as mesmas tenham Primary e Foreign Keys bem definidas, índices que estejam sendo utilizados;
- centralize o código, utilizando Stored Procedures - esta prática também evita tráfego de rede, deixando o processamento no servidor e retornando somente o resultado para aplicação;
- evite o uso de Cursores, prefira operações baseadas em blocos (set-based);
- faça backups completos diariamente.

2) Avançadas ($$$):
- adquira mais discos rígidos, você vai precisar para RAID e também para separar os arquivos;
- prefira RAID nível 10 (espelhamento e distribuição);
- disco rápido é SAS (antigo SCSI) - fuja de IDE e SATA;
- se puder, adquira uma unidade Storage (SAN, EVA, etc);
- compre memória RAM: o ideal é que o SQL Server trabalhe sempre utilizando o "cache", portanto, quanto mais memória melhor;
- não há uma recomendação padrão, pois os ambientes podem variar muito (OLTP e OLAP), mas sempre faço uma conta básica: 2GB de RAM para o sistema operacional; e o restante, pelo menos 25% da soma do tamanho dos databases para Buffer Pool do SQL Server, isto evita paginação;
- ou seja, se a soma dos seus databases for de aproximadamente 100GB, seu servidor SQL deveria ter em torno de 24GB de RAM (mínimo de 16GB, e ideal 32GB);
- particione as tabelas "gigantes", utilizando o recurso do próprio SQL Server, "partitioned tables"; para isto você vai precisar da versão Enterprise.

É claro que os tópicos apresentados são muito superficiais, e necessitam de um estudo adequado para cada caso, a idéia aqui foi dar uma "pincelada" nos principais.

Sinta-se à vontade para entrar em contato, e expor suas dúvidas, ou contribuir com mais alguma dica, terei maior prazer em publicar.

Obrigado, abraços e até a próxima!
Péricles Sevegnani.

segunda-feira, 4 de janeiro de 2010

Certificação Microsoft 5 Estrelas

olá a todos, feliz 2010 !

Que seja um ano de muitas conquistas e realizações a todos nós !

Abro este ano com um post sobre certificação Microsoft, mais especificamente sobre:

- certificação Microsoft 5 Estrelas
http://www.technetbrasil.com.br/cincoestrelas/

- prova 70-441 (2005 Designer).
http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-441&locale=en-us

O programa profissional 5 Estrelas (SQL) é uma iniciativa da Microsoft para preparar os usuários para a prova 70-431 e levar conhecimento a todos que gostam do assunto.

Obtive a 5a. estrela neste programa há alguns dias, porém... nem tudo são flores, como explico abaixo.

Recentemente, me preparei para a prova 70-441 (Designing Database Solutions with SQL 2005) e não obtive a pontuação necessária (score = 634, needed = 700), o que me frustrou muito, de certa forma, neste final de ano.

Porém, eu prefiro ser reprovado por falta de capacidade do que aprovado por sorte.

Digo isso, porque às vezes a experiência, que nos dá uma certa dose de confiança, que aliada a um estudo autodidata, garante um bom conhecimento, porém não é credencial para sucesso na prova.

Percebo que preciso estudar (muito) e aprender mais sobre: Service Broker, Integration Services e Reporting Services. Aliás, deixo como dica para aquele que decide fazer a 70-441.

Já vi em alguns fóruns que a 70-441 é a mais difícil, em comparação a 70-442. De qualquer forma, acredito que isto depende do perfil do profissional.

Enfim... meu planejamento para este ano é obter o MCITP Developer e Administrator, e para isto são 4 provas... extremamente difíceis... mas, vamos lá!

abraços,

Péricles.