quarta-feira, 29 de junho de 2016

Vídeo #08 - Recovery Bulk-logged e restore point-in-time (DEMO 02)

Confome prometido no último post, publiquei o vídeo com a segunda demonstração sobre recovery model bulk-logged, operações minimamente logadas e restore do banco point-in-time.

Sugiro assistir os vídeos na sequência, então caso você ainda não tenha visto o primeiro, veja post anterior: http://luticm.blogspot.com.br/2016/06/video-07-recovery-bulk-logged-e-restore.html

Neste vídeo é feito uma operação de bulk insert minimamente logada, que faz com que o bulk changed map (BCM) seja alterado, que pode ser visto com entradas "ML_MAP" no transaction log.



Abraços

Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br

terça-feira, 28 de junho de 2016

Vídeo #07 - Recovery Bulk-logged e restore point-in-time

Na sequência dos vídeos do Luti, dessa vez venho com uma gravação de material técnico, que publicarei em dois vídeos no meu canal do YouTube. Optei por manter a numeração e vou organizar as tags para identificar o material publicado.

Ambos os vídeos são referentes ao comportamento do SQL Server quando temos bancos de dados com recovery model bulk-logged, operações minimamente logadas (ou não) e restore do banco point-in-time.

Resolvi quebrar em dois vídeos para manter os vídeos menores, assim você poderá encaixar até 15 minutos de conteúdo na sua agenda. O segundo vídeo ainda está em edição e será publicado em breve.

O primeiro vídeo é Recovery Bulk-logged e restore point-in-time (DEMO 01).


Essa pergunta, a discussão em torno da resposta e detalhes do funcionamento do SQL Server, é o tipo de questão que gosto de ouvir nos treinamentos de Administração (http://www.srnimbus.com.br/calendario/sql22_spjulho2016/) e Mastering (http://www.srnimbus.com.br/calendario/sql23_spjul2016/). Se ainda não participou de nenhum deles, aproveite!

Abraços

Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br

sexta-feira, 24 de junho de 2016

FUN! Deadlock art generator

Contexto: Estou ministrando um treinamento in-company e preparando uma série de novas demonstrações para este cliente. Após escrever uma procedure que era para ser problemática, esbarrei em deadlocks mais interessantes do que eu havia planejado….

Gostei da brincadeira e resolvei compartilhar com vocês um deadlock art generator!

Algumas imagens da saída estão abaixo. Também coloquei no OneDrive um trace com alguns deadlocks que eu coletei.





A primeira ver que ouvi falar sobre deadlock art foi em um post do Catae (https://blogs.msdn.microsoft.com/fcatae/2010/03/18/deadlock-art/) que sempre cito no módulo de locking nos meus treinamentos.

Para reproduzir em seu ambiente, você vai fazer o seguinte.

    1. Crie a procedure proc_Divertida no AdventureWorks2014
    2. Utilizando o SQLQueryStress, mande 20/30 threads com 3/4 execuções “EXEC proc_Divertida;”
        a. O número de threads/repetições você muda de acordo com seu interesse na arte. kkkk
    3. Monitore o deadlock graph no profiler

HAVE FUN!

Abraços,


USE AdventureWorks2014
GO
IF OBJECT_ID('dbo.proc_Divertida') IS NOT NULL
     DROP PROCEDURE dbo.proc_Divertida
go
CREATE PROCEDURE dbo.proc_Divertida
AS 

     DECLARE @OrderID INT = (CAST((RAND() * 100000) AS INT) % 30000) + 43659;
     PRINT @OrderID

     BEGIN TRANSACTION

           UPDATE Sales.SalesOrderDetail
                SET UnitPrice = UnitPrice
           WHERE SalesOrderID = @OrderID

           ; WITH C AS (
                SELECT (Quantity * ActualCost) AS LineTotal, PRODUCTID, TransactionDate
                FROM Production.TransactionHistory
                UNION
                SELECT (Quantity * ActualCost), PRODUCTID, TransactionDate
                FROM Production.TransactionHistoryArchive
                UNION
                SELECT (UnitPrice * OrderQty), SOD.ProductID, SOH.OrderDate 
                FROM Sales.SalesOrderDetail AS SOD
                INNER JOIN Sales.SalesOrderHeader AS SOH
                ON SOH.SalesOrderID = SOD.SalesOrderID
           )
           SELECT 
                C.ProductID,
                YEAR(TransactionDate),
                SUM(LineTotal)  
           FROM C
           GROUP BY GROUPING SETS (ProductID, YEAR(TransactionDate), (ProductID, YEAR(TransactionDate)), ())

     COMMIT TRANSACTION
GO

Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br

quarta-feira, 22 de junho de 2016

[SQLServerDF] Encontro XXXIII - SQL Server CPU Foundations

Na próxima semana temos mais uma apresentação do SQLServerDF, começando 18:30h.

NÃO é necessário confirmar participação através do SQLServerDF. De qualquer forma, incentivo a participação na nossa lista de discussão, então para aqueles que não estão no grupo, basta ir até http://groups.google.com/group/sqlserverdf, fazer sua inscrição e aguardar minha moderação.

Data e horário: 29/06/2016, das 18:30h às 20:30h
Local: Xperts Trainning Center
Palestrante: Rodrigo Ribeiro Gomes

Título: SQL Server CPU Foundations

Descrição: Você sabe dizer o percentual de consumo de CPU que uma query ou procedure está consumindo? O que significa usar 100% de CPU? Esta apresentação irá apresentar conceitos básicos sobre o uso de CPU no Windows e como isso impacta na análise de queries de uma instância. Alguns trechos da apresentação podem ser conferidas no vídeo disponível em https://www.youtube.com/watch?v=mXF7NcJqX8M.

Mini-cv do palestrante: Há mais de 6 anos atuando com SQL Server, já implantou várias soluções de monitoramento, segurança e alta disponibilidade, além de atuar em diversos casos complexos que envolvem desde recuperar registros deletados sem qualquer backup até explorar e modificar estruturas internas do produto e do Windows para se recuperar de problemas ou otimizar o ambiente. Nas horas vagas, dedica-se um pouco a família e amigos, estuda alguma maluquice (ex.: como funciona o chuveiro elétrico) ou escreve em seu blog em www.thesqltimes.com.

Abraços

Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br

terça-feira, 21 de junho de 2016

Treinamentos com Luti em Julho/2016

Pessoal, temos anúncio de treinamentos da Nimbus para o mês de Julho, comigo como instrutor:

    • SQL23 Brasília (em definição)
          O SQL23 não vai acontecer em Brasília, aos interessados, vejam possibilidade de participar do SQL23 em São Paulo.
    • SQL22 São Paulo (http://www.srnimbus.com.br/calendario/sql22_spjulho2016/) - CONFIRMADO
    • SQL23 São Paulo (http://www.srnimbus.com.br/calendario/sql23_spjul2016/)
        Infelizmente o curso foi anunciado muito em cima da hora e não atingimos quórum mínimo.

Por conta de novos projetos que eu estou envolvido, eu NÃO tenho previsão de ministrar mais treinamentos em 2016 ou 2017, sendo que este intervalo pode se estender.

Então se você já tem vontade de fazer um treinamento comigo, porém vem adiando seus planos, meu conselho é que não deixe passar essa oportunidade…

Importante: os preços promocionais de R$ 1.500,00 serão mantidos!

E antes que perguntem, eu vou incluir algumas coisinhas do SQL Server 2016.

Abraços

Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br