Postagens

Desfragmentação de dados - Defrag SQL Server

Imagem
A fragmentação no SQL Server é um processo decorrente de operações de insert, update e delete deixando a paginação de dados e a indexação comprometidas com dados gravados em regiões descontínuas e espaços vazios entre os setores. Isso é um problema antigo, desde o sistema operacional MS-DOS com as gravações de arquivos e remete ao mesmo conceito voltado a índices de banco de dados. Observação importante: a fragmentação ocorre nos índeces.  A fragmentação afeta o armazenamento e o desempenho das tabelas. Em breve, com toda evolução das IAs, isso irá acabar, ou deixará de ser manual. Mas por ora, o DBAs de plantão ainda serão acionados para resolver o problema. Não irei abordar conceitos intrisicamente técnicos ou descrevendo os processos internos do banco de dados para chegar a fragmentação. Ao invés disso, estou indo direto ao ponto como resolvemos o problema via T-SQL. Coloquemos dois objetivos em mente: redução da base de dados e melhoria de performance das consultas. A primeira...

STRING_AGG e função de melhoria FNC_Group_String

Imagem
A partir do SQL2017 uma função do tipo aggregate veio para facilitar as implementações de rotinas de banco de dados dos desenvolvedores: STRING_AGG. Antes desta função, precisávamos construir uma sequência de variáveis e tabelas temporárias com  updates dentro de while para chegar ao mesmo resultado.  O STRING_AGG(<expressão>, <separador>) concatena strings lado a lado dentro de uma sequência de registros agrupados pelo GROUP BY, separando-as por um separador definido pelo desenvolvedor no segundo parâmetro da função. Os seguintes exemplos ilustram melhor o conceito: i) Na tabela de estoque de fios (tabela Swd_Est_Fios) tenho uma lista de códigos de fios (campo CodFio) e quero agrupá-los para demonstrar em uma coluna apenas todos os códigos de etiquetas (campo Etiqueta) de cada fio que entraram em uma determinada data (campo Data): SELECT CodFio, STRING_AGG (Etiqueta, ', ' )  FROM Swd_Est_Fios WHERE Data= ' 2025-01-20 ' GROUP BY CodFio O resultado será: Fi...

Importação de arquivos CSV

Imagem
 Neste post quero apresentar o recurso de importação de arquivos CSV para o banco de dados do SQL Server. A ideia aqui não é demonstrar o recurso de Importação e Exportação do SQL Server (que é muito intuitivo utilizar), mas demonstrar como fazer isso via script , utilizando código Transact-SQL (T-SQL). Arquivos CSV é um padrão bem útil e antigo, utilizado para fornecer dados em formato flat , sem criptografia ou qualquer codificação de dados. Isto significa que você pode abri-lo no bloco de notas que vai conseguir ler os dados. O próprio Excel abre o formato CSV sem convertê-lo para o formato atual XLSX. Com uma pequena formatação disponível no Excel é possível visualizar os dados em linhas x colunas na disposição de planilha e salvá-lo como tipo XLSX para usar os recursos do Excel. Em alguns casos, especialmente com uso de um ERP, há a necessidade de importar este dados para o SQL Server em forma de uma nova tabela. Este formato pode ser utilizado para transferência de dados de u...

Tabelas temporárias - Local x Global

Imagem
Neste  post , quero apresentar um recurso interessante do SQL Server: as tabelas temporárias globais . Talvez você já conheça o recurso de criação de tabelas temporárias : usando o caracter  # ( hastag , ou antigamente, sustenido) ao criar uma tabela prefixada por este caracter, os dados inseridos nesta tabela poderão ser visíveis durante toda a conexão que está trabalhando. Esta tabela somente existe para a conexão atual. Ao finalizar, a tabela deixará de existir. O que talvez ainda não conheça é que se usar dois caracteres ##, sua tabela será global, ou seja, todas conexões abertas poderão enxergá-la. Na figura 1, a conexão 1 está criando 3 tabelas temporárias : #Tmp_Local, ##Tmp_Global, #Tmp_Local_2. Figura 1 - Criação das tabelas temporárias na conexão 1 Ao visualizar as tabelas criadas (figura 2), todos os resultados são visualizados. Figura 2 - Visualização das tabelas temporárias na conexão 1 Na figura 3, a conexão 2 está criando apenas 1 tabela temporária : #Tmp_Loca...

Performance SQL Server - tempdb

Imagem
Neste post , apresento como aumentar o tamanho inicial do tempdb .  Mas porque aumentar o tamanho inicial? O tamanho já não é autoincremental? Sim, o tempdb é autoincremental e aumentar automaticamente o seu tamanho conforme a necessidade de uso do SQL Server. Porém, isso toma transações que o SQL Server solicita para incrementar o tamanho. Deixar um tamanho fixo grande suficiente para que possamos trabalhar com as bases diminui instruções desnecessárias do SGBD durante tempo de execução. Além do mais, devemos garantir que o servidor de banco de dados tenha espaço suficiente para crescer. Então, este é o primeiro item a observar: garanta que seu HD ou SSD tenha espaço suficiente para que o SQL Server possa usufruir das gravações e leitura de dados. Espaço livre de 4Gb no HD, por exemplo,  vai comprometer consideravelmente a performance do SQL Server. Garanta ao menos uns 70Gb de espaço. Isso estou considerando que você esteja com uma base de produção de uns 20 - 50Gb. Se for m...

Performance SQL Server - Índices

Imagem
Sobre o tema "Performance SQL Server" ( Tuning SQL Server) quero fazer uma série de posts para demonstrar os métodos de melhoria de desempenho do banco de dados em relação aos front-end' s que recuperam os resultados e exibem aos usuários finais.  Neste primeiro post , tratarei sobre a criação de índices. Não apresentarei aqui sobre nenhum front-end , mas em futuros posts explicarei sobre o Profiler para obter as instruções utilizadas por qualquer front-end que esteja interagindo com o SQL Server. O primeiro ponto a esclarecer é que a criação de índices para uma base de baixa performance é um estudo de caso de cada instância em particular. Isso quer dizer que não adianta encontrar um índice que melhora o desempenho de uma base e que podemos sair distribuindo a todos os clientes que estejam utilizando mesmo software . Algumas vezes sim, se reaproveita.  Por isso, o primeiro passo é verificar o que o SQL Server desta instância que estamos analisando nos diz sobre algum SE...

Backup / Restore - via T-SQL

Imagem
Neste post vou descrever o método de backup compactado com código Transact-SQL com o mesmo efeito da postagem anterior de modo visual. A vantagem em codificar é de agendar a execução por qualquer aplicativo disponível, como o Agendador do Windows ou mesmo o SQL Agent nas versões em que este está instalado. E para quem estiver desenvolvendo um programa de backup, também será bastante útil para otimizar a execução. Vale ressaltar que a versão do SQL Express não possui a compactação, visto que a base somente vai até 10Gb. O próprio backup compactado é desnecessário neste caso. Na figura 1, apresento 5 comandos práticos para backup / restore / attach de base. Estou usando os exemplos em duas instâncias diferentes do SQL Server: 2014 (que é Express) e outra 2019 (que é Developer). Fiz as próprias descrições nos comentários do comando e relaciono abaixo o texto para você testar no seu Microsoft SQL Server Management Studio.  O código aqui, se aplica a bases simples, sem clusterização ou...