Arquivo

Archive for the ‘Performance e Tuning’ Category

Highway to Hell – Azure SQL Datawarehouse – O que é uma distribution?

E ai galera, tudo bem com vocês?

No vídeo de hoje quero discutir com vocês o que é uma distribution, quais os modelos disponíveis no SQLDW e qual a vantagem e desvantagens de cada uma delas.

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Anúncios

#NATALNERD – NerdZão #75 – SQL Maniacs

Fala galera, tudo bem?

Sei que está um pouco em cima da hora, mas  quero convidá-los para participar do meetup que o SQLManiacs realizará com a galera do NERDZÃO, no dia 21/11 a partir das 19hs, na unidade da FIAP que fica na Av. Lins de Vasconcelos, 1264.

Para participar é só acessar o link https://www.meetup.com/Nerdzao/events/255089597/ e fazer sua inscrição.

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Treinamento – Mastering Your SQL Server Environment

E ai pessoal, tudo bem?

Já estão abertas as inscrições para o treinamento MASTERING YOUR SQL SERVER ENVIRONMENT que ministro pela Vita Database Solutions!!!!

Montei esse treinamento com o intuito de formar um profissinal diferenciado, que consiga analisar e discutir detalhadamente como funcionam todos os componentes existentes no SQL Server e como garantir que os recursos de hardware (CPU, Memória e Disco) sejam utilizados da melhor maneira possível.

Com os tópicos discutidos neste treinamento você estará 100% apto a planejar e implementar uma solução de banco de dados utilizando o SQL Server além de também poder executar tarefas mais complexas, tais como resolução de problemas (troubleshooting) e otimização de desempenho em um ambiente OnPremisse.

Também preciso adiantar que TODO o material foi revisado e atualizado para refletir as novidades do SQL Server 2017 e também do SQL Server 2019, então venha preparado para uma discussão de SQL Server Internals no mais alto nível!!!!!

Se quiser saber mais detalhes sobre o treinamento é só acessar https://www.vitadbsolutions.com/mastring-your-sql-server-environmen

Não deixe de aproveitar o descontaço de final de ano e mande logo um email para contato@vitadbsolutions.com para reservar a sua vaga.

Espero todos vocês no treinamento e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço

Dicas para um DBA iniciante – Listar fragmentação de índices de todos os bancos de dados

Fala pessoal, tudo bem com vocês?

Hoje quero compartilhar mais um script muito útil que precisei utilizar recentemente no meu dia a dia como DBA SQL Server.

Esse script utiliza a stored procedure de sistema SP_MSFOREACHDB para executar uma verificação na fragmentação de todos os índices de cada uma das bases de dados existentes em sua instância de banco de dados SQL Server.

IF EXISTS (SELECT * FROM TEMPDB.SYS.ALL_OBJECTS WHERE 
			NAME LIKE '#bbc%' )
	DROP TABLE #bbc

CREATE TABLE #bbc
(
	DatabaseName VARCHAR(100),
	ObjectName VARCHAR(100),
	Index_id INT, 
	indexName VARCHAR(100),
	avg_fragmentation_percent FLOAT,
	IndexType VARCHAR(100),
	Action_Required VARCHAR(100) DEFAULT 'NA'
)
GO

INSERT INTO #bbc (
					DatabaseName,
					ObjectName,
					Index_id, 
					indexName,
					avg_fragmentation_percent,
					IndexType
				 )

EXEC MASTER.SYS.SP_MSFOREACHDB ' USE [?]

SELECT 
	db_name() as DatabaseName, 
	OBJECT_NAME (a.object_id) as ObjectName, 
	a.index_id, 
	b.name as IndexName, 
	avg_fragmentation_in_percent, 
	index_type_desc
FROM 
	sys.dm_db_index_physical_stats (db_id(), NULL, NULL, NULL, NULL) AS a
INNER JOIN 
	sys.indexes AS b 
ON 
	a.object_id = b.object_id 
AND 
	a.index_id = b.index_id
WHERE 
	b.index_id  0 
AND 
	avg_fragmentation_in_percent  0'
GO
 
UPDATE #bbc
SET Action_Required ='Rebuild'
WHERE avg_fragmentation_percent >30 
GO

UPDATE #bbc
SET Action_Required ='Reorganize'
WHERE avg_fragmentation_percent 5
GO

SELECT 
	* 
FROM 
	#bbc 
ORDER BY 
	#bbc.avg_fragmentation_percent 
DESC

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Dicas para um DBA Iniciante – Listando os principais Wait Types da instância

Fala pessoas!!!!!

A dica de hoje é para ajudá-los a encontrar os principais wait types existentes em seu ambiente de banco de dados.

Esta consultar foi escrita pelo time do SQLSkills e é bem completa, pois já retorna também o link para a documentação escrita pelo Paul Randal e que explica minuciosamente cada um dos wait types encontrados e como resolvê-los.

WITH [Waits] 
     AS (SELECT [wait_type], 
                [wait_time_ms] / 1000.0                             AS [WaitS], 
                ( [wait_time_ms] - [signal_wait_time_ms] ) / 1000.0 AS 
                [ResourceS], 
                [signal_wait_time_ms] / 1000.0                      AS [SignalS] 
                , 
                [waiting_tasks_count] 
                AS [WaitCount], 
                100.0 * [wait_time_ms] / Sum ([wait_time_ms]) 
                                           OVER()                   AS 
                [Percentage], 
                Row_number() 
                  OVER( 
                    ORDER BY [wait_time_ms] DESC)                   AS [RowNum] 
         FROM   sys.dm_os_wait_stats 
         WHERE  [wait_type] NOT IN ( 
        N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR', 
        N'BROKER_TASK_STOP', 
                           N'BROKER_TO_FLUSH', 
                     N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE', 
        N'CHKPT', 
                             N'CLR_AUTO_EVENT', 
                     N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE', 
                     -- Maybe uncomment these four if you have mirroring issues 
                     N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE', 
                     N'DBMIRROR_WORKER_QUEUE', N'DBMIRRORING_CMD', 
                             N'DIRTY_PAGE_POLL', 
        N'DISPATCHER_QUEUE_SEMAPHORE', 
                     N'EXECSYNC', N'FSAGENT', 
        N'FT_IFTS_SCHEDULER_IDLE_WAIT', 
                             N'FT_IFTSHC_MUTEX', 
                     -- Maybe uncomment these six if you have AG issues 
                     N'HADR_CLUSAPI_CALL', 
        N'HADR_FILESTREAM_IOMGR_IOCOMPLETION' 
                             , 
        N'HADR_LOGCAPTURE_WAIT', 
        N'HADR_NOTIFICATION_DEQUEUE', 
                     N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE', 
        N'KSOURCE_WAKEUP', 
                             N'LAZYWRITER_SLEEP' 
                                                , 
                     N'LOGMGR_QUEUE', N'MEMORY_ALLOCATION_EXT', 
                             N'ONDEMAND_TASK_QUEUE', 
        N'PREEMPTIVE_XE_GETTARGETSTATE', 
                     N'PWAIT_ALL_COMPONENTS_INITIALIZED', 
                             N'PWAIT_DIRECTLOGCONSUMER_GETNEXT', 
        N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP' 
        , 
                                                N'QDS_ASYNC_QUEUE', 
                     N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP', 
        N'QDS_SHUTDOWN_QUEUE', 
        N'REDO_THREAD_PENDING_WORK', 
        N'REQUEST_FOR_DEADLOCK_SEARCH', 
                     N'RESOURCE_QUEUE', N'SERVER_IDLE_CHECK', 
        N'SLEEP_BPOOL_FLUSH', 
                                                N'SLEEP_DBSTARTUP', 
                     N'SLEEP_DCOMSTARTUP', N'SLEEP_MASTERDBREADY', 
        N'SLEEP_MASTERMDREADY', 
                                                N'SLEEP_MASTERUPGRADED', 
                     N'SLEEP_MSDBSTARTUP', N'SLEEP_SYSTEMTASK', 
        N'SLEEP_TASK', 
                                                N'SLEEP_TEMPDBSTARTUP', 
                     N'SNI_HTTP_ACCEPT', N'SP_SERVER_DIAGNOSTICS_SLEEP', 
        N'SQLTRACE_BUFFER_FLUSH', 
        N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP', 
                     N'SQLTRACE_WAIT_ENTRIES', N'WAIT_FOR_RESULTS', 
        N'WAITFOR', 
                                                N'WAITFOR_TASKSHUTDOWN', 
                     N'WAIT_XTP_RECOVERY', N'WAIT_XTP_HOST_WAIT', 
        N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG', 
                                                N'WAIT_XTP_CKPT_CLOSE', 
                     N'XE_DISPATCHER_JOIN', N'XE_DISPATCHER_WAIT', 
        N'XE_TIMER_EVENT' ) 
                AND [waiting_tasks_count] > 0) 
SELECT Max ([W1].[wait_type]) 
       AS 
       [WaitType], 
       Cast (Max ([W1].[waits]) AS DECIMAL (16, 2)) 
       AS [Wait_S], 
       Cast (Max ([W1].[resources]) AS DECIMAL (16, 2)) 
       AS [Resource_S], 
       Cast (Max ([W1].[signals]) AS DECIMAL (16, 2)) 
       AS [Signal_S], 
       Max ([W1].[waitcount]) 
       AS [WaitCount], 
       Cast (Max ([W1].[percentage]) AS DECIMAL (5, 2)) 
       AS [Percentage], 
       Cast (( Max ([W1].[waits]) / Max ([W1].[waitcount]) ) AS DECIMAL (16, 4)) 
       AS 
       [AvgWait_S], 
       Cast (( Max ([W1].[resources]) / Max ([W1].[waitcount]) ) AS 
             DECIMAL (16, 4)) AS 
       [AvgRes_S], 
       Cast (( Max ([W1].[signals]) / Max ([W1].[waitcount]) ) AS 
             DECIMAL (16, 4))   AS 
       [AvgSig_S], 
       Cast ('https://www.sqlskills.com/help/waits/' 
             + Max ([W1].[wait_type]) AS XML) 
       AS [Help/Info URL] 
FROM   [Waits] AS [W1] 
       INNER JOIN [Waits] AS [W2] 
               ON [W2].[rownum] <= [W1].[rownum] 
GROUP  BY [W1].[rownum] 
HAVING Sum ([W2].[percentage]) - Max([W1].[percentage]) < 95; -- percentage threshold 

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Dicas para um DBA Iniciante – Listar deadlocks utilizando a system_health

Fala galera, tudo bem com vocês?

Muita gente tem pedido para compartilhar os principais scripts que utilizo para gerenciar um ambiente de banco de dados SQL Server e por isso montei uma lista com os que são mais úteis.

O script de hoje é referente a monitoração de Deadlocks (que encontrei no site do Pinal Dave) e é extremamente útil porque utiliza a sessão de sistema system_health, dos extended events.

 
SELECT XEvent.query('(event/data/value/deadlock)[1]') AS DeadlockGraph
FROM (
    SELECT XEvent.query('.') AS XEvent
    FROM (
        SELECT CAST(target_data AS XML) AS TargetData
        FROM sys.dm_xe_session_targets st
        INNER JOIN sys.dm_xe_sessions s ON s.address = st.event_session_address
        WHERE s.NAME = 'system_health'
            AND st.target_name = 'ring_buffer'
        ) AS Data
CROSS APPLY TargetData.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(XEvent)
) AS source;

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.

Highway to Hell – Azure SQL Datawarehouse – E o que é esse tal de MPP?

Galera, tudo bem?

No vídeo de hoje quero discutir com vocês um pouco mais sobre a arquitetura MPP existente no SQL Datawarehouse e que faz com que esse serviço seja tão poderoso no processamento de grandes volumes de dados.

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube, no grupo de discussão SQLManiacs  e em nosso grupo no TELEGRAM.

Grande abraço a todos.