Quantcast
Channel: Fabricio Lima | Consultoria e Treinamento SQL Server
Viewing all 165 articles
Browse latest View live

Melhorando a Performance de Consultas no Totvs Protheus – Parte 5

$
0
0

Fala pessoal,

Antes de lerem esse post, caso ainda não tenham lido os anteriores, sugiro que façam para seguirem a linha de raciocínio:

Hoje vamos analisar a query abaixo que estava demorando 28 segundos em um cliente e foi executada mais de 100 vezes em um dia:

SELECT B1_DESC ,
       B1_COD ,
       ISNULL(ZY_TIPO, '') TIPO
FROM   SB1010
       LEFT JOIN SZY010 ON B1_COD = ZY_COD
                           AND SZY010.D_E_L_E_T_ = ''
                           AND ZY_DTDESAT = ''
WHERE  SB1010.D_E_L_E_T_ = ''
       AND B1_MSBLQL <> '1'
       AND B1_DESC LIKE '%NOMEPRODUTO%'
       AND B1_DESC LIKE '%%'
       AND B1_COD IN (   SELECT AIB_CODPRO
                         FROM   AIB010
                         WHERE  D_E_L_E_T_ = ''
                                AND AIB_DATVIG >= '20171215'
                                AND AIB_CODFOR = '001234'
                                AND AIB_CODTAB = '009'
                     );

Plano:

 

Mais uma vez o SQL nos sugere um índice:

CREATE NONCLUSTERED INDEX SZY010W01
ON [dbo].[SZY010] ([ZY_DTDESAT],[D_E_L_E_T_])
INCLUDE ([ZY_COD],[ZY_TIPO])
with(FILLFACTOR=90,DATA_COMPRESSION=PAGE)

Digo e repito: Missing Index ajuda, mas nem sempre é a melhor solução.

Olha como essas duas colunas são usadas na query:

AND SZY010.D_E_L_E_T_ = ” AND ZY_DTDESAT = ”

Nada seletivo! Não seria uma boa coluna para um índice (exceto exceções).

Podemos ver facilmente que a query tem uma subquery. Se rodarmos essa subquery separada temos esse plano:

O SQL nos sugere outro índice que não seria o melhor a ser criado:

CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[AIB010] ([AIB_CODTAB],[D_E_L_E_T_],[AIB_CODFOR],[AIB_DATVIG])

Ele sugere começar esse índice pela coluna AIB_CODTAB, mas será que ela é a mais seletiva dessa query?

Como sei qual é a coluna mais seletiva da query Fabricio?

Faça um count distinct nas colunas que quer validar:

 

No nosso caso, a coluna AIB_CODFOR é muito melhor para ter um índice do que a coluna AIB_CODTAB, pois ela tem muito mais valores distintos. É uma coluna mais seletiva e um índice por ela deve beneficiar outras queries que acessam essa tabela.

Tudo isso até agora foi para mostrar que missed index ajuda, mas não é regra.

O que você faria para melhorar essa query então Fabrício?

Vou tentar induzir o SQL a rodar essa query da forma abaixo:

  1. Executar a subquery pois ela retorna só 200 linhas.
  2. Fazer a busca na tabela SB1 por ( B1_COD IN  ), por ser uma coluna bem seletiva.
  3. Chegar até a tabela SZY010 pelo código com essa comparação (B1_COD = ZY_COD).

Como você consegue fazer isso Fabrício? Tem algum botão que você clica e escolhe os passos?

R: Ainda não tem botão. Ainda… Enquanto isso, conseguimos fazer criando índices manualmente!!!

CREATE NONCLUSTERED INDEX AIB010W01
ON [dbo].[AIB010] ([AIB_CODFOR],[AIB_CODTAB],[AIB_DATVIG],[D_E_L_E_T_])
include(AIB_CODPRO)
with(FILLFACTOR=90,DATA_COMPRESSION=PAGE)

CREATE NONCLUSTERED INDEX SB1010W01
ON [dbo].[SB1010] (B1_COD,B1_DESC,B1_MSBLQL,D_E_L_E_T_)
with(FILLFACTOR=90,DATA_COMPRESSION=PAGE)

CREATE NONCLUSTERED INDEX SZY010W01
ON [dbo].[SZY010] ([ZY_COD],[ZY_DTDESAT],[D_E_L_E_T_])
INCLUDE([ZY_TIPO])
with(FILLFACTOR=90,DATA_COMPRESSION=PAGE)

Após criar esses 3 índices que são bem pequenos, olhem como ficou o plano da query:

 

O SQL fez exatamente o que induzi ele a fazer. Pegou dados da subquery, buscou os códigos retornados por ela na SB1 e depois chegou na SZY pelo COD também.

E o tempo de 28 segundos Fabrício, foi para quanto?

WOW!!!!! Agora a query roda instantânea.

Consumo antes:

Table 'SZY010'. Scan count 1, logical reads 187725
Table 'AIB010'. Scan count 1, logical reads 2732873
Table 'SB1010'. Scan count 1, logical reads 4271

 SQL Server Execution Times:
   CPU time = 28438 ms,  elapsed time = 28673 ms.

 

Consumo Depois:

Table 'SZY010'. Scan count 15, logical reads 30
Table 'SB1010'. Scan count 223, logical reads 673
Table 'AIB010'. Scan count 1, logical reads 5

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 43 ms.

Redução absurda com índices pequenos. Bem simples e eficiente….

Olhando no Trace de queries demoradas, a query ficou tão rápida que tenho que apelar e colocar um waitfor delay para poder visualizar e comparar:

Ela rodou em 0,1 segundos e a diferença de leituras de páginas (2.9 milhões para 802) e do consumo de CPU (27 mil para 62) é gigante!!!

Baita diferença.

É isso ai pessoal, melhoramos mais uma query no Protheus.

Até a próxima análise de query.

Gostou desse Post?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006


Melhorando a Performance de Consultas no Totvs Protheus – Parte 6

$
0
0

Fala pessoal,

Antes de lerem esse post, caso ainda não tenham lido os anteriores, sugiro que façam para seguirem a linha de raciocínio:

Hoje vamos analisar a query abaixo que está fazendo um número muito alto de leituras no banco:

SELECT   RA_XREGIO XREGIO ,
         RA_FILIAL FILIAL ,
         RA_NOME NOME ,
         RA_CIC CIC ,
         RA_BCDEPSA BCDEPSA ,
         RA_CTDEPSA CTDEPSA ,
         ZT_TITULO TITULO ,
         ZT_CODTIT CODTIT ,
         ZT_MAT MAT ,
         ROUND(ZT_VALVER, 2) VALVER ,
         ZT_VERBA VERBA ,
         ZT_XBCOFUN XBCOFUN ,
         ZT_XAGEFUN XAGEFUN ,
         ZT_XCTAFUN XCTAFUN ,
         RC1_TIPO TIPO ,
         RC1_EMISSA EMISSA ,
         RC1_VENREA VENREA ,
         RC1_VALOR VALOR ,
         RC1_XBCO1 XBCO1 ,
         RC1_XAGE1 XAGE1 ,
         RC1_XCTA1 XCTA1 ,
         RC1_XDTPAG XDTPAG ,
         RC1_XUSPAG XUSPAG ,
         RC1_XUSNPA XUSNPA ,
         RC1.R_E_C_N_O_ RC1RECNO ,
         RC1_NATURE NATUREZA
FROM     SRA080 SRA ,
         RC1080 RC1 ,
         SZT010 SZT ,
         SED010 SED
WHERE    SRA.D_E_L_E_T_ = ' '
         AND RC1.D_E_L_E_T_ = ' '
         AND SZT.D_E_L_E_T_ = ' '
         AND SED.D_E_L_E_T_ = ' '
         AND RA_MAT = ZT_MAT
         AND RA_SITFOLH IN ( ' ', 'A', 'D', 'F', 'T' )
         AND ZT_CODTIT NOT IN ( ' ', '23', '234')
         AND SUBSTRING(RA_BCDEPSA, 1, 3) IN ( '234', '543', '123', '987', '979' )
         AND RA_FILIAL
         BETWEEN '0 ' AND 'ZZ'
         AND RA_MAT
         BETWEEN '0     ' AND 'ZZZZZ '
         AND RC1_NUMTIT
         BETWEEN '0        ' AND 'ZZZZZZZZZ'
         AND RA_XREGIO
         BETWEEN '0 ' AND 'ZZ'
         AND RC1_EMISSA
         BETWEEN '20160101' AND '20171231'
         AND RC1_VENREA
         BETWEEN '20171212' AND '20171212'
         AND RC1_NATURE IN ( '23243', '23423' )
         AND RA_FILIAL = ZT_FILIAL
         AND ZT_TITULO = RC1_NUMTIT
         AND ZT_PREFIXO = RC1_PREFIX
         AND ZT_CODTIT = RC1_CODTIT
         AND ZT_RECTIT = RC1.R_E_C_N_O_
GROUP BY RA_XREGIO ,
         RA_FILIAL ,
         RA_NOME ,
         RA_CIC ,
         RA_BCDEPSA ,
         RA_CTDEPSA ,
         ZT_TITULO ,
         ZT_PREFIXO ,
         ZT_CODTIT ,
         ZT_MAT ,
         ZT_VALVER ,
         ZT_VERBA ,
         ZT_XBCOFUN ,
         ZT_XAGEFUN ,
         ZT_XCTAFUN ,
         RC1_TIPO ,
         RC1_EMISSA ,
         RC1_VENREA ,
         RC1_VALOR ,
         RC1_XBCO1 ,
         RC1_XAGE1 ,
         RC1_XCTA1 ,
         RC1_XDTPAG ,
         RC1_XUSPAG ,
         RC1_XUSNPA ,
         RC1.R_E_C_N_O_ ,
         RC1_NATURE

Segue o custo dessa query:

Table 'RC1080'. Scan count 1, logical reads 8832
Table 'SZT010'. Scan count 7961, logical reads 3017362
Table 'SRA080'. Scan count 9, logical reads 4710
Table 'SED010'. Scan count 3, logical reads 40

 SQL Server Execution Times:
 CPU time = 5031 ms, elapsed time = 1074 ms.

3 milhões de reads na tabela SZT010. A treta da query está aí.

Esse é o plano da query:

 

Como vimos que a treta está na tabela SZT, vamos procurar essa tabela no plano.

O SQL Server está realizando um Key Lookup 703 mil vezes no índice clustered dessa tabela.

Hummm… Olha aí o motivo da treta.

Mas Fabrício, agora o SQL Server não me sugeriu nenhum índice. Lascou. Só conseguia melhorar algo quando ele me mostrava.

Como não só de missed index vive o homem, vamos olhar para a query e pensar como ela poderia ser executada de forma mais rápida.

O Filtro mais seletivo que encontrei no WHERE foi esse abaixo:

AND RC1_VENREA     BETWEEN '20171212' AND '20171212'

Dessa forma vou criar um índice na tabela RC1080 começando por essa coluna. Vou incluir nesse índice apenas as colunas utilizadas no WHERE para ele não ficar muito grande.

Em seguida, o SQL deverá fazer um join com a tabela SZT010 pelas colunas abaixo:

AND ZT_TITULO = RC1_NUMTIT
         AND ZT_PREFIXO = RC1_PREFIX
         AND ZT_CODTIT = RC1_CODTIT
         AND ZT_RECTIT = RC1.R_E_C_N_O_

Para induzir o SQL a fazer isso, vou criar um índice que começa por essas colunas do join (a mais seletiva para a esquerda).

Segue abaixo os dois índices que criei:

CREATE NONCLUSTERED INDEX RC1080W01
ON [dbo].RC1080(RC1_VENREA,RC1_EMISSA,RC1_NATURE,RC1_NUMTIT)
with (DATA_COMPRESSION=PAGE,FILLFACTOR=90)

CREATE NONCLUSTERED INDEX SZT010W01
ON [dbo].SZT010(ZT_TITULO,ZT_PREFIXO,ZT_CODTIT,ZT_RECTIT,ZT_FILIAL,ZT_MAT,D_E_L_E_T_)
include(ZT_VALVER, ZT_VERBA ,ZT_XBCOFUN ,ZT_XAGEFUN ,ZT_XCTAFUN)
with (DATA_COMPRESSION=PAGE,FILLFACTOR=90)

Ao rodar a query novamente, temos mais um WOW!!!!

A quantidade de leituras reduziu drasticamente.

Consumo antes:

Table 'RC1080'. Scan count 1, logical reads 8832
Table 'SZT010'. Scan count 7961, logical reads 3017364

 SQL Server Execution Times:
   CPU time = 5031 ms,  elapsed time = 1074 ms.

Consumo depois:

Table 'SZT010'. Scan count 8, logical reads 32
Table 'RC1080'. Scan count 1, logical reads 27

 SQL Server Execution Times:
   CPU time = 16 ms,  elapsed time = 125 ms.

Redução de 3 milhões de leitura de páginas de 8 kb para 32 leituras e gerando o mesmo resultado. WOW!!!

Segue o novo plano da query:

Com os dois índices que criei, eu induzi o SQL Server a rodar a query da forma que achei que seria mais rápida.

Ele já estava doido para rodar essa query dessa forma, só estava esperando um DBA/DEV criar esses índices para ele evitar de fazer 3 milhões de leituras e descansar um pouco.

É isso ai pessoal, melhoramos mais uma query no Protheus.

Até a próxima análise de query.

Gostou desse Post?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Melhorando a Performance de Consultas no Totvs Protheus – Parte 7

$
0
0

Fala pessoal,

Como tudo que é bom dura, pouco, esse é o último episódio da nossa série de artigos de Tuning de consultas no Totvs Protheus.

Lembrando que essas dicas valem para queries de outros sistemas também.

Antes de lerem esse post, caso ainda não tenham lido os anteriores, sugiro que façam para seguirem a linha de raciocínio:

Analisando mais umas das queries que demoram mais de 3 segundos em um cliente:

SELECT Z6_RETORNO AS 'DIRETOR',
       ZV_DESCRIC AS 'REGIONAL',
       ZM_EMP,
       RE0_FILIAL AS 'FILIAL',
       CASE
           WHEN RE0_RECLAM = 'VARIOS' THEN
               'VARIOS'
           ELSE
               RD0_NOME
       END AS 'NOME',      
       RE5_DESCR AS 'TPDESP',
       RC1_NUMTIT,
       RC1_VALOR,
       RC1_VENCTO,
       A2_NOME,
       A2_CGC,
       A2_BANCO,
       A2_AGENCIA,
       A2_NUMCON,     
       RTRIM(ED_CODIGO) + ' - ' + ED_DESCRIC AS NATUREZA
FROM RC1480 AS RC1
    INNER JOIN RE5010 AS RE5
        ON RE5_TABELA = 'RC1'
           AND RC1_TPDESP = RE5_CODIGO
           AND RE5.D_E_L_E_T_ = ' '
    INNER JOIN RE0480 AS RE0
        ON RE0_FILIAL = RC1_FILTIT
           AND RE0_NUM = RC1_PRONUM
           AND RE0.D_E_L_E_T_ = ' '
    INNER JOIN RD0010 AS RD0
        ON RD0_CODIGO = RE0_RECLAM
           AND RD0.D_E_L_E_T_ = ' '
    INNER JOIN SZ6010 AS SZ6
        ON Z6_TABELA = 'DIR_REGIO'
           AND Z6_ITEM = RE0_XCDDIR
           AND SZ6.D_E_L_E_T_ = ' '
    INNER JOIN SZV010 AS SZV
        ON ZV_REGIONA = RE0_XREGIO
           AND SZV.D_E_L_E_T_ = ' '
    INNER JOIN SA2010 AS SA2
        ON A2_COD = RC1_FORNEC
           AND RC1_LOJA = A2_LOJA
           AND SA2.D_E_L_E_T_ = ' '
    INNER JOIN SZM010 AS SZM
        ON ZM_FILORIG = RE0_FILIAL
           AND SZM.D_E_L_E_T_ = ' '
    INNER JOIN SED010 AS SED
        ON RC1_NATURE = ED_CODIGO
           AND SED.D_E_L_E_T_ = ' '
WHERE RC1_FILTIT = '2B'
      AND RC1_CODTIT = 'APT'
      AND RC1_PREFIX = '2BP'
      AND RC1_NUMTIT = '000009999'
      AND RC1.D_E_L_E_T_ = ' ';

Esse Worktable nos mostra que essa query está utilizando muito tempdb:

Table 'Worktable'. Scan count 0, logical reads 655602
Table 'RC1480'. Scan count 1, logical reads 6
Table 'SA2010'. Scan count 1, logical reads 23442
Table 'RD0010'. Scan count 1, logical reads 1782

Olhando o plano de execução também podemos ver essa informação:

Quando virem um operador com “Spool” no nome, já visualizem que sua query está armazenando dados no tempdb para reutilizar esses dados posteriormente nesse plano.

Quando verem uma seta grande, significa que muito dado está sendo trafegado por ali.

Ou seja, pelo SET STATISTICS IO eu já tinha visto que o SQL estava usando o tempdb devido a quantidade de reads no Worktable. Eu abro o plano e vejo um Spool com uma seta desse tamanho.

Tenho que tentar ver algo nessa tabela RD0010 que está envolvida nessa bagunça toda.

Sem essa análise acima, nosso primeiro pensamento seria ir direto na tabela RC1480 que é utilizada pelo WHERE e criar um índice pela coluna abaixo:

AND RC1_NUMTIT = '000009999'

Contudo, não vou fazer isso. Vamos seguir na linha do tempdb primeiro.

Procurando a tabela RD0010 na query, vemos que um join é realizado com ela:

INNER JOIN RD0010 AS RD0 ON RD0_CODIGO = RE0_RECLAM AND RD0.D_E_L_E_T_ = ' '

Não existe índice nessa coluna RD0_CODIGO. Se eu criar, será que vai ajudar?

Vamos tentar…

Criando o índice:

CREATE NONCLUSTERED INDEX RD0010W01
ON [dbo].RD0010 (RD0_CODIGO,D_E_L_E_T_)
INCLUDE (RD0_NOME) with(DATA_COMPRESSION=PAGE,FILLFACTOR=90)

Rodando a query novamente…. WOW!!!!

Milagrosamente sumiu aquele número gigante de leituras no tempdb:

Table 'Worktable'. Scan count 0, logical reads 535
Table 'RD0010'. Scan count 1, logical reads 3
Table 'SA2010'. Scan count 1, logical reads 23442
Table 'RC1480'. Scan count 1, logical reads 6

Muito bom Fabrício, mas ainda tem uma tabela fazendo mais 23 mil reads ai, não consegue resolver ela também?

Está bem… Vamos aproveitar a viagem e ver ela também .

Seguindo a mesma ideia da tabela anterior, criamos o índice abaixo pensando no join com essa tabela SA2010:

CREATE NONCLUSTERED INDEX SA2010W01
ON [dbo].[SA2010] ([A2_COD],[A2_LOJA],[A2_CGC],[D_E_L_E_T_])
INCLUDE ([A2_NOME],[A2_BANCO],[A2_AGENCIA],[A2_NUMCON])
with(DATA_COMPRESSION=PAGE,FILLFACTOR=90)

Rodando a query novamente, agora baixamos para 3 leituras de páginas também na SA2:

Table 'SA2010'. Scan count 1, logical reads 3

Colocando um waitfor delay na execução da query conseguimos visualizar no log de queries demoradas:

Ela rodou em 0,11 segundos e a diferença de leituras de páginas (691 mil para 2mil) e do consumo de CPU (2 mil para 100) é considerável!!!

É isso ai pessoal, melhoramos mais uma query no Protheus.

Com isso, encerramos essa série de Posts sobre Melhoria de Performance de Consultas Totvs.

A não Fabrício!!! Sério???

Sério…

Espero que tenha contribuído de alguma forma no seu aprendizado.

Gostou desse Post?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Tarefas do Dia a Dia de um DBA – Soluções de HA e DR – FREE

$
0
0

 

Fala Pessoal, Tudo certo?

Quem me acompanha nas redes sociais já deve ter visto que liberei um módulo do meu Treinamento em forma de curso na Udemy sem custos. É um curso rápido e ainda gera um certificado no final.

Então, caso não conheça muito bem o que o SQL Server tem a te oferecer de soluções de DR (Disaster Recovery) e HA (High Availability), esse curso pode te ajudar:

https://www.udemy.com/tarefas-do-dia-a-dia-de-um-dba-solucoes-de-ha-e-dr/

Gostei do curso Fabrício, tem outros?

Tem sim! ->https://www.fabriciolima.net/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/

Ainda não me segue nas Redes Sociais?

Nunca é tarde para começar:

Facebook – https://www.facebook.com/pages/Fabricio-Lima-Consultoria-SQL-Server/239658476126229

Twitter – https://twitter.com/Fabriciodba

Linkedin – http://www.linkedin.com/pub/fabricio-fran%C3%A7a-lima/24/887/499

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Tarefas do Dia a Dia de um DBA – Gerenciamento de Acesso – FREE

$
0
0

 

Fala Pessoal, Tudo certo?

O módulo 2 do meu Treinamento de Tarefas do Dia a Dia de um DBA já estava liberado no meu canal do Youtube. Contudo, na tentativa de alcançar um público maior, acabei de disponibilizar ele FREE na Udemy com direito a um certificado na conclusão do curso:

https://www.udemy.com/tarefas-do-dia-a-dia-de-um-dba-gerenciamento-de-acesso/

Gostei do curso Fabrício, tem outros?

Tem sim! ->https://www.fabriciolima.net/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Tarefas do Dia a Dia de um DBA – Alertas no SQL Server – FREE

$
0
0

Fala Pessoal, Tudo certo?

O módulo 7 do meu Treinamento de Tarefas do Dia a Dia de um DBA já estava liberado no meu canal do Youtube. Contudo, na tentativa de alcançar um público maior, acabei de disponibilizar ele FREE na Udemy com direito a um certificado na conclusão do curso:

https://www.udemy.com/tarefas-do-dia-a-dia-de-um-dba-alertas-no-sql-server/

Gostei do curso Fabrício, tem outros?

Tem sim! ->https://www.fabriciolima.net/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

MVP National Conference 2018

$
0
0

Fala Galerinha, tudo certo?

Em nosso último encontro de MVPs, algumas pessoas tiveram a brilhante ideia de fazer um evento para entregar uma grande oportunidade de aprendizado para vocês. Daí nasceu o MVP National Conference.

Quando e onde será o evento Fabrício?

O evento acontecerá nos dias 06 e 07 de Abril na UNIP Tatuapé (mesmo local do SQL Saturday São Paulo).

Esse é um evento só de SQL Server?

Não. O evento envolve MVPs de todas as categorias. Ou seja, se você trabalha com TI, vai ter uma palestra boa para te agregar novos conhecimentos.

Seguem as palestras separadas por categorias: Palestras MVPconf

Além das palestras, é outra grande oportunidade de Networking para sua carreira.

Como posso me inscrever?

Segue o link de inscrição: Inscrição MVPconf

Mas Fabrício, é pago? Evento de MVP não deveria ser grátis?

Além de ajudar vocês com conhecimento, também queremos ao mesmo tempo ajudar a APAE. Toda verba do evento será destinada a APAE. Os palestrantes de vários lugares do Brasil vão arcar com seus próprios custos de hospedagem e passagem para estar presente nesse evento.

Conto com vocês para bater nossa meta ousada de 1000 participantes!!! Além de nós, a APAE ficará muito feliz com sua presença.

Fabrício, gosto do seu blog, vou conseguir te encontrar lá para te conhecer pessoalmente?

Yes!!! Vou fazer uma palestra rápida de Azure SQL Database. Teremos bastante tempo para conversar nesses 2 dias.

 

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

MVP Global Summit 2018 (EUA)

$
0
0

Fala Pessoal,

No dia 01/03/2017 recebi aquele e-mail que te faz parar tudo o que estava fazendo e te deixa sem fazer mais nada pelo resto do dia:

Hoje, exatamente um ano depois, estou embarcando para Seattle para participar do MVP Global Summit, o que considero ser o maior benefício que o programa MVP nos dá.

Vamos ter palestras com a galera responsável por desenvolver o SQL Server. Aqueles caras que pensam e executam as novas funcionalidades do produto que trabalho. Sensacional!!!!

Aquele momento que você para e reflete sobre sua trajetória e agradece mentalmente a todos que participaram dela!!!

O mínimo que posso fazer é ir até lá e absorver o máximo de conhecimento possível, seja com as palestras ou com os outros participantes do mundo inteiro, para futuramente compartilhar essas informações com vocês. As palestras são NDA (não podemos falar sobre elas agora), mas quando os assuntos forem liberados para o público, contem comigo para passar esses conhecimentos para vocês.

Vamos aproveitar e fazer aquela aula prática de inglês nos dias que tivermos por lá.

Se quiser acompanhar as fotos dessa minha jornada e conhecer um pouco do campus da microsoft em Redmond, segue meu Instagran: https://www.instagram.com/fabriciofrancalima/

Abraços,

Fabrício Lima

Microsoft Data Platform MVP


Azure SQL DB Managed Instance – Indrodução

$
0
0

 

Fala Pessoal,

Semana passada, enquanto estava participando do MVP Summit na sede da microsoft em Redmond-WA, eles anunciaram a liberação de um preview público de um negócio chamado Azure SQL Database Managed Instance. Esse anúncio pode ser visto no link abaixo:

https://azure.microsoft.com/en-us/blog/migrate-your-databases-to-a-fully-managed-service-with-azure-sql-database-managed-instance/

Conversando com alguns clientes, quase nenhum conhecia o que era isso, então resolvi fazer esse post para começar a explicar para vocês do que se trata e como isso pode te ajudar.

O que é Azure SQL Database Managed Instance?

Antes de falar do Managed Instance (MI para os íntimos), deixa eu falar um pouco do nosso cenário atual de SQL Server no Azure.

Hoje temos duas formas de levar nosso banco de dados SQL Server para o Azure.

1) Contratanto apenas uma Base de Dados com o Azure SQL Database (Paas – Platform as a Service): Nessa forma de contratação você contrata uma ou mais bases de dados no Azure com uma determinada capacidade de performance e se conecta via Management Studio e aplicações normalmente. Muito fácil e rápido (poucos cliques).

Benefícios:

  • Muito fácil e rápido a disponibilização de uma base de dados para a sua aplicação.
  • Custo acessível até para empresas bem pequenas.
  • Não precisa se preocupar com aplicação de Patch de segurança, manter um windows server e administrar um servidor por completo.
  • Ao criar uma base, automaticamente ela já é replicada entre outros 2 servidores no mesmo datacenter. WOW!!!
  • Temos um AlwaysOn automaticamente configurado por trás dos panos! O Custo de um projeto de Alwayson na sua empresa seria bem alto.
  • Conseguimos criar uma replicação geográfica com poucos cliques. Conseguimos usar ela como ReadOnly para apontar os nossos relatórios para lá.
  • Temos Backup Automático.
  • Seu SQL Server já se mantém atualizado com a última versão e novas features.
  • Dentre outros benefícios…

Dificuldades:

  • Não temos como configurar o Database Mail para mandar e-mails de procedures.
  • Linked Server tem que ser reescrito de outra forma (mais trabalhosa).
  • Não tem o nosso querido SQL Server Agent. Mas é possível fazer automatização de outra forma (bem mais trabalhosa).
  • Você não consegue dar um JOIN simples entre duas databases igual fazemos aos montes hoje em dia nas nossas aplicações (CROSS DATABASE).

Com essas dificuldades, algumas aplicações tem que ser ajustadas para poderem funcionar no Azure SQL Database como um serviço (Paas).

2) Contratando uma VM (Iaas – Infraestrutura as a Service):

Benefícios:

  • Conseguimos migrar nossa aplicação para o Azure sem ter que fazer adaptações. Nada muda na nossa administração. O servidor está apenas em um novo local.
  • Não precisamos manter um datacenter interno que é bem trabalhoso e custoso.

Dificuldades:

  • Ainda temos que manter o Windows Server e atualizações de Patchs.
  • Se quisermos ter a base do SQL Server replicada, temos que realizar um projeto de Alwayson por nossa conta.
  • O time de produto do SQL Server trabalha demais. Hoje temos novas versões do SQL Server com um tempo curto de diferença. Em uma VM, você tem que bancar esses projetos de migrações (2008 ->2012->2014->2016-2017->…)

Devido a essa migração não precisar de alterações na aplicação, tenho mais clientes indo para o Azure como VM (Iaas) do que como Azure SQL Database(Paas).

Aí que entra o nosso novo melhor amigo chamado Azure SQL Database Managed Instance (que também é Paas).

 

 

O Managed Instance, é um meio termo dessas duas soluções que tínhamos até hoje. Então ela junta os benefícios do Azure SQL Database (Paas) com o benefício da Vm (Iaas) que é não ter que alterar nossa aplicação.

Ou seja, podemos pegar nosso SQL Server como está hoje ai na nossa empresa, usar uma ferramenta de migração simples que a microsoft também vai nos disponibilizar e começar a utilizar nosso SQL na nuvem.

 

Benefícios do Azure SQL Database Managed Instance:

  • Não precisamos alterar nossas aplicações para migrar para o Managed Instance.
  • Sua instância no MI do Azure fica completamente isolada de outros clientes através de uma VNET (em um post futuro falarei com mais detalhes sobre isso).
  • Não precisa se preocupar com aplicação de Patch de segurança, manter um windows server e administrar um servidor por completo.
  • Ao criar uma base, automaticamente ela já é replicada entre outros 2 servidores no mesmo datacenter (AlwaysON). WOW!!!
  • Temos Backup Automático e conseguimos restaurar uma base até um determinado momento.
  • Seu SQL Server já se mantém atualizado com a última versão e novas features. Não vai precisar pagar um DBA para migrar a versão do seu SQL Server.

A contratação do Managed Instance vai ser por vCores e não por DTU como era o Azure SQL Database. Nesse momento teremos as opções de 8,16 e 24 cores.

Fabrício, você falou que a microsoft liberou o Preview… eu tentei acessar no portal e não consegui… é só para MVP isso?

Keep Calm. Eu também não consegui o acesso ainda. Olha o email que recebi:

Eles vão liberar aos poucos… O importante é que finalmente esse projeto está evoluindo e está chegando o dia que vamos poder utilizar o MI em produção.

Segue abaixo duas leituras para aprenderem mais um pouco sobre o assunto:

 

Assim que consegui acesso ao Preview, vou manter uma série de posts sobre o assunto para te deixar informado de todas as features e benefícios que o Managed Instance pode te proporcionar.

Se você ainda estava com o pé atrás de ir para o Azure SQL Database por causa da falta de features ou adaptações que você tinha que fazer nos seus sistemas, agora essa desculpa acabou. Sua migração para o Azure está cada vez mais perto.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Treinamento Internals Fabiano Amorim em SP

$
0
0

Fala Pessoal,

Post rápido para deixar uma dica para vocês que estão buscando um Treinamento SQL Server de nível avançado master blaster ninja ++…

Em todos os sábados de Junho, o mestre Fabiano Amorim vai estrear seu Treinamento de Internals com um formato de muita prática.

Datas, Horários, Valores, Conteúdo… basta clicar no link abaixo:

https://blogfabiano.com/2018/05/02/ementa-final-e-confirmacao-de-turma-novo-sql-server-internals-mastering/

Esse não será aquele treinamento com várias repetições no ano, então se não quiser esperar um bom tempo até uma nova turma abrir, aproveite agora.

Para quem for, nos vemos por lá. Como o treinamento terá muitas DEMOS, caso consiga entender alguma coisa que aquele maluco vai falar, vou ajudá-lo no acompanhamento da galera enquanto fazem as DEMOS.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

 

Azure SQL Database – Permitindo que sua empresa pequena tenha uma base replicada

$
0
0

Fala Pessoal,

Esse post é só para avisar que tem um novo vídeo no meu canal do youtube.

Após a MVPConf, fiz um vídeo com a DEMO de replicação geográfica que mostrei no evento.

Segue o link do vídeo no canal do youtube: Vídeo Replicação Geográfica

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

[Dicas de Estudo] Acompanhar hashtag #SQLServer do Twitter no Slack

$
0
0

Fala Pessoal,

Já tinha me cadastrado no Slack a muito tempo, contudo, quase nunca acompanhava os canais que tinha me cadastrado.

Implantamos na empresa nesse mês de Junho(2018) e digo para vocês que nossa vida mudou com a facilidade e organização de comunicação que o Slack proporciona, assim como integrações com outras ferramentas.

A medida que for descobrindo isso em nosso dia a dia vou compartilhar aqui com vocês.

A dica de hoje é integrar o Twitter com o Slack.

Mesmo com pouco uso aqui no Brasil, o twitter ainda é muito utilizado lá fora, principalmente pela galera do mundo SQL Server. Uma das coisas que eu acompanhava no twitter era hashtag #SQLServer para saber o que estava sendo falado sobre SQL Server no mundo.

Como agora já fico com o slack aberto o tempo todo, porque não trazer esse conteúdo do twitter para dentro dele?

Através do site IFTTT conseguimos fazer essa integração (existem outros que fazem também).

Passos:

1 – Entre no link abaixo:

https://ifttt.com/applets/294250p-post-tweets-with-a-specified-hashtag-to-a-slack-channel

2 – Faça um login (sign up), pode usar google ou facebook para isso.

3 – Vamos configurar essa integração abaixo. Esse site tem muitas outras integrações diferentes:

Clique em Turn On.

4 – Coloque a HashTag #sqlserver conforme abaixo e escolha seu canal do slack para onde quer enviar as informações. No meu caso criei um canal chamado twittersqlserver.

 

O site vai pedir uma aprovação para conectar no seu slack, no meu caso, como já tinha aprovado antes, não consegui gerar o print.

No final clicando em My Applets, é possível ver a integração configurada.

 

Olhando no meu canal do Slack, agora recebo tudo o que o mundo fala sobre #sqlserver no twitter e tenho mais uma fonte de aprendizado:

Claro que você não tem tempo de ler tudo o que sai no twitter, mas quando puder, passa o olho na lista e valida se tem algum artigo com um assunto que você precise aprender agora e leia.

A ideia disso é manter o slack aberto o dia todo e evitar ter que abrir outros sites e aplicativos.

Essa mesma dica vale para você que quer acompanhar outras Hashtags (CosmosDB, BigData, BI e etc…).

Segue um outro post onde mostro como acompanhar alguns blogs e sites sobre SQL Server:

https://www.fabriciolima.net/blog/2017/03/14/video-blogs-sobre-sql-server-que-o-fabricio-lima-acompanha/

Outra dica é participar dos canais SQLCommunity que falam de diversos assuntos de SQL Server separado em categorias(canais):

https://sqlcommunity.slack.com/

 

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

50 Dicas e Atalhos – SQL Server Management Studio (SSMS)

$
0
0

Olá pessoal,

Há alguns meses juntamos várias dicas de atalhos do SSMS em um Power Point para incluir no material de nossos Treinamentos.

Contudo, acabou que ficamos de realizar algumas validações no material e com a grande demanda que tivemos isso ficou em segundo plano. Ou seja, essa compilação de atalhos que fizemos estava parada aqui sem ajudar ninguém.

Problema resolvido!

Segue abaixo o link para baixar esse conteúdo (Power Point + Scripts de testes):

https://github.com/FabricioLimaSolucoesEmBD/Materiais/tree/master/Post-50-Atalhos-SSMS

Espero que gostem e que algo seja útil para o seu dia a dia.

Links utilizados como Referência:

Atalhos de teclado do SQL Server Management Studio

11 Keyboard Shortcuts Every SQL Server Geek Should Know

SQL Server Management Studio keyboard shortcuts (Part 1 of 2)

SQL Server Management Studio keyboard shortcuts (Part 2 of 2)

OBS: Algumas Dicas e Atalhos podem não funcionar em algumas versões do SQL Server Management Studio. Caso tenha algum problema, deixe um feedback nos comentários para poder agregar ainda mais informação ao post. Deixe também alguma sugestão para utilização das dicas que você já tenha usado em algum contexto e ache interessante compartilhar.

Se for possível, utilize a última versão do SSMS. Segue abaixo o link para fazer o Download:

https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms

Gostou dessas Dicas?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Até a próxima.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Congratulations 2018-2019 Microsoft MVP!

$
0
0

Fala Pessoal,

Ontem (01/07/2018) recebi essa bela notícia e tinha que passar aqui para compartilhar com vocês.

Vamos para o segundo ano de MVP em Data Platform!!!

Como publiquei nas minhas redes sociais, tão feliz quanto esse prêmio é você viajar para vários lugares diferentes e encontrar pessoas que nunca viu na vida te agradecendo… dizendo que seus scripts… posts… vídeos… palestras… ajudaram elas no seu dia a dia de trabalho e a crescerem profissionalmente…

Isso é TOP demais! Essa é a minha vida… Esse é o meu clube…

Os agradecimentos são os mesmos:

  • A minha esposa (Fabiana Lima) pela paciência e apoio durante todo tempo que passei gerando conteúdo para esse Blog ou viajando para palestrar.
  • A todos que tive a oportunidade de trabalhar junto e que contribuíram para o meu crescimento profissional.
  • A todos vocês que leem meu blog, assistem meus vídeos e vão as minhas palestras… Se não fosse os feedbacks de vocês, certamente já teria parado faz tempo.
  • E a toda família SQL Server que nos motivam a seguir nessa caminhada.

 

Agora a missão é continuar aprendendo coisas novas e produzindo ainda mais conteúdo para ajudar no crescimento profissional de vocês.

Obrigado novamente pessoal!!!

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

03/07/2018 – 4 Anos da Fabricio Lima Soluções em BD

$
0
0

Fala Pessoal,

Hoje é um dia muito especial e vou aproveitar para contar um pouco da nossa história para vocês.

Eu tenho um Blog falando sobre SQL Server desde 2010. No ano de 2013, uma pessoa que acompanhava minhas postagens me mandou mensagem perguntando se podia ajudá-la a melhorar a performance do banco de dados de sua empresa. Eu não tinha ideia, mas era nesse momento que estava nascendo a Fabrício Lima Soluções em BD.

Eu topei na hora fazer o serviço e, comparado a consultorias profissionais naquela época, certamente meu valor hora era bem menor. Contudo, era uma grana extra entrando no final do mês pela primeira vez na vida… achava muito show isso… ajudou demais naquele momento.

Após esse primeiro cliente, comecei a anunciar que eu poderia fazer esse tipo de serviço. Com o tempo foram aparecendo outros serviços… Um cliente começou a indicar para outro e assim foi crescendo…

Até a metade do ano de 2014 eu gerava Notas pela empresa de um amigo, mas o volume estava crescendo e me toquei que estava começando a incomodar. Dessa forma, em 03/07/2014 oficialmente nasceu a Fabrício Lima Soluções em BD. Uma empresa criada não para ter 1000 clientes e 100 funcionários, mas sim para que eu pudesse realizar serviços extras ao trabalho fixo que eu já tinha (e era muito bom por sinal).

Seguindo a mesma fórmula de sucesso de indicação em indicação, no segundo semestre de 2014 e primeiro semestre de 2015, o número de clientes continuou crescendo e apareceram clientes fixos.

Eles podiam me abandonar a qualquer momento, pois não prendo cliente com cláusula de contrato, prendo com serviços de qualidade e bom atendimento. Entretanto, era um valor que “podia” contar no fim do mês (com riscos).

No meio de 2015 esses clientes já somavam praticamente o meu salário fixo e não estava nada fácil manter os 2 empregos. Trabalhava o dia todo em um e a noite e fins de semana em outro. Parei de jogar bola, sai da equipe de corrida, parei de viajar, reduzi saídas com amigos… Foram uns 6 meses em 2015 sem vida social.

Aí veio uma das decisões mais importantes que tive que tomar na vida… Nesse momento já tinha quase 10 anos de um emprego CLT em uma grande empresa do ES onde entrei como estagiário e já era Coordenador de Infraestrutura. Ninguém tem emprego garantido, mas pelo que entregava lá dentro sentia que tinha uma certa estabilidade ainda.

Era um ou outro.

Coordenador de Infraestrutura de uma grande empresa ou se aventurar por conta própria com consultorias e treinamentos em SQL Server?

O que você escolheria?

Como sua esposa e família iriam reagir?

Decisão difícil, mas na vida chega um momento que temos que seguir novos rumos. Após 10 anos, resolvi sair da zona de conforto e me aventurar sozinho.

12 de junho de 2015, meu último dia de trabalho CLT.

Quando saí, ainda não tinha meta de ter 1000 clientes e 100 funcionários. Queria apenas ter os clientes suficientes para cobrir meu salário e trabalhar de Home Office por conta própria.

O segundo semestre de 2015 e o primeiro semestre de 2016 seguiram a mesma fórmula: Clientes entrando aos poucos, indicações, mais clientes…

Chegou um momento que já estava começando a ficar pesado para mim… E férias? Será que nunca vou conseguir tirar? De que adianta trabalhar se não pode viajar para curtir o seu trabalho?

Ai veio a segunda grande decisão da empresa. Contratar uma pessoa para me ajudar.

Comecei passando alguns serviços fora do horário para o meu irmão Luiz Vitor e vi que ele estava curtindo. Fiz uma proposta para ele e em Setembro de 2016, a Fabrício Lima Soluções em BD ganhou seu segundo funcionário. Treinei ele durante muito tempo e hoje ele é meu braço direito no atendimento aos clientes e evoluiu demais no conhecimento em SQL Server desde 2016.

Agora sim, conseguia parar para fazer uma viagem que tinha alguém para me cobrir em caso de emergência com clientes.

Seguimos tocando juntos o final de 2016 e primeiro semestre de 2017. Nesse momento, os clientes continuaram entrando e já estava apertado para nós 2 manter a empresa sozinhos. Se um viajasse, o outro iria sofrer um pouco.

Em junho de 2017 contratamos o Alan Mairinck para nos ajudar. Ele não era DBA, mas assumimos o compromisso de treinar ele do zero nos modelos que trabalhamos aqui na empresa. Deu certo, o crescimento dele em 1 ano foi muito grande.

Um novo consultor nos dá uma folga de trabalho temporária até que entrem novos clientes e foi o que aconteceu. Em Maio de 2018 já estava pesado de novo para nós 3 e precisávamos de ajuda. Dessa vez resolvi contratar um profissional que já tinha mais experiência, que tinha um blog e já palestrava sobre SQL Server.

Chegou o Tiago Neves, que em 2 meses já mostrou que é de grande valor para o time resolvendo problemas que outros membros da equipe ainda precisariam ser treinados por mim para resolver.

Ufa… assim chegamos no dia de hoje 03/07/2018 (data que escrevo esse post)…

O que era uma empresa para gerar uma renda extra, hoje é a fonte de renda de 4 pessoas e será de mais pessoas em breve. Uma baita responsabilidade da minha parte fazer isso tudo dar certo, para não afetar quem trabalha para mim.

Já atendemos 165 clientes diferentes e temos 35 com contrato de suporte e monitoramento mensal, onde somos responsáveis por administrar o banco de dados desses clientes e ajudar sua equipe de TI a dormirem mais tranquilos, pois sabem que podem contar conosco para tomar conta dos seus dados.

Ainda não tenho uma meta de ter 1000 clientes fixos e 100 funcionários… Nossa meta é conquistar um cliente de cada vez… Atender bem… Quando precisar, crescer o time (o que no atual cenário, não vai demorar muito). E assim vamos ver o que o futuro nos reserva.

O que não abro mão é jogar o meu Futebol… Praticar minha corrida… Curtir a família…. Sair com amigos… Viajar… Viajar…

De nada adianta viver para o trabalho se não podemos usufruir das coisas boas da vida. Não sabemos o que vai acontecer no dia de amanhã.

Todo mundo em algum momento passa por um tempo “sem vida social” igual eu passei em 2015. A maioria passa até muito mais tempo do que os meus “6 meses”. Façam de tudo para não deixar isso ser o normal da sua vida.

Continuo trabalhando e estudando bastante a noite e fins de semana (nunca será fácil), mas não TODAS as noites e nem TODOS os fins de semana.

Fechando esse post agradecendo a TODOS que passaram pela minha vida pessoal e profissional e me ajudaram a chegar até aqui.

Reforço também os agradecimentos ao #TeamFabricioLima !!! Sem vocês nada disso seria possível!!! Obrigado pessoal!

Até o fim do ano certamente teremos novidades na Fabricio Lima Soluções em BD.

Vamos continuando a escrever nossa história passo a passo e GO GO GO para mais um ano de empresa!!!

Obrigado.

Vila Velha-ES, 03/07/2018, Fabrício França Lima.


GitHub – Scripts que utilizamos em nosso dia a dia de Consultorias

$
0
0

Boa Tarde Pessoal,

Todos nós temos aquele repositório de scripts preferidos salvos em uma pasta, no OneNote ou em outro lugar qualquer, certo?

Em nosso dia a dia de consultorias utilizávamos uma pasta compartilhada no dropbox para armazenar os nossos. O acesso era fechado só para o nosso time.

Pô Fabrício, mas seria legal você compartilhar isso com a comunidade hein…

Resolvido.

Criamos um GitHub para a empresa e estamos disponibilizando os scripts que utilizamos no nosso dia a dia com vocês.

Ainda estamos terminando de subir os scripts, então a medida que vamos precisando e não encontramos eles lá no GitHub, colocamos.

Claro que não escrevemos todos esses scripts. Certamente achamos no google e adaptamos para nossa realidade. Os scripts que conseguimos saber o dono, tem a referência e o site do autor.

Segue o caminho para utilizarem os Scripts:

https://github.com/FabricioLimaSolucoesEmBD/SQLScripts

Se não acharem o link do nosso GitHub, basta vir aqui no blog e entrar nesse caminho abaixo:

Caso tenham dicas de Scrips legais, nos enviem para que possamos testar e incluir lá também.

Espero que gostem da novidade e que isso possa ajudar vocês de alguma forma.

Até a próxima.

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Azure SQL Database – Função getdate() com valor errado no Azure. É isso mesmo?

$
0
0

Fala Pessoal,

Finalmente temos um cliente onde realizamos um suporte e monitoramento mensal indo para o Azure, ou seja, muitos posts para vocês com experiências e casos do Dia a Dia que vivenciaremos no Azure SQL database.

Serão desde dicas mais simples como essa de hoje até dicas mais complexas como rotinas de ADM que ainda precisamos executar no Azure.

Como criar uma base no Azure vocês podem ver nesse post do Tiago Neves abaixo:

https://www.tiagoneves.net/blog/criando-um-banco-de-dados-sqldatabase/

Após criar uma base e conectar, executei o tão utilizado comando select getdate() e o bendito vem um valor diferente do nosso horário de Brasília. Vixe!

No meu caso aqui em Vitória-ES, o Azure fica 3 horas adiantado do meu horário local.

Mas Fabrício, e se eu criar a minha base no Datacenter do Brasil, isso também acontece?

R: Sim. Mesma coisa.

O serviço de banco de dados do Azure (Paas), sempre utiliza o UTC como time zone para suas bases, dessa forma você consegue mudar uma base entre data centers de diferentes continentes sem ter que mudar nada com relação a datas no seu banco.

Entendi Fabrício. Mas a solução é fácil então. Coloco um dateadd -3 horas no getdate e está resolvido.

Gambiarra! E o horário de verão?

Verdade Fabrício. Como faço então?

Quando fizer uma busca no google, vai achar alguém falando da utilização do comando “AT TIME ZONE” junto com o seu Getdate().

Exemplo:

SELECT GETDATE() AT TIME ZONE 'Central European Standard Time'

Resultado: 2018-07-05 18:29:43.613 +02:00

Massa Fabrício. Como sei qual é o meu time zone?

Com esse comando PowerShell pegamos:

Podemos procurar se ele existe no azure na query abaixo:

*is_currently_dst – True se atualmente observando o horário de verão.

 

Certo Fabrício. Então é só usar o getdate() conforme abaixo que meu problema está resolvido.

Ops. Deu ruim. A hora continua vindo 3 horas adiantada do meu horário local, que nesse momento da execução era 15h36min.

E agora? Escolhi o Time Zone errado?

Não. É um pouco confuso, mas temos que transformar o getdate() para o formato datetimeoffset primeiro antes de convertê-lo para o nosso time zone.

Agora sim a hora está correta!!! YES!!!

Você tem uma segunda opção de rodar direto o comando SYSDATETIMEOFFSET() e converter para o nosso Time Zone:

Pronto.

Agora você pode criar sua própria função de getdate() e dar aquele replace em todas as views, procedures, default constraints e functions quando for criar esses objetos no Azure.

CREATE FUNCTION dbo.getdate2()
RETURNS datetime
AS
begin
	DECLARE @getdate datetime
	SET @getdate = SYSDATETIMEOFFSET() AT TIME ZONE 'E. South America Standard Time'
	RETURN @getdate
end

A função pode ser usada dessa forma:

Meu horário correto e 16h14min no momento dessa execução.

É isso aí pessoal.

Até a próxima dica de como utilizar o Azure SQL Database no seu dia a dia de trabalho.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Azure SQL Database – Como fazer um join entre tabelas de bases diferentes?

$
0
0

Fala Pessoal,

Continuando a série de posts sobre o Azure SQL Database, no meu dia a dia de Consultorias é bem comum ver sistemas que utilizam mais de uma base de dados para realizar operações.

E no Azure SQL Database? Isso funciona?

Vamos testar juntos?

Criei duas bases (database01 e database02) no meu portal do azure conforme pode ser visto abaixo:

Em seguida criei uma tabela em cada uma dessas bases de dados e populei com algumas informações:

Database01:

CREATE TABLE sqlfamily(
 ID int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
 Nome VARCHAR(50),
 Mais_Conhecido_Como VARCHAR(100)
)
 
INSERT INTO sqlfamily(Nome, Mais_Conhecido_Como) 
VALUES 
 ( 'Fabricio Lima' ,'Fabricio Lima'),
 ( 'Fabiano Amorim' ,'Expert em vídeos fakes de futebol'),
 ( 'Luiz Gareth','Morango do Nordeste' ),
 ( 'Arthur Luz', 'Vagalume' ),
 ( 'Edvaldo Castro', 'Oldvaldo Castro' )

Database02:

CREATE TABLE sqlfamily(
 ID int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
 Nome VARCHAR(50),
 Hobby VARCHAR(100))
 
INSERT INTO sqlfamily(Nome, Hobby) 
VALUES 
( 'Fabricio Lima' ,'Futebol, Corrida, Seriados, Viajar, Rock com a galera, ...'),
( 'Fabiano Amorim' ,'Desafinar uma guitarra...'),
( 'Luiz Gareth','Tomar aquela batida de morango...' ),
( 'Edvaldo Castro', 'Jogar dominó na praça...' ),
( 'Arthur Luz', 'Ilimunar Ambientes...' )

Após criar e popular as duas tabelas com mesmo nome, mas em bases diferentes, vamos tentar fazer um join nelas para ver o que acontece:

Vixe… Deu ruim… E agora Fabrício???

Pois é… No Azure SQL Database não temos suporte para realizar um CROSS database igual realizamos em nossas instâncias On-Premise. Só no Azure SQL Managed Instance que isso será possível.

Mas… Contudo…Entretanto…Todavia…

Conseguimos chegar perto disso com a utilização de EXTERNAL TABLES.

Para fazer isso, vamos executar TODOS os comandos abaixo na database01.

Primeiro temos que criar uma master key:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'senhadificil->123456'

Quando criei a database02, eu também criei um login chamado dba_admin para acessar essa base.

Dito isso, vamos criar uma credencial para acessar a database02 com esse login:

CREATE DATABASE SCOPED CREDENTIAL Db02Credential WITH IDENTITY = 'dba_admin', SECRET = 'senha_user_dba_admin'

O próximo passo é criar um DATA SOURCE que vamos utilizar para acessar o servidor lógico e a database02. Utilizamos a credencial do passo anterior:

CREATE EXTERNAL DATA SOURCE Db02DataSource WITH
(TYPE = RDBMS, --Query
LOCATION = 'srvfabriciolimasolucoes.database.windows.net', --Servidor logico no azure onde está a base database02
DATABASE_NAME = 'database02',	--base que queremos acessar com a credencial Db02Credential
CREDENTIAL = Db02Credential		--Db02Credential - credencial que criamos para acessar a base database02
) ;

Finalmente vamos criar nossa EXTERNAL TABLE:

CREATE EXTERNAL TABLE dbo.sqlfamily_ext(
	--ID int,  --Conseguimos retornar menos colunas em uma external table. Ela fica parecida com uma view. Não vou usar a coluna ID.
	Nome VARCHAR(50), --se criar a coluna na external table com um tipo de dados diferente, da erro.
	Hobby VARCHAR(100)
)
WITH
(
DATA_SOURCE = Db02DataSource,
  SCHEMA_NAME = 'dbo', --Schema da tabela na database02
  OBJECT_NAME = 'sqlfamily' --Nome da tabela que eu quero referenciar na database02
);

Essa EXTERNAL TABLE é como se fosse um objeto da base database01, tanto que não conseguimos criar ela com o mesmo nome sqlfamily. Tive que colocar um sufixo “_ext” no nome para diferenciar o nome dos objetos.

Podemos conferir os objetos que criamos nas DMV’s abaixo:

SELECT * FROM sys.symmetric_keys
select * from sys.external_data_sources; 
select * from sys.database_scoped_credentials
select * from sys.external_tables;

Criada nossa External Table, agora conseguimos usar ela para acessar a tabela sqlfamily da database02.

Nosso JOIN fica da seguinte forma:

SELECT A.nome,
	   A.Mais_Conhecido_Como,
	   B.Hobby 
FROM database01.dbo.sqlfamily A
	JOIN database01.dbo.sqlfamily_ext B ON A.Nome = B.nome

Agora conseguimos acessar a database02 e pegar a informação da coluna Hobby:

Essa EXTERNAL TABLE é estática Fabrício? Se eu fizer novos inserts na database02 eles vão ser retornados automaticamente?

A external table é como se fosse um Linked Server para a database02. Ou seja, novos inserts serão retornados normalmente por esse join.

Vamos inserir uma linha em cada base para conferir.

--Rodar na database01
INSERT INTO sqlfamily(Nome, Mais_Conhecido_Como) 
VALUES  ( 'Diego Nogare' ,'NogareDBA')

--Rodar na database02
INSERT INTO sqlfamily(Nome, Hobby) 
VALUES  ( 'Diego Nogare' ,'Fazer shrink em arquivos MDF...')

Executando o JOIN novamente, nossas linhas que foram inseridas nas duas databases já são retornadas:

 

Legal Fabrício. Eu consigo fazer um insert nessa EXTERNAL TABLE?

Resposta:

 

Não conseguimos fazer um insert. Ela é utilizada apenas para consultas.

E a performance disso Fabrício? É boa?

Excelente pergunta.

Você já deve imaginar a resposta, mas vamos deixar os detalhes para um próximo post. Aguardem!

Posts Relacionados:

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Azure SQL Database – Quanto posso usar de Transaction Log? É ilimitado?

$
0
0

Fala Pessoal,

Continuando os posts sobre Azure SQL Database, dessa vez vamos falar sobre um erro de Log Full que consegui gerar em uma base no Azure.

O Transaction Log de uma base no azure funciona da mesma forma que em uma instância On-Premise.

Como no azure não conseguimos utilizar uma base com o recovery SIMPLE, toda base tem o recovery FULL, ou seja, nossas operações de INSERT/UPDATE/DELETE ficam no transaction log até que o backup do log salve essas informações e permita que elas sejam liberadas do log.

Nada diferente do que temos hoje no On-Premise.

Um dos problemas que temos hoje é estourar o log com REBUILD ou quando alguém deixa uma transação aberta. Aquele famoso BEGIN TRAN que o desenvolvedor (exemplo meramente ilustrativo) deixou aberto e foi almoçar.

Quando contratamos uma base no Azure, não é definido qual o tamanho do transaction log dessa base.

Por exemplo, nos meus testes eu contratei a base na versão mais barata com 5 DTUs e 2 GB máximo de tamanho de base.

E tamanho do Transaction log? É Ilimitado?

Para tentar pegar essas respostas fiz um teste com os scripts abaixo:

--Cria uma tabela de teste
CREATE TABLE [dbo].[Teste_TransactionLog](
	[Col] [VARCHAR](8000) NULL
) ON [PRIMARY]
GO

--Popula essa tabela
insert into Teste_TransactionLog select replicate ( 'b',8000)
GO 100

INSERT into Teste_TransactionLog
SELECT * FROM dbo.Teste_TransactionLog
GO 4

A tabela ficou bem pequena com apenas 1600 linhas e ocupando 12 MB:

EXEC sp_spaceused Teste_TransactionLog

name                  rows                 reserved           
Teste_TransactionLog   1600                 12808 KB

Mantendo essa tabela com esse tamanho, abri uma transação e deixei um loop sendo executado realizando um update. Esse update gera alterações que são gravadas no transaction log, que passa a crescer:

SET NOCOUNT ON

--deixa a transação aberta
BEGIN TRAN

--coloca o update para rodar em loop
while 1=1
BEGIN 
	 update Teste_TransactionLog set Col = REPLICATE( SUBSTRING('abcdefghijlmnopqrstuvxz',(CAST((RAND()*5465465) AS INT)%20),1),8000)
end
GO

Como minha base tem 5 DTU, ela não consegue processar muita coisa. Deixei o update rodando, fui resolver outras coisas e quando voltei, lá estava a famosa mensagem de Transaction log is full:

Opa…

Então quer dizer que o Transaction Log do Azure não é Ilimitado?

Resposta: Não.

O Transaction Log da minha database que tem um tamanho de 2 GB chegou a aproximadamente 5 GB de tamanho:

Eu entrei em contato com o Xiaochen Wu (Senior Program Manager do time de Azure SQL Database), mostrei esses testes e perguntei se existia alguma regra ou fórmula que determinasse o tamanho máximo de um T-Log no Azure.

A resposta dele foi a seguinte:

“Não existe nenhuma fórmula fixa para determinar o tamanho do Transaction Log. Isso não está documentado porque nós mudamos esses valores dinamicamente de forma frequente para alcançar o melhor caso para a maioria dos clientes. O tamanho do log é determinado pelo volume computacional e não pelo tamanho da database. Podemos ter uma base bem pequena que gere muito log.

Nós raramente vemos um cliente com problema de Log Full no Azure SQL. Na maioria dos casos o usuário fez um rebuild em uma tabela muito grande ou deixou uma transação aberta. Para o REBUILD nós liberamos o ONLINE INDEX REBUILD que não vai bloquear a Limpeza do Log. Para o caso da transação aberta, ela vai morrer em algum momento, dar rollback e liberar o T-Log.”

Perguntei se podia compartilhar isso com vocês e disse que sim. Fica aqui meu agradecimento ao Xiaochen Wu pelo tempo em responder minhas dúvidas.

Resumindo, o transaction log não é infinito e não tem uma fórmula mágica para sabermos até quanto o T-Log da nossa base pode alcançar.

Fica a dica de quando rodar um REBUILD dos índices no Azure, utilizar a opção ONLINE (post futuro) e nunca deixar transações abertas na base e ir almoçar. =)

O Azure não tem um alerta no portal para monitorar o Transaction Log, mas podemos criar um para salvar essa informação em uma tabela e depois via alguma aplicação ler essa tabela e enviar um e-mail. Entretanto, isso já é assunto para outro post futuro.

Espero que tenham aprendido algo novo.

Até a próxima.

Posts relacionados sobre o Azure SQL Database:

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

SQL DAY ES – Passamos de 250 inscritos! WOW!!!

$
0
0

Fala Pessoal,

É com bastante alegria que compartilho com vocês que passamos de 250 inscritos para o SQL Day ES.

O evento está tomando uma proporção até maior do que estávamos esperando e isso é muito TOP. Muito bom saber que a cominudade do ES está com sede de adquirir conhecimento na plataforma de dados microsoft.

O evento será realizado no dia 04/08/2018 de 08:00 – 17:30, no Centro Universitário Católica de Vitória (Salesiano), iremos realizar um dia inteiro de palestras diversas, trazendo profissionais especialistas de diversas especialidades (DBA’s, Engenheiros de Dados, Cientistas de Dados, Analistas de BI, etc), reconhecidos em todo o Brasil.

Detalhes sobre o evento

Data: 04/08/2018 (sábado)
Horário: 08:00h às 17:20h
Local: Centro Universitário Católico de Vitória – Antiga Faculdade Católica Salesiana (link aqui)
Endereço: Av Vitória, 950, Forte São João, Vitória, ES (visualizar localização)

Agenda
Horário Descrição Palestrante
08:00 – 09:00 Credenciamento
09:00 – 09:15 Abertura Organização SQL Day
09:15 – 10:10 BI de gente grande! Muito além das planilhas… Vithor Silva
10:15 – 11:10 5 dicas de tuning para desenvolvedores Reginaldo Silva
11:15 – 12:10 Inteligência artificial aplicada em sistemas embarcados Daniel Pontes
12:10 – 13:10 Almoço
13:15 – 14:10 NoSQL x Relacional Caio Amante
14:15 – 15:10 Você conhece o Power BI Report Server? Felippe Oliveira
15:15 – 15:30 Mulheres na TI Sulamita Dantas, Nane Lins e Jéssica Lima
15:30 – 16:00 Coffee-break
16:00 – 16:50 Do nada ao TUDO no Power BI Claudio Bonel
16:50 – 17:20 Encerramento Organização SQL Day

Gostaríamos de agradecer aos nossos patrocinadores, pois sem esse apoio o evento não teria a mesma qualidade.

Ax4BEDPFabricio Lima Soluções em BDDadotecaMindworks e o já tradicional apoio do Centro Universitário Católica de Vitória.

AVISO IMPORTANTE: Nesse evento tivemos a ideia de pedir (não será obrigatório) que cada participante leve algum alimento não perecível à escolha e, após o evento, iremos doar esses alimentos para alguma instituição beneficente.

Para saber mais informações sobre o evento e fazer a sua inscrição, é só visitar o site oficial do SQL Server ES que ficou muito TOP.

Nos vemos no dia 04 de Agosto. Até lá!!!

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Viewing all 165 articles
Browse latest View live