Baixe o app para aproveitar ainda mais
Prévia do material em texto
S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 1 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 2 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 3 SQL Server: Além do Conceito Blog Post Collection Diego Nogare – Edvaldo Castro – Demetrio Silva – Marcel Inowe – Marcos Freccia – Ivan Lima – Fabiano Amorim – Sulamita Dantas – Marcelo Fernandes – Cibelle Castro – Leandro Ribeiro – Luciano Moreira – Nilton Pinheiro – Tiago Balabuch – Felipe Ferreira S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 4 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 5 SQL Server: Além do Conceito Blog Post Collection Uma coletânea de posts escolhidos pelos próprios autores para te ajudar nas atividades do dia-a-dia. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 6 Editor: Diego Nogare Introdução: Edvaldo Castro Prefácio: Roberto Fonseca Capa: Felipe Borges Autores: Diego Nogare – Edvaldo Castro – Demetrio Silva – Marcel Inowe – Marcos Freccia – Ivan Lima – Fabiano Amorim – Sulamita Dantas – Marcelo Fernandes – Cibelle Castro – Leandro Ribeiro – Luciano Moreira – Nilton Pinheiro – Tiago Balabuch – Felipe Ferreira S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 7 Introdução Estar envolvido em uma comunidade é sempre mais importante e proveitoso de que viver de um modo isolado, seja nos âmbitos pessoais, profissionais e quaisquer outros. A comunidade técnica de profissionais que trabalham com produtos e ferramentas ligados à Plataforma de Dados da Microsoft é bem atuante e unida, isso faz com que muito conteúdo seja gerado, seja com vídeos, eventos, palestras, entrevistas e postagens em blogs. Com esta grande quantidade de material correlacionado, um grupo de amigos que aqui denominados "SQL Friends" teve a ideia de reunir seus trabalhos em blogs pessoais para criar uma coletânea destes posts e entregar em uma única publicação alguns textos de seus blogs. Os assuntos estão direcionados ao que os autores escrevem geralmente em seus blogs pessoais, podendo ou não estarem correlacionados entre si. O mais interessante, é que em uma mesma publicação, encontra-se um rico e variado conteúdo: Administração de Banco de Dados, BI, Performance dentre outros. “SQL Server: Além do Conceito - Blog Post Collection" foi idealizado para proporcionar uma experiência variada e com conteúdo idem, por isso aprecie o conteúdo e se tiver alguma dúvida ou sugestão, fique à vontade para entrar em contato direto com o autor, através do blog do mesmo que está informado no interior desta publicação. Um ponto importante a ser mencionado, este trabalho por ser voluntário e não ter um cunho com fins financeiros, teve uma tratativa diferente mas não menos cuidadosa com relação à um livro ordinário. Cada autor é o responsável direto pelo que escreveu e publicou na coletânea, mas todos estão juntos para proporcionar e compartilhar o conhecimento que adquiriram ao longo de vários anos de experiência. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 8 Apesar de NÃO ser um LIVRO formalmente falando, é possível absorver conhecimento técnico de alta qualidade escrito pelos autores, exatamente como pode ser encontrado em seus respectivos blogs. Aproveite bem, e quaisquer necessidades de contato, não hesite em nos enviar uma mensagem. Boa Leitura, Edvaldo Castro S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 9 Prefácio A presente obra foi cuidadosamente produzida como fruto de diversos anos de trabalho e conhecimento dos autores e corresponde a uma compilação aprimorada de posts publicados por eles no decorrer dos últimos meses e extensivamente testado como parte dos seus esforços em adquirir um conhecimento avançado e aprofundado. O Microsoft SQL Server 2014 é a próxima geração da Plataforma de Informação da Microsoft, com novas funcionalidades que entregam um melhor desempenho, expandem seus dados para a nuvem e provêem estruturas de BI poderosas. O SQL Server 2014 possui dezenas de novas funcionalidades e melhorias para DBAs, Desenvolvedores e especialistas em Business Intelligence. O material aqui apresentado tem como finalidade principal servir como base de pesquisa para aqueles que têm interesse em entender sobre novas funcionalidades e evoluir os seus conhecimentos. Neste livro, você verá como o SQL Server 2014 utiliza funcionalidades como o Read Committed Snapshot Isolation, Particionamento de Tabelas, Tuning no Sharepoint e SQL Server, Importação de Dados com o Integration Services, Auditoria no SQL Server, Erros de Instalação, Fragmentação do Transaction Log, uso de Snapshots, Deadlocks, conversões e uso de tipos de dados de Datas, Contadores de Performance e problemas de rede para entregar uma das melhores ferramentas para a tomada de decisão e gerenciamento de bancos de dados disponíveis no mercado. Temos a certeza que esta obra irá contribuir consideravelmente para a desmistificação de muitos tópicos considerados complexos, mostrando não apenas o significado destes tópicos, mas também mostrando o caminho a seguir para a utilização no dia-a-dia. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 10 Desejamos a todos que tirem o melhor proveito deste excelente trabalho e pedimos que nos informem quaisquer imprecisões ou incorreções que possam ser encontradas nesta obra através do email sqlalemdoconceito@outlook.com, para que possamos sempre manter disponível um texto útil e eficaz para o seu aprendizado. Roberto Fonseca S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 11 MVTech O Minha Vida (http://www.minhavida.com.br) é uma empresa com um grande propósito: melhorar a qualidade de vida da população. Queremos ser capazes de despertar nas pessoas o cuidado com a sua própria saúde. E quando falamos em saúde, nos referimos não só à prevenção ou ao tratamento de doenças, mas também a pequenas mudanças de hábitos capazes de transformar positivamente o dia a dia das pessoas. Queremos fazer diferença na vida das pessoas! Pensando nisso, nosso time de tecnologia criou o MVTech, uma iniciativa para disseminar conhecimento através de iniciativas de seus colaboradores, buscando o aprimoramento do mercado nacional. Com diversas ações como: artigos técnicos em blogs; matérias para portais; respostas em foruns de discussão, palestras em eventos, eventos presenciais e online, etc… afinal, somos apaixonados pelo que fazemos! por que não compartilhar nossa paixão? A criação do MVTech dá um passo adiante nesta linha de compartilhamento de conhecimento, passando a existir um canal oficial onde poderão ser encontrados grandes conteúdos. Seja bem vindo ao MVTech Alexandre Tarifa – Diretor de Tecnologia – Minha VidaS Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 12 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 13 Sumário EDVALDO CASTRO ............................................................................... 21 DBA por acidente X Command Line ...................................................................... 21 “DBA por acidente” ........................................................................................... 21 READ COMMITTED SNAPSHOT ISOLATION – Aprecie com moderação ................ 24 “RCSI – Aprecie com moderação” ...................................................................... 24 MUITO BOM...................................................................................................... 24 CENÁRIO 1 ........................................................................................................... 25 RCSI NO CASO DO SR. JOAQUIM ............................................................................... 25 MAS…................................................................................................................ 26 CENÁRIO 2 ........................................................................................................... 27 O PROBLEMA ........................................................................................................ 27 RCSI NESTE CASO .................................................................................................. 27 RESUMINDO: ..................................................................................................... 32 PRÓS E CONTRAS DO RCSI: ...................................................................................... 32 REFERÊNCIAS .................................................................................................... 33 Artigos técnicos: O guia definitivo (ou não) .......................................................... 34 MOTIVAÇÃO ......................................................................................................... 34 RISCOS E OPORTUNIDADES ....................................................................................... 34 QUANDO COMEÇAR? ............................................................................................. 35 PESQUISE ............................................................................................................. 35 LEIA E ESTUDE MUITO ............................................................................................. 35 FAÇA CITAÇÕES E REFERÊNCIAS .................................................................................. 36 REVISÃO PERIÓDICA (NÃO OBRIGATÓRIA) .................................................................... 36 O ARTIGO TÉCNICO ........................................................................................... 37 TIPOS DE ARTIGOS TÉCNICOS ............................................................................ 37 DOCUMENTAÇÃO ................................................................................................... 37 HOW TO(S) .......................................................................................................... 37 BENCHMARKS E EXPERIÊNCIAS .................................................................................. 37 O ARTIGO TÉCNICO EM SI.................................................................................. 38 ESTRUTURA .......................................................................................................... 38 LINGUAGEM ......................................................................................................... 38 PÚBLICO ALVO ...................................................................................................... 38 GRAMÁTICA ...................................................................................................... 39 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 14 EVITE OS ERROS MAIS COMUNS (DIGITAÇÃO, GÍRIAS, CONCORDÂNCIA, ETC) ......................... 39 SOLICITE REVISÕES (AMIGOS, COMUNIDADE, PARENTES, SR. JOAQUIM) ............................ 39 PRINCIPAIS PREOCUPAÇÕES .............................................................................. 40 SEMPRE ............................................................................................................... 40 NUNCA ................................................................................................................ 40 PUBLICIDADE ........................................................................................................ 40 FAÇA BARULHO ................................................................................................. 41 CONCLUSÃO ...................................................................................................... 41 DIEGO NOGARE ................................................................................... 42 Partition Table ...................................................................................................... 42 Particionamento de Tabelas .............................................................................. 42 CENÁRIOS/BENEFÍCIOS ............................................................................................ 44 DEFINIÇÕES/TERMINOLOGIAS ................................................................................... 45 CRIANDO FILEGROUP .............................................................................................. 48 CRIANDO PARTITION FUNCTION ................................................................................ 54 CRIANDO O PARTITION SCHEME ................................................................................ 56 CRIANDO A TABELA................................................................................................. 57 COMPARATIVO DE INSERÇÃO DE DADOS EM UMA TABELA COM COLUMNSTORE INDEX NO SQL SERVER 2012 ....................................................................................................... 58 DEMETRIO SILVA ................................................................................. 73 Tuning no SharePoint e SQL Server com o Developer Dashboard ........................ 73 Tunin no SharePoint com Developer Dashboard ............................................... 73 INTRODUÇÃO .................................................................................................... 73 CONFIGURAÇÃO .................................................................................................... 74 Veja a execução do script na figura 3: ............................................................... 76 Visualizando o Developer Dashboard ................................................................ 76 CONCLUSÃO ...................................................................................................... 80 Acessando dados do SharePoint com PowerPivot ................................................ 82 INTRODUÇÃO .................................................................................................... 82 REQUISITOS .......................................................................................................... 82 COMO FUNCIONA .................................................................................................. 82 IMPORTAR PARA O POWERPIVOT NO EXCEL ................................................................. 85 CONCLUSÃO ...................................................................................................... 91 Configurar envio de e-mail no SharePoint / SQL Server com o GMAIL ................. 92 S Q L S e r v e r : A l ém d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 15 PASSO 1: CONFIGURAR O SMTP SERVER NO WINDOWS 2008 ........................................ 92 MARCEL INOWE ................................................................................ 101 Dicas sobre o banco de dados do Protheus(Totvs) ............................................. 101 VAMOS AS DICAS: ................................................................................................ 101 MARCOS FRECCIA ............................................................................. 105 Importando arquivos excel usando o SSIS .......................................................... 105 T-SQL no SQL Server 2012 – Parte 1 .................................................................... 113 1) EXECUTE WITH RESULT SETS ....................................................................... 113 VAMOS VER COMO FUNCIONA? ............................................................................... 113 2) SEQUENCE .................................................................................................. 115 COMO UTILIZAR? ................................................................................................. 116 PASSO 1: CRIAÇÃO DA SEQUENCE. ........................................................................... 116 COMO UTILIZAMOS A SEQUENCE? ............................................................................ 116 RESULTADO. ....................................................................................................... 118 T-SQL no SQL Server 2012 – Parte 2 – Paginação de dados ................................ 120 CONSULTA 1 ....................................................................................................... 121 CONSULTA 2 ....................................................................................................... 122 IVAN LIMA ......................................................................................... 124 Inside The Machine – Introdução ....................................................................... 124 VELOCIDADE DO PROCESSADOR É TUDO? ................................................................... 124 REFERÊNCIAS: ................................................................................................. 128 Inside the Machine – Processadores................................................................... 129 INTRODUÇÃO .................................................................................................. 129 PROCESSADORES ................................................................................................. 129 OVERVIEW DA MICROARQUITETURA......................................................................... 129 CORE E UNCORE .................................................................................................. 130 PLANTA ............................................................................................................. 130 XEON E7 ........................................................................................................... 131 CORE I5 460M ................................................................................................... 132 MOORE’S LAW .................................................................................................... 133 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 16 COMPLEXIDADE ................................................................................................... 135 GPGPU ............................................................................................................ 135 CACHE............................................................................................................... 135 REFERÊNCIAS .................................................................................................. 135 Inside The Machine - Hyper-Threading (SMT) e SQL Server ................................ 137 TEORIA E PRÁTICA ................................................................................................ 138 MITO ................................................................................................................ 138 PROCESSADORES ................................................................................................. 138 REFERÊNCIAS: ................................................................................................. 139 FABIANO NEVES AMORIM ................................................................. 140 Join reordering e Bushy Plans ............................................................................. 140 INTRODUÇÃO .................................................................................................. 140 JOIN REORDERING E BUSHYPLANS ............................................................................ 140 BUSHY PLANS NO SQL SERVER ............................................................................... 141 STATISTICS IO: ................................................................................................. 144 PLANO ESTIMADO: ............................................................................................... 145 STATISTICS IO: ................................................................................................. 149 STATISTICS IO: ................................................................................................. 150 STATISTICS IO: ................................................................................................. 152 STATISTICS IO: ................................................................................................. 153 CONCLUSÃO .................................................................................................... 154 NOTA IMPORTANTE: ............................................................................................. 154 REFERÊNCIAS .................................................................................................. 154 SULAMITA DANTAS ........................................................................... 155 Policy Based Management ................................................................................. 155 MARCELO FERNANDES ...................................................................... 162 Solucionando Problemas: Error Failed to open loopback connection ao executar SP_READERRORLOG ........................................................................................... 162 INTRODUÇÃO .................................................................................................. 162 SINTOMA ........................................................................................................... 162 CAUSA .............................................................................................................. 162 SOLUÇÃO ........................................................................................................... 163 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 17 LEITURAS ADICIONAIS ............................................................................................ 164 Error to install SQL Server 2008 on Windows 2012............................................. 165 Token Bloat - Cannot generate SSPI context....................................................... 171 PROBLEMA ......................................................................................................... 171 COMO RESOLVER ................................................................................................. 176 EM CADA ESTAÇÃO ...............................................................................................176 LEITURAS ADICIONAIS ..................................................................................... 177 CIBELLE CASTRO ................................................................................ 178 Auditoria ............................................................................................................. 178 Descobrindo Auditoria no SQL Server 2008 ..................................................... 178 POR QUE UTILIZAR AUDITORIA? ............................................................................... 178 PODE SER FEITO ATRAVÉS DE SCRIPTS. ....................................................................... 179 NOTA 01: .......................................................................................................... 179 COMO O SQL SERVER AUDIT TRABALHA? .................................................................. 179 NOTA 02: .......................................................................................................... 181 NOTA 03: .......................................................................................................... 184 DATABASE AUDIT SPECIFICATIONS .................................................................. 184 NOTA 03: .......................................................................................................... 186 PASSA A PASSO DE COMO CRIAR UMA AUDITORIA........................................................ 187 FAREMOS ESSAS CONFIGURAÇÕES DO SERVER AUDIT ATRAVÉS DE TSQL E O MANAGEMENT STUDIO.............................................................................................................. 193 CRIANDO UM SERVER OU SERVER AUDIT SPECIFICATION. .............................................. 200 CRIANDO UM SERVER OU DATABASE AUDIT SPECIFICATION. .......................................... 206 CONCLUSÃO .................................................................................................... 213 REFERÊNCIAS .................................................................................................. 213 Performance e Desempenho .............................................................................. 215 System Monitor & SQL Profiler ........................................................................ 215 O QUE É O SYSTEM MONITOR? ............................................................................... 215 NOTA 1: ............................................................................................................ 215 NOTA 2 ............................................................................................................. 217 COMO CRIAR UM DATA COLLETOR SETS? .................................................................. 218 PARA CRIAR UM DATA COLLETOR SETS PERSONALIZADO, SIGA OS PASSOS ABAIXO: .............. 218 SQL SERVER PROFILER ..................................................................................... 225 O QUE É O TRACE? ............................................................................................... 225 NOTA 4: ............................................................................................................ 228 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 18 COMO APLICAR FILTROS NO SQL PROFILER? .............................................................. 230 PERFORMANCE X MONITORAMENTO ....................................................................... 231 DICA: ................................................................................................................ 231 CRIANDO TRACES ................................................................................................. 231 DICA *: ............................................................................................................. 239 CONCLUSÃO .................................................................................................... 239 REFERÊNCIAS .................................................................................................. 239 Restore Database com SSIS ................................................................................ 241 FTP COM WINSCP .............................................................................................. 242 EXECUTE PROCESS TASK ........................................................................................ 244 CRIAÇÃO VARIÁVEIS NO SSIS .................................................................................. 247 FOREACH LOOP CONTAINER ................................................................................... 248 EXECUTE SQL TASK (DELETE DATABASE) .............................................................. 250 EXECUTE SQL TASK (RESTORE DATABASE / USER PERMISSION) ............................ 253 EXECUTE PROCESS TASK (MODIFY NAME FTP FILE) ................................................ 255 LEANDRO RIBEIRO ............................................................................. 256 Fragmentação do Transaction Log - Parte I......................................................... 256 INTRODUÇÃO .................................................................................................. 256 TRANSACTION LOG ............................................................................................... 257 Fragmentação do Transaction Log - Parte II........................................................ 260 DICA: ................................................................................................................ 264 VAMOS TESTAR! .................................................................................................. 267 INFORMAÇÃO ADICIONAL ....................................................................................... 271 MELHORES PRÁTICAS: ........................................................................................... 271 LUCIANO MOREIRA ........................................................................... 273 O caso dos snapshots e data cache thrashing ..................................................... 273 DATA CACHE E O DATABASE SNAPSHOT. ......................................................... 273 SCRIPT 1 – CRIAÇÃO DOS BANCOS DE DADOS .............................................................. 273 SCRIPT 3 – RESULTADO DE IO PARA AS CONSULTAS ...................................................... 275 SCRIPT 4 – CONSULTANDO O DATA CACHE ................................................................. 275 DATA CACHE THRASHING ................................................................................ 276 SCRIPT 5 – CRIANDO DIVERSOS SNAPSHOTS E MAX SERVER MEMORY ................................ 276 SCRIPT 6 – UTILIZANDO O ESPAÇO DO DATA CACHE ...................................................... 277 SCRIPT 7 – DATA CACHE THRASHING ........................................................................ 278 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 19 Trigger causando deadlocks ................................................................................ 279 PERGUNTA: INDEXAÇÃO PODE ELIMINAR PROBLEMAS DE DEADLOCKS? .............................. 279 ENTÃO PERGUNTO: AONDE ESTÁ O DEADLOCK? ........................................................... 280 ENCONTRANDO O DEADLOCK .................................................................................. 280 MINIMIZANDO OS DEADLOCKS ................................................................................ 282 RESOLVENDO O PROBLEMA (DE VERDADE) ................................................................. 284 CONCLUSÃO .................................................................................................... 285 VARCHAR(MAX)vs. TEXT (Sintaxe?) ................................................................... 287 SCRIPT 01 – DUAS TABELAS IDÊNTICAS, VARCHAR(MAX) E TEXT ................................ 287 SCRIPT 02 – ANALISANDO AS UNIDADES DE ALOCAÇÃO ................................................. 289 SCRIPT 03 – SP_TABLEOPTION PARA LARGE VALUES ..................................................... 289 NILTON PINHEIRO ............................................................................. 293 Trabalhando com datas e conversões no SQL Server ......................................... 293 OS TIPOS DE DADOS DATETIME E SMALLDATETIME ..................................................... 293 ENTENDENDO O ARMAZENAMENTO DOS VALORES DATA E HORA...................................... 294 TRABALHANDO COM A PARTE DATA .......................................................................... 296 LISTAGEM 1. SCRIPT PARA CRIAÇÃO E POPULAÇÃO DA TABELA DE PEDIDOS ........................ 297 FUNÇÕES E CONVERSÕES ....................................................................................... 299 TRABALHANDO COM A PARTE HORA ......................................................................... 302 CONCLUSÃO .................................................................................................... 305 Monitorando alterações de Dados com a Cláusula OUTPUT .............................. 306 DICAS PARA A UTILIZAÇÃO DO OUTPUT ................................................................... 311 TIAGO BALABUCH ............................................................................. 313 PERFORMANCE COUNTER - SUBSISTEMA DE DISCOS ......................................... 313 UTILIZAÇÃO DE DISCO ........................................................................................... 313 OS CONTADORES UTILIZADOS PARA MEDIR AS INFORMAÇÕES SÃO: ................................... 313 TEMPO DE RESPOSTA ............................................................................................ 314 REFERÊNCIAS: ................................................................................................. 315 PROBLEMAS DE REDE – ASYNC_NETWORK_IO ................................................... 316 OBJETIVO ........................................................................................................... 316 ANÁLISE INICIAL – BANCO DE DADOS: ...................................................................... 316 ANÁLISE INICIAL – WEB: ....................................................................................... 317 ANÁLISE DETALHADA ............................................................................................ 318 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 20 OS CONTADORES UTILIZADOS FORAM:....................................................................... 318 AMBIENTE DE BANCO DE DADOS .................................................................... 319 AMBIENTE WEB............................................................................................... 322 RESOLUÇÃO ........................................................................................................ 323 CONCLUSÃO .................................................................................................... 323 REFERÊNCIAS: ................................................................................................. 324 Suspect database - MSDTC in-doubt transaction ................................................ 325 PROBLEMA ...................................................................................................... 325 RESOLUÇÃO .................................................................................................... 326 CONCLUSÃO .................................................................................................... 327 REFERÊNCIAS: ..................................................................................................... 328 FELIPE FERREIRA ............................................................................... 329 A carreira de DBA está morrendo? ..................................................................... 329 NO MERCADO DE HOJE NÓS TEMOS DOIS PROBLEMAS MUITO COMUNS: ............................ 329 Criando um datawarehouse para testes ............................................................. 331 PASSO 1: ........................................................................................................... 331 PASSO 2: ........................................................................................................... 332 PASSO 3: ........................................................................................................... 333 PASSO 4: ........................................................................................................... 334 S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 21 Edvaldo Castro www.edvaldocastro.com DBA por acidente X Command Line “DBA por acidente” Começo o texto de hoje falando um pouco deste que é um termo muito comum em rodas de conversas de DBAs e profissionais que se dedicam a fazer bem feito e com excelência aquilo que se propõe a fazer, neste caso mais especificamente falando, ser um DBA cada vez melhor… Abro aqui um parêntese para indicação de leitura – “How to become an exceptional DBA”. O “DBA por acidente”, as vezes nem mesmo sabe que é um DBA, a ele são atribuídas atividades de um DBA em paralelo às suas obrigações e quando menos se dá conta, já está atuando única e exclusivamente com a Administração do SGBD (Aqui, leia-se SQL Server). Pelo fato de o SQL Server, diferente da maioria dos demais SGBDs, ter uma interface amigável e bastante intuitiva, muitos dos DBAs do tipo supracitado, ao executarem tarefas cotidianas e relativamente simples do dia-a-dia (tais como: backup, restore, criação de base nova, etc), simplesmente se acomodam e deixam de buscar conhecimento e entendimento a fundo do funcionamento da ferramenta, de possíveis problemas e soluções para poder atuar de forma mais rápida e efetiva. Em outros SGBDs, como por exemplo: Oracle e DB2, a administração da ferramenta geralmente é de certa forma mais complexa e requer maior conhecimentos das particularidades destas, e talvez por este motivo, seja muito mais comum a existência de “DBAs por acidente” no mundo SQL Server. Ainda que o Microsoft SQL Server ofereça uma interface super amigável e fácil de trabalhar, uma boa forma de se livrar das armadilhas do vício na interface gráfica que “facilita” muito a vida do DBA, é começar a olhar como as coisas funcionam em background. Por exemplo, ao executar um backup simples de uma base de dados via SSMS (SQL Server Management Studio), S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 22 porque não gerar um script da execução deste backup e das próximas vezes que se for executar um backup simples, fazê-lo via T-SQL apenas alterando o script previamente gerado? Com o tempo, naturalmente este comando de backup será memorizado e não haverá mais a necessidade da dependência da interface para execução desta atividade… Um dos pontos, é o conhecimento dos códigos gerados por tras de cada instrução submetida via interface gráfica, mas o estudo e conhecimento daquilo que se faz (neste caso, Administrar Banco de Dados (SQL Server)), vai muito além disto. Neste post, estou dando ênfase à utilização de códigos nas atividades do dia-a-dia de um DBA, pois acredito ser este um grande passo para se deixar o rótulo de“DBA por acidente” para se tornar um profissional cada vez melhor e saber exatamente aquilo que se está fazendo… Posso citar inúmeras vantagens, na utilização de códigos de comando ao invés de interfaces gráficas, mas em minha opinião, destacam-se os seguintes fatores: Produtividade: Particularmente depois que se adquire prática, é muito mais rápido criar um usuário, executar um backup ou restore via T-SQL do que efetuar diversos cliques na tela, para realizar estas tarefas. Escalabilidade: Para fazer uma operação de backup/restore, pode ser pequena a diferença de tempo gasto usando tanto interface quanto T-SQL, porém tente fazer uma operação destas com dezenas ou até mesmo centenas de bases (e acredite, existem muitos cenários para isto). Flexibilidade: Se você é um DBA que usa única e exclusivamente a interface gráfica do SSMS e mal sabe como as coisas acontecem nos códigos executados por suas “telinhas”, é bem possível que suas mãos ficarão literalmente atadas caso você se depare com um servidor onde o SQL Server esteja devidamente instalado, mas não haja o SSMS. Caso você não seja totalmente dependente da ferramenta gráfica, você poderá (em casos extremos) trabalhar normalmente conectando-se via SQLCMD. Além dos três fatores supracitados, existem outros diversos, porém não é a intenção ficar enumerando o que considero melhor ou pior em cada um dos meios de administração do SQL Server. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 23 Na minha visão a relação existente entre um DBA por acidente e Linhas de código, é que normalmente DBAs por acidente não se preocupam em entender como a coisa funciona, e por isto, geralmente continuam a sempre fazer a mesma tarefa, da mesma maneira, enquanto aqueles que se propõe a ser excelentes profissionais, sempre estão correndo atras de entendimento e fugindo das limitações impostas (neste caso, falando sobre utilizar única e exclusivamente, Interface Gráfica). Sinceramente, não tenho nada contra quem utiliza interface gráfica, desde que o faça por preferência, e não por limitação de não saber fazer de outra maneira. É fato que ninguém nasce sabendo, ou com Master degree em nada, mas nunca é tarde para começar a correr atras do prejuízo… A intenção do texto realmente não foi em ser técnico, apenas externar algo que penso com relação ao assunto que se faz presente nos meios profissionais… Grande abraço, Edvaldo Castro http://edvaldocastro.com S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 24 READ COMMITTED SNAPSHOT ISOLATION – Aprecie com moderação “RCSI – Aprecie com moderação” “Não existe almoço grátis” “Muito cuidado com as armadilhas do RCSI” O início proposital deste post é para demonstrar alguns dos benefícios e também os pontos de atenção com a possibilidade da alteração do comportamento padrão de uma base de dados no SQL Server, quando se trata de concorrência e isolamento das transações. Por padrão, o SQL Server tem um comportamento “Pessimista”, onde o nível de isolamento padrão é o “Read Committed”, o que basicamente faz com que o SQL Server tenha um número maior de locks, reduzindo a concorrência entre as transações. Acesse (https://msdn.microsoft.com/en- us/library/ms189122(v=sql.105).aspx) para um overview nos Níveis de Isolamento no SQL Server. MUITO BOM Resumidamente, o Read Committed Snapshot Isolation (RCSI), trabalha com o versionamento de registros, utilizando-se da tempdb para tal, fazendo com que o comportamento “Pessimista” do nível de isolamento “Read Committed” onde Leitores (Select) bloqueiam Escritores (Insert, Update e Delete), e vice-versa, seja substituído por padrão na base em que foi ativado o RCSI para o comportamento “Otimista”, onde Leitores (Select) e Escritores (Insert, Update, Delete) não se bloqueiam. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 25 Quando há concorrência entre um Updates e Selects submetidos a um mesmo registro, é gerado uma versão comitada do registro, que então esta é lida da pela transação que entrou em segundo lugar. Esta alteração do corportamento Pessimista para Otimista, pela habilitação do RCSI não acaba com bloqueios entre escritores (update x update) e também não evita bloqueios onde há verificação de constraints (foreign Keys, por exemplo). Quando leva-se em consideração o Read Committed Snapshot Isolation Level apenas até os pontos aqui exibidos, não há mais o que se pensar, pode se ter a falsa ideia de solução para todos os problemas de concorrência e bloqueios e a ideia de ativá-lo imediatamente em todas as bases SQL Server da instância é demasiadamente tentadora. Para Exemplificar melhor, segue uma citação de quando o problema é solucionado habilitando-se o RCSI. CENÁRIO 1 Na padaria do Sr. Joaquim, são produzidos 1.000.000 de pães por dia, e o sistema de panificação automaticamente faz um update na tabela de pães produzidos naquele dia. Esporadicamente o Sr. Joaquim gosta de tirar relatórios para saber a quantidade produzida até então, porém, seus relatórios ficam bloqueados por muito tempo, visto que os updates são constantes e demorados. RCSI NO CASO DO SR. JOAQUIM Neste caso específico, a habilitação do RCSI pode minimizar drasticamente os problemas do Sr. Joaquim com a lentidão de seus relatórios, uma vez que seus “selects” não mais esperarão pelos “updates” automáticos realizados pelo moderno sistema de fabricação de pães. Os updates continuam sendo realizados com a mesma frequência, e apenas bloqueando-se entre si quando necessários (lembrando que o RCSI não evita bloqueios entre updates), e quando o Sr. Joaquim submeter um select S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 26 envolvendo os registros bloqueados, ele receberá o resultados dos últimos comitados e não serão considerados aqueles com transações em aberto. MAS… Porém, como mencionado no início deste post… “Não existe almoço grátis”… “Muito cuidado com as armadilhas do RCSI”… Adiciono mais uma… “Coisas estranhas podem acontecer” Não são raras as vezes em que os bloqueios e esperas são benéficos e necessários, para se evitar erros de negócios ou até mesmo inconsistências no valor dos dados de sua base. O Read Committed Snapshot Isolation, é uma excelente opção, fantástica e que é passível sim, de ser habilitada na maioria das bases de dados da maioria dos ambientes com SQL Server, porém é necessário um levantamento cauteloso dos pontos onde podem incorrer problemas pela habilitação deste “comportamento” de uma base de dados do SQL Server. Um dos maiores pontos de atenção é que o RCSI é habilitado para a base inteira, fazendo com que o nível de isolamento das transações para esta base, seja por padrão alterado. Para que se tenha níveis de isolamento diferentes, é necessário que estes sejam informados dentro das transações submetidas. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 27 Vale ressaltar que apesar dos cuidados, custos e advertências supracitados, normalmente a relação CUSTO X BENEFÍCIO vale a pena e os problemas em potencial são poucos, em relação aos benefícios com o uso do RCSI. Para facilitar um pouco o entendimento, segue uma descrição de um casoonde o RCSI pode causar um grande problema. CENÁRIO 2 Uma empresa tem um programa conjunto entre as áreas Financeira e RH, de empréstimo de dinheiro da própria empresa a seus empregados, com desconto em folha de pagamento. As regras para que o colaborador possa pegar dinheiro, são bem simplistas e a principal delas, é que o e mesmo esteja empregado. O PROBLEMA João Castro, trabalhou por 10 anos na empresa referida, e um belo dia foi chamado pelo RH que lhe agradeceu pelos serviços e o demitiu. Sabendo João que a empresa tinha o programa de empréstimos e que o Depto Financeiro era logo na sala ao lado, passou diretamente no financeiro e pegou 20 mil reais que foi prontamente liberado. João acabava de ser demitido e receber 20 mil reais em empréstimo, que não pagaria nunca, visto que não teria mais vínculo com a empresa. RCSI NESTE CASO Supondo que existam 2 Tabelas envolvidas no processo: TB_PESSOA TB_EMPRESTIMO O processo de empréstimo verifica se a pessoa está empregada ou não (TB_PESSOA) para liberar o dinheiro (TB_EMPRESTO). Hipoteticamente falando, João por demitido por alguém do RH que abriu o sistema para atualizar o status para “DEMITIDO”, mas antes de executar S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 28 o commit da transação, resolveu ir tomar um café e a deixou aberta. João foi ao Depto Financeiro, alguém deste departamento abriu uma transação para liberar empréstimo, foi consultar na tabela TB_PESSOA se João estava empregado e recebeu como resultado “EMPREGADO”, visto que uma transação de update já estava aberta, porém não havia sido comitada. Quando o alguém do RH voltou, salvou via sistema a demissão de João, alterando seu status para “DEMITIDO”, porém o campo SITUACAO_EMPRESTIMO na tabela TB_EMPRESTIMO estava como “LIBERADO”. Neste caso específico, o bloqueio deveria acontecer e a transação de liberação do empréstimo obrigatoriamente deveria ser bloqueada pela alteração na tabela que informa se a pessoa está empregada ou não. Ainda assim, este não seria um empecilho para a habilitação do RCSI na base, visto que é possível forçar com um HINT que a espera aconteça. Foram criados Scripts para demonstração do caso citado que podem ser baixados pelo endereço: http://edvaldocastro.com/rcsi-2/ Ou visualizados no trecho de código abaixo. –CRIAÇÃO DO AMBIENTE PARA OS TESTES –CRIAÇÃO DA BASE USE master GO IF db_id(‘DEMO_RCSI’) IS NOT NULL DROP DATABASE DEMO_RCSI GO CREATE DATABASE DEMO_RCSI ON PRIMARY (NAME = ‘DEMO_RCSI_Data’,FILENAME = ‘C:TEMPDE MO_RCSI.mdf’,SIZE = 128 MB) LOG ON (NAME = ‘DEMO_RCSI_Log’, FILENAME = ‘C:TEMPDE MO_RCSI.ldf’,SIZE = 128 MB) GO USE DEMO_RCSI GO –CRIA A TABELA PESSOA IF object_id(‘TB_PESSOA’) IS NOT NULL S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 29 DROP TABLE TB_PESSOA GO CREATE TABLE TB_PESSOA ( ID_PESSOA INT IDENTITY CONSTRAINT PK_TB_PESSO A_ID_PESSOA PRIMARY KEY ,DATA_CONTRATACAO DATE DEFAULT GETDATE() ,NOME_PESSOA VARCHAR(60) ,BOL_EMPREGADO CHAR(1) ) GO –CRIA A TABELA EMPRESTIMO IF object_id(‘TB_EMPRESTIMO’) IS NOT NULL DROP TABLE TB_EMPRESTIMO GO CREATE TABLE TB_EMPRESTIMO ( ID_EMPRESTIMO INT IDENTITY CONSTRAINT PK_TB_E MPRESTIMO_ID_EMPRESTIMO PRIMARY KEY ,ID_PESSOA INT –CONSTRAINT FK_TB_PESSOA_TB_EMPRESTIMO FOREIGN KEY REFERENCES TB_PESSOA (ID_PESSOA) ,VALOR_EMPRESTIMO DECIMAL(10,2) ,LIBERACAO_EMPRESTIMO CHAR(1) ) –EXISTE O NÍVEL DE ISOLAMENTO –EXIBE INFORMAÇÃO SOBRE O NIVEL DE ISOLAMENTO ATUAL SELECT NAME ,CASE is_read_committed_snapshot_on WHEN 1 THEN ‘ENABLED’ WHEN 0 THEN ‘DISABLED’ END AS ‘Read_Committed_Snapshot’ FROM SYS.DATABASES WHERE NAME = ‘DEMO_RCSI’ –CARREGA DADOS NA TABELA PESSOA INSERT INTO TB_PESSOA (NOME_PESSOA, BOL_EMPRE GADO) VALUES (‘JOAO CASTRO’,‘S’) ,(‘MANOEL MAIA’,‘S’) ,(‘BENEDITO LIMA’,‘N’) ,(‘MARIA CASTRO’,‘N’) ,(‘CLEONTINA OLIVEIRA’,‘S’) S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 30 ,(‘CANDIDO DUARTE’,‘S’) –ALTERA O NÍVEL DE ISOLAMENTO PARA RCSI USE master ALTER DATABASE DEMO_RCSI SET READ_COMMITTED_S NAPSHOT ON –EXIBE DADOS DA TABELA PESSOA SELECT * FROM TB_PESSOA – ID_PESSOA DATA_CONTRATACAO NOME_PESSOA BOL_EMPREGADO –1 2013-07-27 JOAO CASTRO S –2 2013-07-27 MANOEL MAIA S –3 2013-07-27 BENEDITO LIMA N –4 2013-07-27 MARIA CASTRO N –5 2013-07-27 CLEONTINA OLIVEIRA S –6 2013-07-27 CANDIDO DUARTE S –ALTERA NÍVEL DE ISOLAMENTO –ALTER DATABASE DEMO_RCSI SET READ_COMMITTED_SNAPSHOT ON –ALTER DATABASE DEMO_RCSI SET READ_COMMITTED_SNAPSHOT OFF /*——————————————————————————*/ TRANSAÇÃO T1 –TRANSAÇÃO DE DEMISSÃO (T1) –EXIBE INFORMAÇÃO SOBRE O NIVEL DE ISOLAMENTO ATUAL SELECT NAME ,CASE is_read_committed_snapshot_on WHEN 1 THEN ‘ENABLED’ WHEN 0 THEN ‘DISABLED’ END AS ‘Read_Committed_Snapshot’ FROM SYS.DATABASES WHERE NAME = ‘DEMO_RCSI’ – PARA ALTERAR PARA O RCSI –USE MASTER –ALTER DATABASE DEMO_RCSI SET S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 31 READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE –INICIO DA TRANSAÇÃO DE UPDATE BEGIN TRAN T1 SELECT * FROM TB_PESSOA WHERE NOME_PESSOA = ‘JOAO CASTRO’ USE DEMO_RCSI GO UPDATE P SET P.BOL_EMPREGADO = ‘N’ FROM TB_PESSOA P WHERE NOME_PESSOA = ‘JOAO CASTRO’ GO SELECT * FROM TB_PESSOA WHERE NOME_PESSOA = ‘JOAO CASTRO’ –ROLLBACK TRAN T1 –COMMIT TRAN T1 –ABRA A SEGUNDA TRANSAÇÃO EM UMA NOVA JANELA (NEW QUERY)E FAÇA A OPERAÇÃO DE EMPRESTIMO (T2) /*——————————————————————————*/ TRANSAÇÃO T2 –TRANSAÇÃO DE EMPRÉSTIMO (T2) —- GARANTIR QUE ESTEJA COM RCSI HABILITADO –USE MASTER –ALTER DATABASE DEMO_RCSI SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE –GO —————————————————————————————— –INICIO DA TRANSAÇÃO DE UPDATE BEGIN TRAN T2 USE DEMO_RCSI GO INSERT INTO TB_EMPRESTIMO SELECT ID_PESSOA, ‘20000’,‘S’ FROM TB_PESSOA P WHERE NOME_PESSOA = ‘JOAO CASTRO’ COMMIT TRAN T2 —————————————————————————————— SELECT * FROM TB_EMPRESTIMO SELECT * FROM TB_PESSOA —————————————————————————————— S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 32 –VEJA O RESULTADO ANTES DO COMMIT DA T1 (TRANSAÇÃO DE DEMISSÃO) SELECT P.ID_PESSOA, P.NOME_PESSOA, E.VALOR_EM PRESTIMO, P.BOL_EMPREGADO,E.LIBERACAO_EMPREST IMO FROM TB_EMPRESTIMO E JOIN TB_PESSOA P ON E.ID_PESSOA = P.ID_PESSOA —————————————————————————————— –EXECUTE O COMMIT DA TRANSAÇÃO T1 E RODE NOVAMENTE O RESULTADO. OBSERVER QUE HÁ ERRO DE NEGÓCIO –POIS FOI LIBERADO EMPRÉSTIMOI PARA UMA PESSOA QUE NÃO ESTÁ EMPREGADA. SELECT P.ID_PESSOA, P.NOME_PESSOA, E.VALOR_EM PRESTIMO, P.BOL_EMPREGADO,E.LIBERACAO_EMPREST IMO FROM TB_EMPRESTIMO E JOIN TB_PESSOA P ON E.ID_PESSOA = P.ID_PESSOA RESUMINDO: PRÓS E CONTRAS DO RCSI: Reduz consideravelmente problemas provenientes de bloqueios. Habilitação fácil e rápida. Contras do Read Committed Snapshot Isolation: S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 33 Não é útil embloqueios entre transações de update. Bloqueios com verificação de constraints também não são beneficiados. Pode resultar com algum erro negocial não esperado, caso não seja bem mapeado. CONCLUSÃO: O RCSI é passível de utilização em qualquer ambiente, desde que os “poréns” sejam bem mapeados e os erros provenientes sejam mitigados, com o uso de HINTS (Ex: (SELECT * FROM TABELA WITH (READCOMMITTED)), Alterando o nível de isolamento nas transações que necessitam que os bloqueios aconteçam entre outros meios que podem ser utilizados. READ COMMITTED SNAPSHOT ISOLATION – APRECIE COM MODERAÇÃO REFERÊNCIAS http://msdn.microsoft.com/pt-br/library/ms173763.aspx http://msdn.microsoft.com/en-us/library/tcbchxcb(v=VS.80).aspx Grande abraço, Edvaldo Castro http://edvaldocastro.com S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 34 Artigos técnicos: O guia definitivo (ou não) Estar presente e participar ativamente de uma comunidade, sempre ajuda no crescimento das pessoas, seja ele profissional, pessoal, religioso ou quaisquer outros âmbitos. Para quem trabalha na área de TI particularmente, esta participação pode culminar em uma curva de aprendizado e crescimento profissional muito mais acentuada do que se o profissional se isolar e caminhar sozinho na carreira. Basicamente é possível participar de comunidades consumindo informações compartilhadas e compartilhando informações e conhecimentos. Algumas das principais formas de compartilhar conhecimento e informações são: Palestras (presenciais e online), Redes Socais em geral, vídeos, Wiki e Blogs com postagens técnicas. Para aqueles que se aventuraram, ou desejam se aventurar com a redação e compartilhamento de textos técnicos, a seguir existe uma serie de pontos importantes que devem ser observados na intenção de que erros sejam evitados e uma melhor qualidade seja alcançada. MOTIVAÇÃO Existem diversos motivos que podem e levam profissionais à iniciarem uma efetiva participação em comunidades técnicas e criarem seus próprios blogs pessoais, ou mesmo escreverem para canais já bem conhecidos. Com motivações diferentes, geralmente os objetivos são comuns: exposição profissional, compartilhamento de conhecimento, networking e reconhecimento. Abaixo, alguns pontos que são relevantes e que podem influenciar direta ou indiretamente os resultados desta decisão de tornar-se público através principalmente de artigos técnicos. R ISCOS E OPORTUNIDADES A “Exposição Profissional” proveniente da decisão de escrever artigos técnicos é ambígua, ou seja, pode ser uma excelente oportunidade de se S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 35 criar um ótimo círculo de contatos profissionais, networking de alto nível e gerar grandes benefícios nos âmbitos profissional e pessoal, porém esta mesma “Exposição Profissional” pode ser extremamente perigosa e prejudicial à carreira do profissional, caso este não tome alguns cuidados básicos na hora de expor-se através de seus textos, por exemplo: Textos não fidedignos, com erros de português, dentre outros graves erros que estão melhor detalhados adiante, neste artigo. QUANDO COMEÇAR? Tendo-se conhecimentos dos riscos e oportunidades, e considerando-se apto a dar início ao trabalho de compartilhamento de informações via textos técnicos (ou não), existem alguns importantes pré-requisitos a serem seguidos, para aumentar a probabilidade de que o texto a ser publicado seja bem recebido e faça “sucesso”. PESQUISE Há um grande equívoco por parte de muitos autores de blogs, que é o conhecimento relacionado a um determinado assunto. Muitas pessoas, quando propõe-se a escrever um artigo técnico, enganam-se e pensam já saber o suficiente para não ser necessário fazer nenhuma pesquisa adicional. Mero engano, todo e qualquer conteúdo técnico, fica muito melhor apresentado, se expor pontos de vistas diferentes, ou mesmo conteúdo de fontes variadas, para defender um ponto de vista, ou mesmo descrever algo. LEIA E ESTUDE MUITO Leitura e estudo, nunca é demais. E quanto mais conhecimento sobre o assunto a ser dissertado, melhor e mais rico ficará o artigo técnico. É sempre muito importante estudar, ler e fazer tantos testes quantos possíveis antes de publicar o artigo, visto que uma vez publicado, seu texto estará exposto para o mundo inteiro a qualquer momento para visualização de qualquer pessoa que quiser visualizá-lo, e conforme já citado anteriormente, pode ser muito bom ou muito ruim esta exposição. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 36 FAÇA CITAÇÕES E REFERÊNCIAS Um ponto não menos importante que os anteriores é a existência de citações e referências no artigo técnico dos textos que foram escritos por outros autores. É frustrante para um autor, ver que todo trabalho de pesquisa e estudo que ele teve para escrever determinado trecho de artigo, ou mesmo um artigo completo, e repentinamente ver este “roubado” e publicado sem referência em outro local, que até então era desconhecido. É até mesmo uma questão de respeito e demonstração de maturidade e bom senso, que ficarão explícitos aos leitores do artigo em questão. REVISÃO PERIÓDICA (NÃO OBRIGATÓRIA) Esta não é uma necessidade extremamente importante, mas esporadicamente é interessante ler alguns de seus posts / artigos técnicos para que se por algum acaso houver algum erro (digitação, português ou conceitual), este possa ser corrigido. Revise sua estratégia / metodologia Um Blog baseado no dia a dia, ou na carreira de um profissional, deve acompanhar as mudanças que naturalmente ocorrem na carreira. Um bom exemplo é a tendência de migração de vários serviços de tecnologia para a nuvem. Se você fala sobre infraestrutura de servidores (Windows ou Linux), por exemplo, considere começar a estudar sobre computação na nuvem, e à medida que sentir-se confortável, os artigos naturalmente devem acompanhar esta mudança, isto fará com que os leitores, acompanhem as mudanças e talvez até se consiga mais leitores assíduos dos artigos técnicos publicados. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 37 O ARTIGO TÉCNICO Abaixo, listo algumas características e especificidades referentes aos tipos mais comuns de artigos técnicos, detalhes do mesmo e alguns pontos de observação no que se refere à gramática na redação destes. TIPOS DE ARTIGOS TÉCNICOS DOCUMENTAÇÃO Este tipo de artigo técnico visa dissertar sobre algum produto, feature ou atividade, demonstrando sua finalidade sem se preocupar na apresentação dos métodos ou passo a passo para implementação. Este tipo de artigo técnico, geralmente é escrito quando são lançadas versões novas ou um produto totalmente novo, com a finalidade principal de demonstrar tal produto ou feature. HOW TO(S) Artigos técnicos deste tipo, são como tutoriais onde normalmente é descrito um passo a passo com detalhes de implementação, ativação ou quaisquer alterações que objetivem o autor do artigo a criá-lo. BENCHMARKS E EXPERIÊNCIAS Este é um outro tipo de artigo bastante interessante, onde o autor do artigo, por necessidade ou ocasionalidade, passou por algum problema ou fez alguns testes que posteriormente demonstra em seu artigo técnico. Geralmente estesartigos são bem interessantes e demonstram situações do dia a dia e podem agregar bastante conhecimento à quem atua ou possui ambiente similar ao descrito no artigo. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 38 O ARTIGO TÉCNICO EM SI ESTRUTURA Um artigo técnico (ou não) bem estruturado é muito importante, pois facilita e contribui para que a leitura fique mais agradável e entendível. Se a ideia é escrever muito, este tópico é especialmente importante, pois quanto maior o texto, mais cansativa e desestimulante fica a leitura, caso a mesma não esteja bem estruturada, sendo o inverso igualmente verdadeiro, quando mais bem estruturado, melhor e mais agradável se torna a leitura do mesmo. Por um texto bem estruturado, entende-se a divisão do mesmo (introdução, desenvolvimento e conclusão), estruturação utilizando-se marcadores, definições de fontes tradicionais de tamanhos proporcionais e principalmente a divisão em tópicos e subtítulos, determinando exatamente o assunto que determinado ponto do artigo trata. L INGUAGEM Não se pode dizer que é correto ou incorreto escrever de uma forma completamente informal ou de forma muito formal. O ideal é definir o público alvo que se deseja atingir, e escrever da forma correta para este público alvo. Por exemplo, talvez escrever de forma extremamente formal, um artigo onde os principais leitores serão jovens universitários em início de carreira, pode tornar a leitura um tanto quanto chata e cansativa. Da mesma forma, não é aconselhado um texto muito informal, quando o público alvo são diretores e presidentes de empresas de Tecnologia, ou outras. Sendo seu artigo formal ou não, o importante é o correto direcionamento do artigo ao seu respectivo público alvo. PÚBLICO ALVO Conforme mencionado anteriormente, além de escrever da maneira correta para o público alvo correto, é preciso conhecer e saber para quem se está S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 39 escrevendo, com isto é possível adequar a linguagem, estrutura e conteúdo do seu artigo. GRAMÁTICA EVITE OS ERROS MAIS COMUNS (DIGITAÇÃO, GÍRIAS , CONCORDÂNCIA , ETC) Um dos pontos mais importantes em um artigo técnico é a clareza e assertividade com que se escreve um texto, relacionado à gramática do idioma no qual este texto é escrito. Se o texto está em português por exemplo, é imprescindível tomar todos os cuidados com erros de concordância, gírias, neologismos e até mesmo com erros de digitação, que naturalmente podem aparecer durante a redação do mesmo. Um texto bem escrito e gramaticalmente correto corrobora muito para que ao final da leitura, o leitor tenha prestado atenção ao conteúdo e tenha tido bom entendimento do que pretendia-se ter passado, do que ficar em mente os “assassinatos” ao idioma encontrados durante a leitura. SOLICITE REVISÕES (AMIGOS, COMUNIDADE, PARENTES , SR. JOAQUIM) Uma ferramenta gratuita e muito útil é a revisão antes da publicação. É bem provável que uma pessoa que possui um local onde publicar seus artigos (técnicos ou não), conheça outras pessoas do meio, que podem ler e avaliar o texto antes de o mesmo ser publicado. Ainda assim, caso não seja possível encontrar alguém que possa revisar o texto, é possível solicitar que uma ou mais pessoas o façam (mesmo não sendo do meio relacionado ao conteúdo do artigo). Se possível, é aconselhável que sejam feitas revisões técnicas e gramaticais, assim mitiga-se o risco de incorreções tanto na parte técnica proposta no artigo, como também a parte gramatical que é tão importante quanto. Abaixo, listo alguns pontos importantes com relação à algumas principais preocupações e com a publicidade quando se está desenvolvendo um artigo técnico. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 40 PRINCIPAIS PREOCUPAÇÕES SEMPRE Solicite que alguém revise seus textos antes de publicá-los Cite as fontes das informações Pesquise em fontes fidedignas Não assassine o idioma Deixe claro que o texto é sua opinião, não uma verdade absoluta NUNCA Escreva com pressa de publicar Publique um artigo sem pelo menos uma revisão Copie ou reblogue algo, sem autorização do autor do texto original Diga que sua forma é a única maneira existente PUBLICIDADE Canais disponíveis Blog Pessoal Technet Wiki Facebook (Pages and Profile) Twitter S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 41 FAÇA BARULHO Divulgue sempre seus artigos técnicos. Cuidado para não se tornar um spammer ou um chato bloqueado CONCLUSÃO Em resumo, um blog ou canal de textos técnicos quando bem escrito pode alavancar uma carreira, tornar seu autor conhecido por seus ótimos artigos e consequentemente rendendo bons resultados (convites, empregos, propostas, networking, etc). Em contrapartida, se o texto não é bem escrito e não toma-se diversos cuidados (alguns mencionados no texto supracitado) esta exposição pode ter o efeito contrário e fazer as oportunidades, a “fama” e propostas sumirem, visto que você pode estar mostrando a todos em seu texto seus pontos fracos (gramática, conhecimento técnico, etc). Eu gostaria ainda de esclarecer que tudo o que foi escrito foi baseado em minhas preocupações e minha opinião. De forma alguma é a representação absoluta da verdade. Se você concorda, discorda ou tem algo a acrescer, será muito bem vindo nos comentários…. Obrigado por chegar até aqui, Grande abraço, Edvaldo Castro http://edvaldocastro.com S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 42 Diego Nogare www.diegonogare.net Partition Table Particionamento de Tabelas Fala galera, esses dias atrás estava fazendo uma apresentação sobre SQL Server 2012 e surgiu uma dúvida de um dos participantes sobre particionamento horizontal de tabelas. Decidi procurar alguns materiais em português e não achei muitos, então resolvi dar minha contribuição sobre esse assunto. Bom, os benefícios de se utilizar Partition Table no SQL Server são muitos, mas antes de falar dos benefícios, vamos criar um banco de dados de exemplo para simular uma tabela do mundo real e depois entender o que é o Partition Table. Esse script cria um banco que irá simular uma tabela de visitas de um museu, imaginando que o museu foi inaugurado no dia 1º de Janeiro de 2012 e hoje é dia 31 de Dezembro, totalizando neste 1 ano de atividades 1 milhão de visitas. Com os próximos sub-capítulos vamos criar as partições, separar esses dados e deixar cada agrupamento (visitas do mesmo mês) em uma tabela específica. Depois podemos comparar os prós e contras desta técnica. CREATE DATABASE dbMuseu GO USE dbMuseu GO CREATE TABLE tbVisitas (id INT IDENTITY(1,1) PRIMARY KEY ,nome VARCHAR(50) ,data DATE) GO S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 43 INSERT INTO tbVisitas (nome, data) VALUES (newid(), /*Dados aleatórios para o nome*/ convert(date, convert(varchar(15),'2012-' + convert(varchar(5),(convert(int,rand()*12))+1 ) + '-' + /* Gerar mês aleatório */ convert(varchar(5),(convert(int,rand()*27))+1 ) /* Gerar dia aleatório */ ))) GO 1000000Ótimo, agora que já temos nossa base para simular… Vamos entender o que é o particionamento! O particionamento horizontal de tabelas é uma técnica que utilizamos na arquitetura da estrutura de dados, para melhorar a performance/desempenho/gerenciamento do sistema gerenciador de banco de dados. Esta técnica consiste em dividir os dados, baseado em um parametro, em tabelas e File Groups diferentes. Para exemplificar, veja na imagem abaixo os dados que estavam na tabela Visitas foram divididos em 12 tabelas, cada uma armazenando os dados de um mês específico. A tabela azul armazena visitas de Janeiro, a tabela verde armazena de Fevereiro e a tabela laranja armazena visitas de Dezembro. Porém, a tabela preta representa a consulta de todas as visitas do ano inteiro… S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 44 No decorrer dos próximos sub-capítulos, vamos trabalhar em atividades específicas necessárias para particionar com sucesso essa tabela de visitas do museu. CENÁRIOS/BENEFÍCIOS Fala galera, uma duvida frequente quando falamos em particionar uma tabela, é: Porque Particionar?! Pensamos em particionamento de tabelas quando ela possui muitos registros e precisamos melhorar escalabilidade, performance e gerenciamento. Normalmente desenhamos as tabelas para armazenar informações de uma entidade específica, como Funcionarios, Vendas ou Produtos. Não é porque desenhamos e entendemos este modelo de dados que otimizamos a tabela para receber grande volume… Já encontrei por ai, e não foi só uma vez, tabelas com quantidade de dados significativa e que não tinha nenhum tipo de índice. Acreditem, é triste mas é verdade! Quando falamos de bancos de dados realmente grandes, nos referimos à VLDB (Very Large Database). Não é regra que um VLDB possua tabelas que precisam ser particionadas. Para particionar uma tabela um dos pontos mais importante a se levar em consideração é o tempo gasto para dar manutenção nesta tabela, e não somente a quantidade de registros. Imaginem o caso de uma tabela de Produtos de um e-Commerce que fica 2h/dia lenta porque está reorganizando/reconstruindo o índice, ou fica travada quando estão rodando algum relatório… Esse tipo de tabela pode ser particionada para melhorar o tempo de resposta das consultas e garantir que o e-Commerce continue fazendo suas vendas online. Pensando em relatórios, isso pode causar uma lentidão grande no seu RDBMS (Relational Database Management System) quando tem um ROLAP (Relational On Line Analytical Processing) realizando agregações. Se uma tabela com 1 milhão de registros precisa agregar as vendas por mês, o processamento irá trabalhar com todas as linhas da tabela e fará o somatório. Imaginando este mesmo cenário em um ambiente particionado, cada partição faz suas agregações e no final do processamento, você terá uma resposta mais rápida e seu ambiente continuou respondendo com rapidez. Um outro tipo de particionamento de tabelas pode ser feito para separar dados “quentes” e S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 45 histórico. Os dados quentes são os dados que você trabalha atualmente, por exemplo, os dados do trimestre atual e os dados de histórico são os dados dos trimestres passados. Se você separar os dados da sua tabela a cada 3 meses, você pode deixar os dados atuais em discos mais nobres do seu storage (SSD) e os dados de histórico em outros discos menos nobres (SAS ou SATA). Imagine a necessidade de consultar as vendas do ultimo ano, com a tabela particionada, você faria isso sem ter nenhuma concorrencia com as transações que estão acontecendo atualmente na tabela. DEFINIÇÕES/TERMINOLOGIAS Fala galera, para implementar o particionamento horizontal de tabelas, é importante conhecer as definições e terminologias utilizadas. Para alinharmos, vou falar do que é fundamental para você entender e aplicar essa tecnologia nos seus projetos. Para começar, vamos entender a estrutura de armazenamento do Partition Table. Esta forma de trabalhar se aplica desde SQL Server 2005 até o 2012, antes disso, com o SQL Server 7 ou 2000, até onde me lembro, tinha que fazer manualmente a quebra dos dados nas tabelas particionadas e a consulta era feita através de uma VIEW com UNION ALL de todas as tabelas particionadas… um verdadeiro parto! Desde o SQL Server 2005, quando criamos uma tabela e/ou índice no nosso banco e não definimos onde ele será armazenado, ele fica no filegroup default. Porém, podemos criar a tabela e/ou índice em um partition scheme. O partition scheme faz um mapeamento de um ou mais filegroups, mas para armazenar os dados nos arquivos físicos corretos (nos filegroups) ele usa o partition function, que por sua vez, contém o algoritmo que realmente identifica onde determinada linha será armazenada. A ordem cronológica é mais ou menos assim: S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 46 Ok, agora que entendemos de forma macro a estrutura de armazenamento, vamos entender conceitualmente como o SQL Server quebra os dados baseado em uma coluna da tabela. Para isso, é necessário definir o Range que o algoritmo de particionamento irá usar para separar os dados de forma correta e informar o partition function (que irá armazenar no local indicado). Esse Range atua juntamente ao Partition Key, que é uma coluna única existente na tabela e é utilizada como separador lógico dos dados. Depois dos dados separados em tabelas específicas, é possível trabalhar com os dados das tabelas não só fazendo consultas, mas também juntando (Merge) e/ou particionando ainda mais as tabelas (Split). Também usa-se o Switch para “converter” uma tabela que estava sendo usada como atual, com dados quentes, para ser entendida como histórico. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 47 Pegando como base o database criado no sub-capitulo de Particionamento de Tabelas, se for separar os dados com base em cada mês, o Partition Key seria a coluna Data e o Range seria cada período que quero utilizar, baseado em um início e fim da coleção de dados. Seria algo assim: Intervalo Inicio Fim 1 01/01/2012 31/01/2012 2 01/02/2012 28/02/2012 … … … 12 01/12/2012 31/12/2012 Fiquem atentos à essas nomenclaturas, a medida que precisarmos usar cada uma delas vou explicar em detalhes suas caracteristicas e funcionamento. S Q L S e r v e r : A l é m d o C o n c e i t o B l o g P o s t C o l l e c t i o n M V T e c h | 48 CRIANDO F ILEGROUP Fala galera, mesmo o Filegroups sendo o “final” do processo de criar a Partition Table pois é onde os dados serão armazenados de fato, vamos criá- los primeiro. Depois de criar os filegroups podemos voltar e criar o Partition Function e o Partition Scheme. Antes de criar o filegroup, vamos relembrar um pouco de conceito do SQL Server. Todos os dados de uma tabela são armazenados em um agrupador chamado Página que possui 8Kb de tamanho. Independente de uma página estar com apenas 1 registro, ou totalmente preenchida com dados, ela ocupa 8Kb de tamanho. Outra caracteristica é que dentro de uma página são armazenados somente dados de uma mesma tabela. Se neste exemplo abaixo existisse somente 1 funcionário e 1 produto, existiriam 2 páginas criadas. O conjunto de 8 páginas é chamado
Compartilhar