Como monitorar a criação ou manutenção de um índice

Fala pessoal, bom demais?!

Segue dica rápida para fazer o monitoramento da criação e manutenção de índices no SQL Server, que funciona a partir do Sql Server 2014.

Através da DMV sys.dm_exec_query_profiles e habilitando as estatísticas do profile na sessão que está executando o script do índice, é possível monitorarmos.

Para monitorar você precisa:

  • Identificar o SPID da sessão onde a manutenção/criação está sendo realizada.
  • Habilitar o Statistics profile nessa mesma sessão.
  • Consultar usando a dmv citada em outra sessão.

O SPID pode ser identificado nos retângulos em vermelho.

Vamos aos scritps.

Para habilitar o Statistics profile, utilize o script SET STATISTICS PROFILE ON e não esqueça de desabilitado depois.

SET STATISTICS PROFILE ON
GO
ALTER INDEX "idx_01" ON "dbo"."log_acesso" REBUILD
GO
SET STATISTICS PROFILE OFF
GO


Vamos supor que o SPID desse alter index seja o 6583, então devemos incluí-lo no where filtrando o session_id igual a 6583, conforme abaixo.

SELECT physical_operator_name, SUM(estimate_row_count) AS linhas_estimadas, SUM(row_count) linhas, CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count) perc_realizado
FROM sys.dm_exec_query_profiles
WHERE session_id= 6583
GROUP BY physical_operator_name
order by 1 desc

Com isso teremos o resultado conforme imagem abaixo:

Por hoje é só!

Abs e obrigado pessoal.

Material para certificação MTA Database Fundamentals

Fala pessoal, tudo bem?

Estou vendo nas redes sociais uma turma procurando conteúdo sobre essa prova de certificação MTA Database Fundamentals.

Como o tempo está curto e não sei quando poderei ministrar novamente esse treinamento, estou disponibilizando os slides.

Treinamento – MTA Database fundamentals

Vou reorganizar as demos e atualizo o post em breve.

Vamo que vamo pessoal…

Valeu! Abraço! Beijo! Enjoy it!!

 

 

 

 

 

2019 foi excelente, mas 2020 promete!

Todo final de ano a mesma coisa, o balancete!

Metas batidas, pendências, sucessos, fracassos, alegrias, tristezas, comemorações, aprendizados e muito, mas muito agradecimento e amadurecimento.

2019 foi um ano de muito trabalho e vários desafios!

Tive a oportunidade de palestrar algumas vezes, ministrei 3 treinamentos para a certificação MTA – Database fundamentals, 2 workshops de tuning em SQL Server, escrevi apenas 11 posts no meu blog (faltou tempo), mas os acessos e visitantes mais que dobraram, ou seja, tem coisa boa. 🙂

acessos blog

Organizei junto com a equipe e comunidade do SQL BH vários encontros durante o ano e um em especial que teve aproximadamente 300 pessoas, o SQL Saturday BH. Veja como foi clicando aqui .

Com relação a consultoria, ano puxadíssimo, graças a Deus! Mesmo sem comercial, sem vendedor, sem correr atrás de clientes, consegui mais alguns clientes apenas no boca a boca, de cliente pra cliente. Sinal que o serviço está sendo entregue com a qualidade que eu prezo e de acordo com a necessidade de cada cliente. Foram projetos de migração, tuning, alta disponibilidade, implementação de melhores práticas, com SQL no Linux, AWS  e Azure, SQL 2000 😦 , 2008R2, 2014, 2016 e 2017.

Precisando pode me chamar aqui.. 🙂

Pessoalmente, estou muito feliz com minha família ao meu lado, dando forças para enfrentar os desafios do dia a dia e vendo meu filhão crescer forte, saudável e pelas suas atitudes sabendo que confia cada vez mais no papai aqui e na mamãe coruja, afinal, equilíbrio é tudo!

WhatsApp Image 2019-12-24 at 21.12.02

Para 2020, as metas profissionais já estão traçadas, não vou citar todas aqui, mas pretendo compartilhar um pouco mais de conhecimento por aqui, em palestras e workshops, principalmente sobre monitoramento, SQL Server 2019 e SQL no Linux que são meus próximos desafios.

No mais, quero desejar à todos um excelente ano de 2020, com muito estudo, saúde, paz e alegria.

No que precisarem de mim, é só chamar!

Abraços.

Redefinir a senha do SA do SQL Server no Linux

Fala pessoal, bom?

Caso você precise alterar a senha do usuário SA sem ter acesso direto ao SQL Server no rodando Linux, segue um passo a passo.

Para fazer a alteração da senha o serviço do SQL Server precisa estar parado.

Vamos às etapas:

Conecte-se ao servidor que o SQL Server está instalado: (Obs: Você pode usar o sudo antes de cada comando ou executá-los com o root)

systemctl stop mssql-server
systemctl status mssql-server

1

Para redefinir a nova senha digite o comando abaixo.

/opt/mssql/bin/mssql-conf set-sa-password

Uma nova senha será solicitada conforme imagem abaixo:

2

Cuidado ao digitar a senha, pois o caracter “$” é um caracter especial no bash do linux, então você não deve usá-lo ou utilizar um comando de escape.

Depois disso é só subir o serviço do SQL Server

systemctl start mssql-server
systemctl status mssql-server

3

Depois é só testar a conexão:

4

Abraços pessoal!

O que é a replicação no SQL Server

Fala pessoal,  tudo bem?

Hoje vou falar o que é e como funciona a replicação no SQL Server. O conteúdo abaixo é a introdução de um treinamento sobre replicação que ministrei há algum tempo em BH. Vou separar o conteúdo em posts e divulgando sempre que possível.

  • A replicação é um conjunto de tecnologias do SQL Server que permite duplicar e distribuir todos ou parte dos seus dados e objetos em diferentes bancos de dados.
  • O processo de replicação funciona em segundo plano com a ajuda de jobs.
  • Esses jobs também são chamados de agentes.
  • Usam internamente os respectivosarquivos.exe presentes na pasta %SQL\%COM

replicacao

Tipos de replicação

Transacional

Copia dados unidirecionalmente do banco de dados de origem para o banco de dados de destino. Usa os arquivos de log do banco de dados de origem para manter os dados em sincronia com o assinante.

Snapshot

Cria uma cópia idêntica de todos os objetos replicados de Publicações que você deseja replicar toda vez que é executada.

Merge

Permite que dois ou mais bancos de dados sejam mantidos em sincronia. Sempre que as alterações ocorrem em um banco de dados (se configurado para isso), elas são automaticamente aplicadas aos outros bancos de dados. Se as alterações ocorrerem no Publicador, elas serão aplicadas ao Assinante e vice-versa.

Entidades de replicação (Origem)

Publisher (Publicador)

É um banco de dados de origem no qual a replicação é iniciada. Disponibiliza dados para replicação.
Os editores definem o que publicam por meio de uma publicação.

­

Article(Artigo)

Os artigos são os objetos de banco de dados reais incluídos na replicação, como tabelas, views, índices, etc.
Um artigo pode ser filtrado quando enviado ao assinante.

­

Publication (Publicação)

Um grupo de artigos é chamado de publicação.
Um artigo não pode ser distribuído individualmente. Portanto, a publicação é necessária.

­

Distributor (Distribuidor)

É intermediário entre editor e assinante.
Ele recebe transações ou snapshots publicados e, em seguida, armazena e encaminha essas publicações para o assinante.

­

Entidades de replicação (Destino)

Subscriber (Assinante)

É o banco de dados de destino onde a replicação termina.
Pode inscrever-se em várias publicações de vários publicadores.
Ele pode enviar dados de volta ao editor ou publicar dados para outros assinantes.

­

Subscription (Inscrição)

­É uma solicitação de um assinante para receber uma publicação.
Nós temos dois tipos de assinaturas – push e pull.

Push subscription

­Com essa assinatura, o publicador é responsável por atualizar todas as alterações no assinante sem que o assinante faça essas alterações.
As assinaturas push são criadas no servidor Publicador.

Pull Subscription

­Com essa assinatura, o assinante inicia a replicação em vez do editor.
As assinaturas são criadas no servidor Assinante.

Comparação entre os tipos de replicação

tabela replicacao

Por hoje é isso, no próximo explicarei com mais detalhes cada tipo de replicação, a configuração e alguns cuidados que devemos tomar.

Abraços

Scripts úteis – Meu perfil no github

Fala pessoal, tudo bem?

Finalmente estou terminando de organizar uns scripts que costumo usar (alguns de minha autoria, outros não), pode ser que eu não tenha dado os créditos por não saber quem o escreveu e por estar em vários posts, então sinta-se a vontade para me informar que eu faço a atualização ou vc me contribuir e alterar lá. 🙂

Lá onde? No meu perfil do github: 

https://github.com/viniciusfonsecadba

1_dDNpLKu_oTLzStsDTnkJ-g

Hoje é rapidão só pra falar isso mesmo!

Obs: Como tenho trabalhado bastante com mysql, devo disponibilizar scripts desse SGBD tb.. 🙂

Abraços e vamo que vamo

#sqlserver #microsoft #github

 

Script para dar permissão de leitura em todas as bases de dados de usuário

Fala pessoal, beleza?

Hoje segue apenas um script que ajuda bastante os dba’s que têm muitas bases em um servidor e precisam dar permissão somente leitura para um determinado usuário.

Com o script abaixo você criará um login e gerará o script para criação do usuário para esse login em todos os bancos de dados de usuários online e os scripts para adicioná-lo na role db_datareader. Depois de gerado é só executar.

USE [master]
GO
CREATE LOGIN [NOMEDOLOGIN] WITH PASSWORD=N'SENHA', DEFAULT_DATABASE=[banco_default], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
GO

DECLARE @usuario SYSNAME
        , @login SYSNAME;

SELECT @usuario = 'NOMEDOLOGIN',
       @login = 'NOMEDOLOGIN'

SELECT ' USE ' + QUOTENAME(NAME) + '; CREATE USER ' + QUOTENAME(@usuario) + ' FOR LOGIN ' + QUOTENAME(@login) + ' WITH DEFAULT_SCHEMA=[dbo];     EXEC sys.sp_addrolemember  ''db_datareader'',''' + @usuario+ ''';'
FROM   sys.databases
WHERE  database_id > 4
       AND state_desc = 'ONLINE'

Por hoje é só pessoal, tempo tá curto..  😦

Abraços

Como foi o SQL Saturday 844 – Belo Horizonte

Faaala pessoal, tudo bem?

Estava sumido né, mas organizar um SQL Saturday não é muito fácil não!

O SQL Saturday é um evento de tecnologia, gratuito e que acontece no mundo todo!

Esse ano tive a oportunidade de ajudar na organização do SQL Saturday 844, que ocorreu no último sábado (18/05) em Belo Horizonte na PUC do Coração Eucarístico.

Veja que galera bonita!

DCIM100GOPROGOPR2141.JPG

Eu, Sulamita e Maruan nos empenhamos bastante para trazer um dia de muitas novidades, conhecimento, networking, novos negócios e muito mais do que um evento cheio de empresas e especialistas em tecnologia pode proporcionar.

0

Contamos com a ajuda de voluntários muito esforçados e dispostos, que se comprometeram e fizeram um excelente “trabalho” tudo para ajudar no evento e consequentemente a comunidade sem pedir nada em troca. Muito obrigado Paulo Gabriel, Rafael Naves, Rafael Cardoso, Reinilson Jr, Rodrigo Araujo, Matheus Henrique, Anna Galvão, Carolina Romanzini, Jefferson Hyago, Leonardo Côco e alguns outros que nos ajudaram pontualmente e não consegui anotar o nome (me desculpe), mas com certeza agradeci pessoalmente!

Agradeço também a todos os palestrantes e patrocinadores que possibilitaram a realização desse evento.

Este slideshow necessita de JavaScript.

 

Em resumo, foram mais de 800 inscritos, aproximadamente 330 pessoas participaram do evento, 28 palestras, sendo 4 por hora entre 09 e 18:00h contando com alguns intervalos para lanche que proporcionaram muito networking e troca de conhecimento.

Segue o link para download do .ppt das palestras aqui

No final, lançamos a pesquisa de satisfação e o resultado foi super positivo conforme o gráfico abaixo.

avaliação

Mas como sabemos que temos que melhorar bastante ainda, então vamos analisar todas as críticas e sugestões de melhorias para que os próximos eventos sejam ainda melhores!

Enfim, esse post foi para dizer OBRIGADO à todos que contribuíram de alguma forma e que estou voltando às postagens técnicas.

Abraço meu povo!

Property Errorlogfile is not available for JobServer. SQLAGENT

Fala pessoal, bom dia.

O post de hoje é só pra registrar como resolver um problema que ocorreu comigo após um failover no SQL Server 2008 r2.

Ao tentar abrir as propriedades do SQL Agent para alterar a configuração de quantos registros o histórico de jobs suportaria recebemos o erro abaixo:

erro sql agent error log

Cannot show requested dialog.

Property ErrorlogFile is not available for Jobserver ‘Nomedoserver’. This property may not exist for this object, or may not be retrievable due to insufficiente access rights. (Microsoft.Sqlserver.Smo)

O que acontece é que o SQL Agent perdeu a referência ao diretório que está localizado seu arquivo de log. Essa referência deveria estar registrada em uma chave no regedit do servidor. Segue imagem do regedit ainda com o erro.

erro sql agent error log 2

Para validar a chave siga os passos:

Acesse o register do servidor utilizando o comando regedit.

Navegue por:

HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft  > Microsoft SQL Server > MSSQL____.SUAINSTANCIA > SQLServerAgent

E procure pela chave ErrorLogFile.

Para encontrar o diretório onde o SQL Server armazena os arquivos de log execute o comando abaixo:

USE master
GO
xp_readerrorlog 0, 1, N'Logging SQL Server messages in file', NULL, NULL, N'asc' 
GO

Com o caminho dos logs retornados nesse script, concatene com o “\SQLAGENT.OUT” que é o nome do arquivo de log de erro do SQL Agent e altere a chave citada acima.

A chave no seu regedit deve ficar da seguinte forma.

erro sql agent error log 3

Por hoje é isso pessoal.

Abs.

Eu preciso monitorar os ativos de TI da minha empresa?

E aí pessoal, tudo na paz?

Esse é um artigo que escrevi no meu Linkedin e estou transferindo para cá!

Nesse artigo gostaria de destacar a importância do monitoramento do seu ambiente de TI e principalmente bancos de dados, tecnologia que sou fascinado! 🙂

Trabalho há mais de 10 anos com TI e em alguns dos lugares onde trabalhei ou tive a oportunidade de prestar serviços de consultoria, percebi a ausência de uma rotina de monitoramento e de uma pessoa, seja de Infra ou DBA, com know how para implementar uma estratégia e ferramenta de monitoramento.

O monitoramento é vital para a saúde do ambiente de TI e para o sucesso da organização. Ele deve ser desenvolvido pela sua equipe de TI ou uma empresa especializada em conjunto com sua equipe de negócio, e deve estar alinhado a estratégia organizacional.

Alguns benefícios do monitoramento:

  • Compreender seu ambiente e identificar gargalos onde deve-se atuar com mais intensidade
  • Fazer projeções para o futuro
  • Justificar investimentos de TI ou outras áreas com base em dados e fatos

Costumo dizer que monitorar ativos de TI abrange, mas não se limita a:

  1. Identificar o que precisa ser monitorado (TI e negócio).
  2. Coletar, armazenar os dados e usá-los em ferramentas para gerar alertas (se necessário).
  3. Interpretar dados, gerar informações e criar uma linha de base (baseline).
  4. Com posse das informações, avaliar a evolução e melhorias, fazer projeções de crescimento e traçar metas para o futuro agindo preventivamente evitando incidentes

Você: “Ta bom, muito bacana isso tudo! Mas por onde começar?!

Vamos lá, primeiro você precisa entender que seu ambiente muda o tempo todo, está em constante crescimento e precisa de passar por uma análise, para depois ser controlado e monitorado.

Pensando nisso, devemos identificar os principais ativos para o funcionamento da organização (olha o servidor de banco de dados aí!) e começar a estratégia por eles. Mas esses ativos precisam apenas estar ligados e disponíveis ou temos um requisito mínimo de desempenho para que a equipe de negócio faça bem e no tempo desejado o seu trabalho, sem depois “jogar a culpa” que o sistema estava lento?

Considerando essa situação, devemos traçar os limites (threshold, termo muito usado em TI) aceitáveis para o bom funcionamento do sistema. Depois disso, precisamos escolher como vamos monitorar para definir qual a ferramenta nos atende?

Decidimos não reinventar a roda, então vamos utilizar uma ferramenta específica para tal tarefa. Ainda mais que no mercado hoje existem várias ferramentas de monitoramento de ativos de TI e também outras especificamente para bancos de dados.

Tratando a TI (Servidores, switches, impressores, bancos de dados, etc…) como um todo hoje utilizo o Zabbix para fazer coleta e análise de dados, integrado com Telegram, Slack e e-mail para gerar o alerta caso ultrapasse algum limite, um dashboard desenvolvido no Grafana para a camada de apresentação das informações e o software IBM Maximo para abertura de tickets/incidentes classificando e direcionando para a equipe responsável pelo ativo.

O Zabbix é uma excelente ferramenta, open source, que integra com vários serviços de mensagens e aplicações de controle de chamados, mas sua implementação pode ser um tanto complexa pois exige uma certa experiência em sistemas operacionais, shell script, powershell, redes, contadores de desempenho, linguagem de programação, entre outras habilidades.

Abaixo segue uma visualização de um dos dashboards (dados de um ambiente de teste) que desenvolvi e utilizo para monitorar servidores com SQL Server aqui na Maxinst.

0

Nesse painel, monitoro se os serviços do SQL Server, espaço em disco, estatísticas e waits de banco de dados, jobs executando há mais de uma hora e jobs que falharam, locks entre outros contadores.

Para cada informação coletada configurei um threshold classificado por severidade e dependendo da configuração e do dado coletado recebo um tipo de alerta diferente, segue por exemplo, uma mensagem recebida através do slack.

Enfim, com o Zabbix é possível monitorar diversos itens, desde a temperatura do seu CPD, servidores e outros equipamentos de TI, até a quantidade de impressões feitas na sua sala.

Esse artigo é apenas uma introdução sobre o assunto, um estímulo para você bater um papo sobre monitoramento na sua organização e te dizer que estou à disposição também para qualquer dúvida, ajuda ou apresentação.

Um abraço.

Vinícius Fonseca