#23 – Para que serve


Olá, bom dia, tudo bem? E ai preparado para festividades de final de Ano?

Seja bem-vindo a mais um post da sessão Para que Serve, sendo este o de número 23, mais um dia de muito começando, repleto de atividades e compromissos, ainda mais hoje sexta – feira e muito próximo ao Natal.

Mesmo no ritmo de fim de ano, tenho mantido a minha rotina, acordar bem cedo, para poder aproveitar da melhor maneira possível meu precioso tempo livre, colocando em prática algo que adoro fazer, publicar um post novo em meu blog mantendo a tradição de querer renovar e compartilhar as experiências e aprendizados adquiridos em minhas atividades profissionais e acadêmicas.

No post de hoje, vou compartilhar com você que esta acessando meu blog, uma nova opção adicionada diretamente aos bancos de dados que criamos a partir do Microsoft SQL Server 2016 que nos permite que seja utilizada de forma exclusiva no nível de banco de dados ao invés de aplicar diretamente no nível de instância.

Talvez você já possa ter utilizada esta nova opção, mas tenho a certeza que muitos dos profissionais que ainda não migraram seus ambientes para versões mais novas talvez não a conheçam, estou me referindo a opção AUTOGROW_ALL_FILES, que basicamente define no nível de banco de dados (Database Level) ao contrário do que acontecia nas versões anteriores que tínhamos a necessidade de ativar a Trace Flag T1117 que aplicava esta alteração de comportamento padrão no nível de instância (Server Level).

No decorrer deste post será realizado um pequeno comparativo entre as opções AUTOGROW_ALL_FILES e AUTOGROW_SINGLE_FILE, analisando seus comportamentos padrões, tendo como base um simples bloco de código inserindo 500.000 (Quinhentas mil linhas de registros lógicos) com dados fixos.

Adianto que esta análise comparativa em nenhum momento leva em consideração características de Hardware, versão de Sistema Operacional ou uso de uma aplicação específica. Na verdade o objetivo desta simples análise é elucidar que o uso destas  opções podem influenciar na maneira que o Microsoft SQL Server utiliza um ou mais arquivos de dados de forma proporcional ou simultânea.

Sendo assim, chegou a hora de conhecer um pouco mais sobre o post de número 23 da sessão Para que serve. Mas uma vez, bem vindo ao #23 – Para que serve – Opções de Bancos de Dados – AUTOGROW_ALL_FILES versus AUTOGROW_SINGLE_FILE.

Espero que você esta animado para conhecer um pouco mais sobre esta propriedade, caso já conheça, continue lendo este post, sempre podemos aprender algo novo….


Introdução

Todo o banco de dados SQL Server tem, no mínimo, dois arquivos de sistema operacional: um arquivo de dados e um arquivo de log. Os arquivos de dados contêm dados e objetos como tabelas, índices, procedimentos armazenados e exibições.

Os arquivos de log contêm as informações necessárias para recuperar todas as transações no banco de dados, ao contrário dos arquivos de dados que podem ser agrupados em grupos de arquivos para propósitos de alocação e administração.

Os bancos de dados SQL Server possuem três tipos de arquivos, como mostrado na Tabela 1 a seguir:

Arquivo  Descrição 
Primário O arquivo de dados primário contém as informações de inicialização do banco de dados e aponta para os outros arquivos no banco de dados.
Dados do usuário e objetos podem ser armazenados neste arquivo ou em arquivos de dados secundários. Todo banco de dados possui um arquivo de dados primário. A extensão de nome de arquivo indicada para arquivos de dados primários é .mdf.
Secundário Os arquivos de dados secundários são opcionais, definidos pelo usuário, e armazenam dados do usuário.
Arquivos secundários podem ser usados para distribuir os dados entre os diversos discos, colocando cada arquivo em uma unidade de disco diferente. Além disso, caso um banco de dados exceda o tamanho máximo em um único arquivo Windows, será possível usar arquivos de dados secundários, assim, o banco de dados continuará a crescer.
A extensão de nome de arquivo indicada para arquivos de dados secundários é .ndf.
Log de transações Os arquivos de log de transações armazenam as informações de log usadas para recuperar o banco de dados. Deve haver, no mínimo, um arquivo de log para cada banco de dados.
A extensão de nome de arquivo indicada para arquivos de transação é .ldf.

Tabela 1 – Tipos de Arquivos que formam um banco de dados criado no Microsoft SQL Server.

Agora que já conhecemos os tipos de arquivos que podem compor um banco de dados, vamos conhecer um pouco sobre um outro importante recurso que esta diretamente relacionado a este post, os denominados Filegroups.

Filegroups

Quando objetos são criados no banco de dados sem especificar a qual grupo de arquivos eles pertencem, os objetos são atribuídos ao grupo de arquivos padrão. A qualquer hora, um grupo de arquivos é designado como o grupo de arquivos padrão.

Os arquivos no grupo de arquivos padrão devem ser grandes o suficientes para armazenar qualquer objeto novo alocado a outros grupos de arquivo.

O grupo de arquivos PRIMÁRIO é o grupo de arquivos padrão, a menos que seja alterado usando a instrução ALTER DATABASE. A alocação para os objetos de sistema e de tabelas permanece no grupo de arquivos PRIMÁRIO, e não no novo grupo de arquivos padrão. O SQL Server mapeia um banco de dados de um conjunto de arquivos do sistema operacional.

As informações de log e dados nunca ficam misturadas no mesmo arquivo, e os arquivos individuais são usados apenas por um banco de dados, os grupos de arquivos são conhecidos como coleções de arquivos e são usados para simplificar o posicionamento de dados e em tarefas administrativas, como operações de backup e restauração.

Crescimento de Arquivos de Dados

Ao criar um banco de dados, estamos estabelecendo o uso de uma ou mais áreas em disco rígido para alocar nossos arquivos de dados. Dentre as diversas opções e propriedades que podemos configurar no momento da criação de um novo banco de dados ou em sua alteração, nos deparamos com a propriedade FileGrowth, sendo esta responsável em estabelecer a forma ou método de crescimento que toda estrutura de arquivos de dados que formam nossos bancos deverá aplicar, escolhendo a método de rodízio (Round-Robin) na qual os arquivos vão sendo preenchidos de forma aleatória de acordo com a necessidade ou através do método Preenchimento Proporcional (Proportional Fill).

Chegou a hora de colocar a mão nos teclados, como de costume teremos um ambiente de testes a ser criado, o que será utilizado como cenário de estudos.

Criando o Ambiente

Em meu ambiente de estudos estou utilizando o Microsoft SQL Server 2017 Enterprise Edition – Cumulative Update 9 e Sistema Operacional Windows 10, fique a vontade para utilizar o melhor cenário possível dentro das suas necessidades, a partir da versão 2016 do Microsoft SQL Server.

Para realizar nossa simples prática, começaremos pela execução do Bloco de Código 1, responsável por criar a seguinte estrutura:

  • Databases: TesteDatabaseAUTOGROWSINGLEFILE; e TesteDatabaseAUTOGROWALLFILES;
  • Tables: TabelaGrowSingleFile; e TabelaGrowAllFile.

Importante: Destaco que os caminhos informados para criação dos referidos bancos e seus arquivos, estão apresentados de acordo com a configuração do meu ambiente, fique a vontade para alterar de acordo com suas necessidades e configurações.

— Bloco de Código 1 —
— Criando os respectivos bancos de dados  —

— Criando o Banco de Dados TesteDatabaseAUTOGROWSINGLEFILE —
Create Database TesteDatabaseAUTOGROWSINGLEFILE
On Primary
(Name= ‘TesteDatabaseAUTOGROWSINGLEFILE_Data’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWSINGLEFILE_Data.mdf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB),
(Name= ‘TesteDatabaseAUTOGROWSINGLEFILE_Data1’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWSINGLEFILE_Data1.ndf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB),
(Name= ‘TesteDatabaseAUTOGROWSINGLEFILE_Data2’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWSINGLEFILE_Data2.ndf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB)
Log On
(Name= ‘TesteDatabaseAUTOGROWSINGLEFILE_Log’,
FileName= ‘S:\MSSQL-2017\Log\TesteDatabaseAUTOGROWSINGLEFILE_Log.Ldf’,
Size=20 MB,
MaxSize=8192 MB,
FileGrowth=200 MB)
Go

— Criando o Banco de Dados TesteDatabaseAUTOGROWALLFILES —
Create Database TesteDatabaseAUTOGROWALLFILES
On Primary
(Name= ‘TesteDatabaseAUTOGROWALLFILES_Data’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWALLFILES_Data.mdf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB),
(Name= ‘TesteDatabaseAUTOGROWALLFILES_Data1’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWALLFILES_Data1.ndf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB),
(Name= ‘TesteDatabaseAUTOGROWALLFILES_Data2’,
FileName= ‘S:\MSSQL-2017\Data\TesteDatabaseAUTOGROWALLFILES_Data2.ndf’,
Size=10 MB,
MaxSize=4096 MB,
FileGrowth=100 MB)
Log On
(Name= ‘TesteDatabaseAUTOGROWALLFILES_Log’,
FileName= ‘S:\MSSQL-2017\Log\TesteDatabaseAUTOGROWALLFILE_Log.Ldf’,
Size=20 MB,
MaxSize=8192 MB,
FileGrowth=200 MB)
Go

Nota: Vale ressaltar que ambos os bancos de dados estão estruturados com a mesma quantidade de arquivos de dados e log, respectivamente 3(três) arquivos de dados e somente um único arquivo de log.

Muito bem, neste momento nossos bancos de dados estão criados e ambos contendo a mesma configuração para as propriedades: Size, MaxSize e FileGrowth, como também, configurados para que o crescimento ocorra de forma aleatória para os arquivos de dados.

Vamos validar nossa estrutura através do Bloco de Código 2 apresentado abaixo, o qual vai nos permitir identificar justamente as configurações que aplicamos no momento da criação dos referidos bancos de dados:

— Bloco de Código 2 —
Select DB_NAME() AS [DatabaseName], Name, file_id, physical_name,
(size * 8.0/1024) as Size,
((size * 8.0/1024) – (FILEPROPERTY(name, ‘SpaceUsed’) * 8.0/1024)) As FreeSpace
From sys.database_files
Go

Após executar o Bloco de Código 2, o Management Studio deverá apresentar o resultado similar a ilustrado na Figura 1 para ambos os bancos de dados:
Figura 1 – Informações sobre os bancos de dados seus arquivos, tamanhos e espaço livre ocupado.

Nosso próximo passo será forçar o crescimento dos nossos arquivos para o Banco de Dados TesteDatabaseAUTOGROWSINGLEFILE, observando o comportamento que o SQL Server vai utilizar, ressalto que estaremos fazendo a criação da tabela que utilizaremos como base para inserir os dados, para tal cenário vamos utilizar o Bloco de Código 3 apresentado a seguir:

— Bloco de Código 3 —
Use TesteDatabaseAUTOGROWSINGLEFILE
Go

— Criando a Tabela TabelaGrowSingleFile —
Create Table TabelaGrowSingleFile
(Codigo Int Identity(1,1) Not Null Primary Key,
Texto VarChar(100) Default ‘Grow Single File’,
Quantidade SmallInt Default 2018,
ValoresNumericos Numeric(8,2) Default ‘2018.12’,
DataAtual Date Default GetDate()+Rand()*30)
Go

— Inserindo a massa de dados —
Insert Into TabelaGrowSingleFile Default Values
Go 500000

A partir do momento que o Bloco de Código 3 é executado, o Microsoft SQL Server em conjunto com o SQL OS, Database Engine e Storage Engine, começam a fazer uso dos arquivos de dados, distribuindo em tempo real as páginas de dados conforme o método ou técnica escolhida para preenchimento dos arquivos de dados.

Para confirmarmos a alocação e distribuição destas páginas, vamos executar o Bloco de Código 4 apresentado abaixo em uma Nova Query e observar o resultado apresentado:

— Bloco de Código 4 —
Use TesteDatabaseAUTOGROWSINGLEFILE
Go

DBCC ShowFileStats — Comando que vai apresentar a distribuição de páginas de dados entre os arquivos
Go

Observação: Execute o comando DBCC ShowFileStats durante a execução do Bloco de Código 3, para que você possa obter um resultado similar ao apresentado na Figura 2 abaixo:

Figura 2 – Resultado apresentado pelo comando DBCC ShowFileStats.

No decorrer do processamento do Bloco de Código 3, podemos novamente o Bloco de Código 2 para identificar que neste momento o Microsoft SQL Server esta fazendo uso método de preenchimento dos arquivos de dados Round-Robin, no qual ele identifica qual seria o melhor arquivo para alocar a página, para confirmar este cenário a Figura 3 ilustra o resultado obtido de mais uma execução do Bloco de Código 2:
Figura 3 – Alocação dos arquivos de dados.

Observe a mudança de valores nas colunas Size e FreeSpace, como também, suas diferenças de valores em relação ao File_ID=1 para com os File_ID = 2 e 3, são justamente estas diferenças que nos orientam a entender que o Round-Robin esta sendo utilizado.

Estamos indo bem, falta um pouco para chegarmos ao final….

Nosso próximo passo se destina a alterar a forma de preenchimento e utilização dos arquivos de dados definidos para o Banco de Dados TesteDatabaseAUTOGROWALLFILES, e em seguida forçar o uso de cada arquivos e a distribuição de páginas. Vamos então executar o Bloco de Código 5 e sua sequência de passos:

 — Bloco de Código 5 —
— Alterando a definição de crescimento dos arquivos de Dados para o FileGroup Primary —
Use Master
Go

Alter Database TesteDatabaseAUTOGROWALLFILES
Modify FileGroup [Primary] AUTOGROW_ALL_FILES — Definindo o crescimento proporcional   para todos os arquivos de dados —
Go

— Acessando o Banco de Dados —
Use TesteDatabaseAUTOGROWALLFILES
Go

— Criando a Tabela TabelaGrowSingleFile —
Create Table TabelaGrowAllFile
(Codigo Int Identity(1,1) Not Null Primary Key,
Texto VarChar(100) Default ‘Grow All File’,
Quantidade SmallInt Default 2018,
ValoresNumericos Numeric(8,2) Default ‘2018.12’,
DataAtual Date Default GetDate()+Rand()*30)
Go

— Inserindo a massa de dados —
Insert Into TabelaGrowAllFile Default Values
Go 500000

Neste momento temos o banco de dados TesteDatabaseAUTOGROWALLFILES sendo utilizando, no qual sua estrutura de arquivos esta definida para ser utilizada de forma conjunto e proporcional, ou seja, conforme a necessidade de crescimento dos arquivos de dados, ao invés de um único arquivo ser invocado e ter seu valor de crescimento definido, todos os arquivos serão envolvidos e afetados, conforme a Figura 4 a seguir ilustra:
Figura 4 – Preenchimento de todos os arquivos de dados sendo realizado com base no uso da opção Grow_All_Files.

Estamos quase lá, para finalizar nosso estudos, vamos executar o Bloco de Código 6, o qual tem a finalidade de repetir a inserção das 500.000 mil linhas de registros em cada banco de dados e posteriormente forçar um crescimento para os arquivos de dados:

 — Bloco de Código 6 —
— Acessando o Banco de Dados —
Use TesteDatabaseAUTOGROWSINGLEFILE
Go

— Inserindo a massa de dados —
Insert Into TabelaGrowSingleFile Default Values
Go 500000

— Acessando o Banco de Dados —
Use TesteDatabaseAUTOGROWALLFILES
Go

— Inserindo a massa de dados —
Insert Into TabelaGrowAllFile Default Values
Go 500000

Note que para o Banco de Dados TesteDatabaseAUTOGROWSINGLEFILE o crescimento vai ocorrer no primeiro arquivo de dados e para no Banco de Dados TesteDatabaseAUTOGROWALLFILES este crescimento será aplicado a todos os arquivos, conforme apresenta a Figura 5 abaixo:
Figura 5 – Espaço ocupado pelos arquivos de dados após o crescimento ser ocorrido.

Para finalizar, compartilho a Figura 6 que apresenta a utilização dos arquivos de dados por parte do Storage Engine de acordo com o método de alocação e preenchimento dos arquivos de dados, respeitando a configuração dos bancos de dados aqui utilizados:

Figura 6 – Comparativo entre AutoGrowSingleFile versus AutoGrowAllFiles.

Importante: Observe que todos os arquivos de dados definidos para uso no banco de Dados TesteDatabaseAutoGrowAllFiles apresentam os mesmos valores para colunas Size e FreeSpace, cenário totalmente diferente para o banco de dados TesteDatabaseAutoGrowSingleFile, que ilustra a utilização de forma diferente dos arquivos de dados, no qual os arquivos File_ID=2 e 3 estão neste momento sem espaço livre, o que indica que o crescimento foi aplicado ao primeiro arquivo de dados.

Com isso, e sem mais delongas, chegamos ao final. Ufa deu um pouco de trabalho este post, como de costume, mesmo assim sempre vale a pena poder compartilhar um pouco do conhecimento e experiências adquiridas ao longo dos anos de trabalho como DBA e Professor.

Espero que você tenha gostado, eu posso dizer que sim, mas sua opinião é muito importante.


Referências

https://pedrogalvaojunior.wordpress.com/2017/01/23/12-para-que-serve/

https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-file-and-filegroup-options?view=sql-server-2017

https://blogs.msdn.microsoft.com/psssql/2016/03/15/sql-2016-it-just-runs-faster-t1117-and-t1118-changes-for-tempdb-and-user-databases/

https://www.brentozar.com/archive/2014/06/trace-flags-1117-1118-tempdb-configuration/

https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-files-and-filegroups?view=sql-server-2017

https://www.sqlshack.com/understanding-sql-server-proportional-fill-algorithm/

http://www.sqlservercentral.com/scripts/Maintenance+and+Management/30218/

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar um dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2018/08/22/22-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/05/28/21-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/04/12/20-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/01/02/19-para-que-serve/

Conclusão

Conhecer a cada nova versão as mudanças e novidades aplicadas ao Microsoft SQL Server não é uma tarefa fácil, mas deixar de fazer uso delas pode em algum momento parecer falta de interesse ou até mesmo desconhecimento do potencial existente no produto.

Neste post, podemos conhecer esta nova opção Auto_Grow_All_Files, que nos permite aplicar uma nova maneira de orientar o SQL Server no uso, alocação e principalmente crescimento de nossos arquivos de dados, o que pode ou não impactar de forma direta na performance, contenção ou distribuição de recursos relacionados a disco rígido.

Em momento algum, o cenário aqui utilizado, muito menos a análise feita, teve o objetivo de comprovar qual forma de alocação e uso dos arquivos de dados é melhor, isso deve ser analisado para cada necessidade e ambiente.

Espero que o conteúdo aqui apresentado possa lhe ajudar a conhecer um pouco sobre como os arquivos de dados são importantes e úteis para nossos bancos, além disso, a importância de se utilizar mais de um arquivo de dados ou filegroups.

Este é o fantástico Microsoft SQL Server, que desde suas primeiras versões nos apresenta inúmeras possibilidade de se aprender, possibilitando usar o passado como fonte de inspiração para construção de um futuro melhor, por isso que a cada dia eu me apaixono ainda mais por este produto…

Vai SQL Server, Vai SQL Server….

Agradecimentos

Mais uma vez obrigado por sua ilustre visita, sinto-me honrado com sua presença, espero que este conteúdo possa lhe ajudar e ser útil em suas atividades profissionais e acadêmicas.

Um forte abraço, até o próximo post da sessão Para que serve a ser publicado no mês fevereiro de 2019.

Um grande abraço e ótima semana.

Valeu.

Anúncios

Short Scripts – Setembro 2018


Buenos dias, bom dia, comunidade….

E ai como passaram os últimos meses?

Pergunto isso, devido ao post anterior desta sessão ter sido publicado no mês de maio, posso imaginar que neste intervalo de tempo nossas vidas apresentaram inúmeras situações, espero que todas possam ter sido dentro do possível boas, assim como a minha, e se caso venha a existir algo mais espinhoso, que você possa ter superado.

Seguindo em frente, que alegria poder te encontrar em mais um post da sessão Short Scripts, uma das sessões mais recentes do meu blog que esta alçando a marca de 34 posts publicados trimestralmente.

Mantendo a tradição estou retornando com mais um conjunto de “pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, estou compartilhando a minha feita a alguns meses no final do último post desta sessão, publicando mais um conjunto de scripts adicionados atualmente na minha biblioteca particular de códigos e exemplos.

O post de hoje

Normalmente compartilho os principais scripts armazenados nos últimos meses, no post de hoje vou fazer um pouco diferente, recentemente tive a necessidade de realizar alguns atividades relacionadas as Split de dados e Collation, sendo assim, decide então compartilhar alguns códigos que estejam envolvidos com estes assuntos e que também se vinculem com outros, dentre os quais destaco:

  • Collate Column,
  • Collate,
  • Collation,
  • Database Collate,
  • Database Collation,
  • Instâncias Microsoft SQL Server,
  • Junção de Tabelas,
  • Page Split,
  • Server Collation,
  • Servidores Microsoft SQL Server,
  • String Split,
  • User Defined Function, e
  • Valores separados por vírgulas.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Setembro 2018 . Vale ressaltar que todos os scripts publicados nesta sessão foram devidamente testados, mas isso não significa que você pode fazer uso dos mesmo em seu ambiente de produção, vale sim todo cuidado possível para evitar maiores problemas.

Fique a vontade para compartilhar, comentar e melhorar cada um destes códigos.

Short Scripts

— Short Script 1  – Identificando Page Split – Método 1  —
SELECT cntr_value
FROM sys.sysperfinfo
WHERE counter_name =’Page Splits/sec’ AND
OBJECT_NAME LIKE’%Access methods%’
Go

— Short Script 2  – Identificando Page Split – Método 2  —
SELECT object_name,
counter_name,
instance_name,
cntr_value, cntr_type

FROM sys.dm_os_performance_counters
WHERE counter_name =’Page Splits/sec’ AND
OBJECT_NAME LIKE’%Access methods%’
Go

— Short Script 3  – Criando um User Defined Function para separação de Strings por vírgula  – Método 1 —
CREATE FUNCTION dbo.UFN_SEPARATES_COLUMNS(@TEXT1 varchar(8000), @COLUMN tinyint, @SEPARATOR char(1))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @POS_START int = 1
DECLARE @POS_END int = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)

WHILE (@COLUMN >1 AND @POS_END> 0)
BEGIN
SET @POS_START = @POS_END + 1
SET @POS_END = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)
SET @COLUMN = @COLUMN – 1
END

IF @COLUMN > 1 SET @POS_START = LEN(@TEXT) + 1
IF @POS_END = 0 SET @POS_END = LEN(@TEXT) + 1

RETURN SUBSTRING (@TEXT, @POS_START, @POS_END – @POS_START)
END
Go

SELECT
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 1, ‘-‘) AS PREFIX,
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 2, ‘-‘) AS REGISTRATION_GROUP,
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 3, ‘-‘) AS REGISTRANT,
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 4, ‘-‘) AS PUBLICATION,
dbo.UFN_SEPARATES_COLUMNS(@ISBN, 5, ‘-‘) AS [CHECK]
Go

— Short Script 4  – Criando um User Defined Function para separação de Strings por vírgula – Método 2  —

Create FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1

INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end – @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)

END
RETURN
END

Select * from dbo.fnSplitString(‘Querying SQL Server’,”)
Go

— Short Script 5  – Informando o Collate de uma coluna na cláusula Where  —
S
elect campo
From tabela
Where campo collate Latin_General_CI_AS like ‘%á%’
Go

— Short Script 6  – Informando o Collate na declaração de uma coluna e na cláusula Where  —
Select Campo collate Latin_General_CI_AS
From tabela
Where Campo collate Latin_General_CI_AS like ‘%á%’
Go

— Short Script 7  – Alterando o Collate de um Banco de Dados  —
Alter Database MosaicoClient
Collate SQL_Latin1_General_CP1_CI_AI
Go

— Short Script 8  – Alterando o Collate de uma Coluna  —
Alter Table Users
Alter Column [Password] Varchar(12) Collate SQL_Latin1_General_CP1_CS_AS
Go

— Short Script 9  – Identificando o Server Collation  – Método 1 —
Select SERVERPROPERTY (‘collation’)
Go

— Short Script 10 – Identificando o Server Collation  – Método 2 —
Exec sp_helpsort
Go

— Short Script 11 – Identificando o Database Collation —
Select DatabasePropertyEx(‘MRP’,’collation’)
Go

— Short Script 12 – Identificando o Column Collation – Método 1 —
Exec sp_help ‘Produtos’
Go

— Short Script 13 – Identificando o Column Collation – Método 2 —
Select * from Sys.columns
Where Name = ‘Produtos’
Go

— Short Script 14 – Identificando o Column Collation – Método 3 —
Select * from Information_schema.columns
Where Table_Name = ‘Produtos’
Go

Muito bem, missão mais que cumprida! Uma nova relação de short scripts acaba de ser compartilhada, mesmo sendo denominados short entre aspas “pequenos”, posso garantir que todos estes exemplos são de grande importância, apresentam um valor e conhecimento do mais alto nível.


Chegamos ao final de mais um Short Scripts, espero que este material possa lhe ajudar, ilustrando o uso de alguns recursos e funcionalidades do Microsoft SQL Server.

Acredito que você tenha observado que estes códigos são conhecidos em meu blog, todos estão relacionados aos posts dedicados ao Microsoft SQL Server publicados no decorrer dos últimos anos.

Boa parte deste material é fruto de um trabalho dedicado exclusivamente a colaboração com a comunidade, visando sempre encontrar algo que possa ser a solução de um determinado problema, bem como, a demonstração de como se pode fazer uso de um determinado recurso.

Links

Caso você queira acessar os últimos posts desta sessão, não perca tempo acesse os links listados abaixo:

https://pedrogalvaojunior.wordpress.com/2018/05/10/short-scripts-maio-2018/

https://pedrogalvaojunior.wordpress.com/2018/02/19/short-scripts-fevereiro-2018-transaction-log/

https://pedrogalvaojunior.wordpress.com/2017/12/09/short-scripts-dezembro-2017/

https://pedrogalvaojunior.wordpress.com/2017/09/16/short-scripts-setembro-2017/

Agradecimento

Obrigado mais uma vez por sua visita, fico honrado com sua ilustre presença ao meu blog, desejo e espero que você possa ter encontrado algo que lhe ajudou.

Volte sempre, nos encontraremos mais uma vez na sessão Short Scripts no post do mês de novembro de 2018.

Abraços…

Microsoft SQL Server 2017 – Cumulative Update 10


A Microsoft disponibilizou para download nesta semana a Atualização Cumulativa 10 (Cumulative Update 10) para SQL Server 2017.

Através do artigo KB4342123 publicado no site de suporte da Microsoft, esta nova atualização cumulativa disponível do SQL Server 2017 apresenta todas as correções existentes desde o lançamento da atual versão do produto, além disso, possui correções para problemas encontrados após o lançamento das atualizações cumulativas anteriores existentes.

Caso você necessite realizar o download de alguma atualização cumulativa anterior, utilize os links listados abaixo:

A relação completa de bugs corrigidos por esta atualização inclui um que causa vazamento de memória no arquivo sqlwepxxx.dll, outro que proporciona a degradação de performance quando a função HASHBYTES é utilizada durante uma consulta e um que faz com que a sincronização de banco de dados demore mais do que o esperado.

Ao aplicar esta atualização o número do build será atualizado para (build 14.0.3037.1), caso deseje realizar o download, basta clicar na imagem abaixo:

Fontes e Direitos Autorais: Microsoft Support – https://support.microsoft.com/en-us/help/4342123/cumulative-update-10-for-sql-server-2017

#22 – Para que serve


Oi, bom dia, tudo bem?

Seja bem-vindo a mais um post da sessão Para que Serve, sendo este o de número 22, mais um dia de muito trabalho começando, repleto de atividades, compromissos, reuniões, enfim tudo aquilo que normalmente estamos acostumados a nos deparar em nossos convívio diário.

E eu (parece música), estou aqui, como faço normalmente, acordando bem cedinho, para poder aproveitar da melhor maneira possível meu precioso tempo livre, colocando em prática algo que adoro fazer, publicar um post novo em meu blog mantendo a tradição de querer renovar e compartilhar as experiências e aprendizados adquiridos em minhas atividades profissionais e acadêmicas.

No post de hoje, não estarei compartilhando um conteúdo que pode ser considerado novo, ao contrário, quero destacar uma das mais antigas propriedades existentes em bancos de dados criados no Microsoft SQL Server desde suas versões mais antigas, mais especificamente falando da versão 2000 (é muito importante entender o passado, aprender com ele, para podemos melhorar e ofertar um futuro melhor) em diante.

Estou se referindo a propriedade denominada Page_Verify, a qual tem um papel de extrema importância no comportamento de um banco de dados de usuários, algo que pode impactar na forma de armazenamento, leitura e escrita das páginas de dados que formam a estrutura física e lógica de nossas tabelas e por consequência de nossos bancos de dados.

No decorrer deste post serão destacadas as respectivas opções existentes para esta propriedade, como também, será realizado uma análise comparativa no que diz respeito ao tempo de processamento de dados tendo como parâmetro um simples bloco de código inserindo 100.000 (Cem mil linhas de registros lógicos) com dados aleatórios.

Destaco antecipadamente que esta análise comparativa em nenhum momento leva em consideração características de Hardware, versão de Sistema Operacional ou uso de uma aplicação específica. Na verdade o objetivo desta simples análise é elucidar o uso desta propriedade, suas opções e respectivos algoritmos de processamento podem influenciar diretamente nos processos de escrita e leitura de dados.

Sendo assim, chegou a hora de conhecer um pouco mais sobre o post de número 22 da sessão Para que serve. Mas uma vez, bem vindo ao #22 – Para que serve – Propriedades de Bancos de Dados – Page_Verify e suas opções.

Espero que você esta animado para conhecer um pouco mais sobre esta propriedade, caso já conheça, continue lendo este post, sempre podemos aprender algo novo….


Introdução

Criar uma nova tabela para alocar dados em qualquer banco de dados existente no Microsoft SQL Server, pode ser considerada uma tarefa ou procedimento de fácil compreensão, muito simples de ser realizada tanto por linha de comando como também por interface gráfica, mas por trás “dos panos” diversos procedimentos internos são realizados pelo Sistema Gerenciador de Banco de Dados e seus diversos recursos e componentes internos.

Imagine então a tarefa de criação de um novo banco de dados, não parece também ser algo muito, mas muito simples! Teoricamente sim, mas se começarmos a analisar, entender e de preferência estudar cada uma das diversas propriedades que formam e orientam o Mecanismo de Bancos de Dados na execução da instrução de criação de um novo banco, teremos a total certeza que isso não tão simples como pensamos.

Pensando justamente neste cenário, decidi então identificar uma propriedade que por muitas vezes me passou totalmente despercebida e nos últimos dias acabou sendo motivo de estudos, como já destacado anteriormente estou me referindo a propriedade Page_Verify, sendo esta um das mais antigas propriedades existentes em bancos de dados desde a versão 2000 ou nível de compatibilidade 80, inicialmente apresentava como conjunto de opções os valores: None e Torn_Page_Detection e a partir da versão 2005 do Microsoft SQL Server ganhou uma nova opção conhecida como CheckSum e por consequência um novo algoritmo.

Vamos então conhecer um pouco mais sobre esta propriedade.

Propriedade de Banco de Dados Page_Verify

Propriedade existente em bancos de dados criados no Microsoft SQL Server que possui basicamente a função de permitir ao Sistema Gerenciador de Banco de Dados identificar e informar as chamadas Páginas de Dados Incompletas (Incomplete Pages) ou Páginas de Dados Suspeitas (Suspect Pages), através de dados internos catalogados e coletados na tabela suspect_pages existente dentro do banco de dados de sistemas MSDB.

Outra característica muito importante apresentada pela Page_Verify, relaciona-se ao método de verificação que garante ao Microsoft SQL Server que as páginas de dados que compõem um determinada tabela podem ser consideradas integras e completas, esta capacidade esta totalmente relacionada ao uso de um algoritmo pertencente a esta propriedade de acordo com o tipo de verificação de página que deve ser aplicada.

Esta tão importante característica, deve ser levada em consideração, mesmo tendo diversas funcionalidades que nos permitem identificar se a estrutura física e lógica de um banco de dados pode ser considerado integra. Em inúmeros cenários um banco de dados pode aparentemente estar apresentando falhas na estrutura interna que define uma respectiva página de dados sem necessariamente existir ou que tenha ocorrida uma falha física nas unidades de disco que armazenam tal página de dados.

A identificação se uma página de dados pode ou não ser considerada incompleta, suspeita ou quebrada é feita através da identificação de bits armazenados diretamente no cabeçalho de dados existente na respectiva página, é justamente por isso que a propriedade Page_Verify utiliza alguns algoritmos de acordo com a opção escolhida nas configurações e propriedades de um banco de dados, como recurso para garantir em tempo real o menor número de ocorrências ou possíveis falhas que venham a ocasionar uma perda de dados.

Vamos agora conhecer as formas de verificação de páginas de dados e seus respectivos algoritmos.

Formas de Verificação: None, Torn_Page_Detection e CheckSum

Até a versão 2005 SP2 do Microsoft SQL Server tínhamos somente as formas de verificação de páginas de dados None e Torn_Page_Detection, mas este cenário muito e uma nova opção denominada CheckSum foi adicionada, sendo esta então valor padrão para propriedade Page_Verify para bancos de dados com nível de compatibilidade 90 ou superior.

None: Ao escolher esta opção, o Microsoft SQL Server recebe a orientação para que não seja realizado os procedimentos de verificação e correção das páginas lidas durante os atividades de armazenamento de dados.

Logicamente esta é uma opção que não deverá ser utilizada em ambientes que não podemos correr o menor risco possível de aceitar falhas ou perdas de dados, mesmo confiando nas tecnologias de Hardware, estratégias de armazenamento, contingência e retenção de dados, a partir do momento que esta opção for escolhida você estará assumindo o risco.

Torn_Page_Detection: Opção padrão existente na versão 2000 do Microsoft SQL Server. Ao escolher esta opção, estaremos definindo o uso do algoritmo que armazenará em tempo real no cabeçalho de cada página de dados bits que identificam a operação de gravação.

No momento em que esta mesma página é lida de um disco durante a operação de leitura, os bits do cabeçalho da página são comparados àqueles no corpo da página. Caso alguma discrepância venha a ser detectada, esta específica página de dados será em tempo real considerada quebrada (incompleta ou suspeita) e o problema é relatado para um usuário.

Vale destacar que este algoritmo no momento em que uma página de dados esta sendo verificada, realiza o procedimento de duplicação de pequenas porções de bits de dados contidos em seu cabeçalho, algo que não podemos necessariamente relatar como um consumo maior de espaço em disco, na verdade é esta tarefa de duplicação de dados bits de dados utilizada para garantir a consistência da página. Por outro lado, dependendo do tipo de falha que poderá ocorrer alguns erros acabam não sendo detectados, se justamente o bit quebrado é um daqueles que não foram duplicados no cabeçalho da página, o dano não é detectado.

CheckSum: Opção padrão desde o SQL Server 2005 SP3, a partir do momento que esta opção é selecionado, o Microsoft SQL Server estará fazendo uso do algoritmo responsável durante  operação de gravação, realizar uma soma de verificação (CheckSum) que calcula a partir da estrutura completa de uma página de dados um valor a ser armazenado diretamente em seu cabeçalho.

No momento em que a respectiva página de dados é lida a partir de um disco, CheckSum é calculado novamente e comparado com o valor no cabeçalho da página. A idéia é semelhante ao TORN_PAGE_DETECTION, podemos destacar que ambos algoritmos calculam um valor de verificação para uma página e armazenam o resultado no cabeçalho da página, mas CheckSum usa a página inteira para cálculo, ao contrário do TORN_PAGE_DETECTION que utiliza apenas um pequeno número de bits existente na página de dados.

Se compararmos a opção TORN_PAGE_DETECTION com a opção CheckSum, podemos afirmar que o CheckSum apresenta uma forma de análise e verificação de possíveis falhas e erros nas atividades de Input/Output de dados, mais confiável e inteligente, estabelecendo uma cobertura mais precisa que garante uma assertividade maior na identificação de possíveis páginas de dados incompletas, suspeitas ou quebradas.

Agora que conhecemos a propriedade Page_Verify e suas opções, vamos então conhecer de forma prática e entender o comportamento de cada uma delas, realizando assim a análise destacada no início deste post.

Chegou a hora de colocar a mão nos teclados, como de costume teremos um ambiente de testes a ser criado, o que será utilizado como cenário de estudos.

Criando o Ambiente

Em meu ambiente de estudos estou utilizando o Microsoft SQL Server 2017 Enterprise Edition – Cumulative Update 9 e Sistema Operacional Windows 10, fique a vontade para utilizar o melhor cenário possível dentro das suas necessidades.

Como já destacado anteriormente esta análise ou possível cenário de estudo não consiste em afirmar qual é a mais rápida ou melhor forma de verificação de páginas de dados, mas sim demonstrar o quanto uma determinada opção poderá impactar ou influenciar nos custos de processamento de dados nas atividades de leitura e escrita, nesta prática mais especificamente nas atividades de gravação de dados.

Para realizar nossa simples prática, começaremos pela execução do Bloco de Código 1, responsável por criar a seguinte estrutura:

  • Database: TesteDatabasePageVerify;
  • Tables: TabelaPageVerify; e PageVerifyTempoDecorrido.

— Bloco de Código 1 —
— Criando o Banco de Dados TesteDatabasePageVerify —
Create Database TesteDatabasePageVerify
Go

— Acessando o Banco de Dados TesteDatabasePageVerify —
Use TesteDatabasePageVerify
Go

— Criando a Tabela TabelaPageVerify —
Create Table TabelaPageVerify
(Codigo Int Identity(1,1) Not Null Primary Key,
Texto VarChar(10) Not Null,
Quantidade SmallInt Not Null,
ValoresNumericos Numeric(18, 2) Not Null,
DataAtual Date Not Null)
Go

— Criando a Tabela PageVerifyTempoDecorrido —
Create Table PageVerifyTempoDecorrido
(NumeroDaAnalise SmallInt Identity(1,1) Not Null,
TipoDaAnaliseRealizada Varchar(22) Not Null,
HoraInicio Time Not Null,
HoraFim Time Not Null,
HoraDiferenca As (DateDiff(Second, HoraInicio, HoraFim)))
Go

A tabela TabelaPageVerify será utilizada como repositório dos dados que estaremos aleatoriamente gerando como fonte de análise, já a tabela PageVerifyTempoDecorrido terá um papel importante que consiste basicamente em armazenar os dados relacionada a análise realizada, dentre elas o Tipo da Análise, Horário de Início e Fim e a diferença em segundo entre os respectivos horários.

Avançando mais um pouco, vamos agora realizar propriamente a análise para cada uma das opções de verificação de páginas existentes, serão realizadas um total de 10 análises para cada opção e ao fim os dados armazenados na Tabela PageVerifyTempoDecorrido será apresentados como uma fonte de resultando da nossa análise.

Para realizar esta análise utilizaremos o Bloco de Código 2 apresentado abaixo:

— Bloco de Código 2 —
— Desativando a Contagem de Linhas —
Set NoCount On
Go

— Declarando as variáveis de controle —
Declare @Counter TinyInt = 0,
@Text Char(130),
@Position TinyInt,
@RowCount Int = 100000,
@HoraInicio Time = GetDate(),
@HoraFim Time

Set @Text = ‘0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ\_abcdefghijklmnopqrstuvwxyzŽŸ¡ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåæçèéêëìíîïðñòóôõöùúûüýÿ.;^’ –There are 130 characters in this text–

While @Counter <10 — Definindo a quantidade máxima de testes —
Begin

— Alterando a Propriedade Page_Verify para None —
Alter Database TesteDatabasePageVerify
Set Page_Verify None

— Inserindo a massa de dados na tabela TabelaPageVerify —
While (@RowCount >=1)
Begin

Set @Position=Rand()*130

Insert Into TabelaPageVerify (Texto, Quantidade, ValoresNumericos, DataAtual)
Values(Concat(SubString(@Text,@Position+2,2),SubString(@Text,@Position-4,4),SubString(@Text,@Position+2,4)),
Rand()*1000,
Rand()*100+5,
DATEADD(d, 1000*Rand() ,GetDate()))

Set @RowCount = @RowCount – 1
End

Set @HoraFim=GetDate()

Insert Into PageVerifyTempoDecorrido (TipoDaAnaliseRealizada , HoraInicio, HoraFim)
Values (‘None’, @HoraInicio, @HoraFim)

— Alterando a Propriedade Page_Verify para Torn_Page_Detection —
Alter Database TesteDatabasePageVerify
Set Page_Verify Torn_Page_Detection

— Inserindo a massa de dados na tabela TabelaPageVerify —
Set @RowCount = 100000
Set @HoraInicio = GetDate()

While (@RowCount >=1)
Begin

Set @Position=Rand()*130

Insert Into TabelaPageVerify (Texto, Quantidade, ValoresNumericos, DataAtual)
Values(Concat(SubString(@Text,@Position+2,2),SubString(@Text,@Position-4,4),SubString(@Text,@Position+2,4)),
Rand()*1000,
Rand()*100+5,
DATEADD(d, 1000*Rand() ,GetDate()))

Set @RowCount = @RowCount – 1
End

Set @HoraFim=GetDate()

Insert Into PageVerifyTempoDecorrido (TipoDaAnaliseRealizada , HoraInicio, HoraFim)
Values (‘Torn_Page_Detection’, @HoraInicio, @HoraFim)

— Alterando a Propriedade Page_Verify para CheckSum —
Alter Database TesteDatabasePageVerify
Set Page_Verify CheckSum

— Inserindo a massa de dados na tabela TabelaPageVerify —
Set @RowCount = 100000
Set @HoraInicio = GetDate()

While (@RowCount >=1)
Begin

Set @Position=Rand()*130

Insert Into TabelaPageVerify (Texto, Quantidade, ValoresNumericos, DataAtual)
Values(Concat(SubString(@Text,@Position+2,2),SubString(@Text,@Position-4,4),SubString(@Text,@Position+2,4)),
Rand()*1000,
Rand()*100+5,
DATEADD(d, 1000*Rand() ,GetDate()))

Set @RowCount = @RowCount – 1
End

Set @HoraFim=GetDate()

Insert Into PageVerifyTempoDecorrido (TipoDaAnaliseRealizada , HoraInicio, HoraFim)
Values (‘CheckSum’, @HoraInicio, @HoraFim)

Set @Counter = @Counter + 1
End
Go

Ótimo, após o processamento de nossa análise, gerou a hora de obter o resumo de tempo decorrido de processamento para cada opção, basta executar o Bloco de Código 3 divido em duas partes: Resumo Detalhado e Resumo Sumarizado, conforme declaro abaixo:

— Bloco de Código 3 —
— Parte 1 – Consultando o resumo detalhado —
Select NumeroDaAnalise,
TipoDaAnaliseRealizada,
HoraInicio,
HoraFim,
HoraDiferenca As ‘Segundos’
From PageVerifyTempoDecorrido
Go

A Tabela 1 apresentada a seguir, ilustra o detalhamento de dados coletados durante o processamento do Bloco de Código 2 realizado anteriormente:

Número da Análise Tipo da Análise Hora Início Hora Fim Segundos
1 None 10:45:59.1966667 10:46:51.0566667 52
2 Torn_Page_Detection 10:46:51.0566667 10:47:31.9633333 40
3 CheckSum 10:47:31.9800000 10:48:09.3566667 38
4 None 10:47:31.9800000 10:48:09.3566667 38
5 Torn_Page_Detection 10:48:09.3700000 10:48:38.6800000 29
6 CheckSum 10:48:38.6966667 10:49:13.6800000 35
7 None 10:48:38.6966667 10:49:13.6933333 35
8 Torn_Page_Detection 10:49:13.7133333 10:49:47.5100000 34
9 CheckSum 10:49:47.5100000 10:50:17.3433333 30
10 None 10:49:47.5100000 10:50:17.3600000 30
11 Torn_Page_Detection 10:50:17.3766667 10:50:49.7066667 32
12 CheckSum 10:50:49.7233333 10:51:23.3566667 34
13 None 10:50:49.7233333 10:51:23.3733333 34
14 Torn_Page_Detection 10:51:23.3733333 10:51:54.4200000 31
15 CheckSum 10:51:54.4200000 10:52:29.0466667 35
16 None 10:51:54.4200000 10:52:29.0500000 35
17 Torn_Page_Detection 10:52:29.0666667 10:53:00.8300000 31
18 CheckSum 10:53:00.8466667 10:53:32.1433333 32
19 None 10:53:00.8466667 10:53:32.1600000 32
20 Torn_Page_Detection 10:53:32.1766667 10:54:06.6466667 34
21 CheckSum 10:54:06.6633333 10:54:36.9400000 30
22 None 10:54:06.6633333 10:54:36.9400000 30
23 Torn_Page_Detection 10:54:36.9566667 10:55:09.7533333 33
24 CheckSum 10:55:09.7700000 10:55:41.8866667 32
25 None 10:55:09.7700000 10:55:41.8866667 32
26 Torn_Page_Detection 10:55:41.9033333 10:56:15.0166667 34
27 CheckSum 10:56:15.0166667 10:56:45.6966667 30
28 None 10:56:15.0166667 10:56:45.7133333 30
29 Torn_Page_Detection 10:56:45.7133333 10:57:21.7900000 36
30 CheckSum 10:57:21.7933333 10:57:54.8433333 33

Tabela 1 – Detalhamento de dados coletados após o processamento do Bloco de Código 2.

— Parte 2 – Consultando o resumo sumarizado —
Select TipoDaAnaliseRealizada,
Avg(HoraDiferenca) As ‘Média em segundos’
From PageVerifyTempoDecorrido
Group By TipoDaAnaliseRealizada
Order By ‘Média em segundos’ Desc
Go

A Tabela 2 apresentada a seguir, ilustra o dados coletados durante o processamento do Bloco de Código 2 realizado anteriormente de forma sumarizada com o cálculo da média de segundos gastos para o processamento de cada opção de verificação de páginas:

Tipo da Análise Média em segundos
None 34
Torn_Page_Detection 33
CheckSum 32

Tabela 2 – Dados sumarizados após o processamento do Bloco de Código 2.

Falta só um pouco, o último passo que iremos realizar, consiste na apresentação do Sumário de processamento em segundos demandado por cada algoritmo de verificação de páginas, através da execução do Bloco de Código 4, sendo que o mesmo apresentará os seguintes resultados:

  • Média de processamento em segundos;
  • Menor tempo de processamento em segundos;
  • Maior tempo de processamento em segundos; e
  • Somatória total do tempo de processamento.

— Bloco de Código 4 —
— Pivot —
Select ‘Média de processamento…..’ As ‘Sumário por segundos’, [None],[Torn_Page_Detection],[CheckSum]
From (Select TipoDaAnaliseRealizada,
HoraDiferenca
From PageVerifyTempoDecorrido
) As A
Pivot (Avg(HoraDiferenca) For TipoDaAnaliseRealizada In ([None],[Torn_Page_Detection],[CheckSum])) As Pvt
Union All
Select ‘Menor tempo de processamento…..’, [None],[Torn_Page_Detection],[CheckSum]
From (Select TipoDaAnaliseRealizada,
HoraDiferenca
From PageVerifyTempoDecorrido
) As A
Pivot (Min(HoraDiferenca) For TipoDaAnaliseRealizada In ([None],[Torn_Page_Detection],[CheckSum])) As Pvt
Union All
Select ‘Maior tempo de processamento…..’, [None],[Torn_Page_Detection],[CheckSum]
From (Select TipoDaAnaliseRealizada,
HoraDiferenca
From PageVerifyTempoDecorrido
) As A
Pivot (Max(HoraDiferenca) For TipoDaAnaliseRealizada In ([None],[Torn_Page_Detection],[CheckSum])) As Pvt
Union All
Select ‘Somatória do tempo de processamento…..’, [None],[Torn_Page_Detection],[CheckSum]
From (Select TipoDaAnaliseRealizada,
HoraDiferenca
From PageVerifyTempoDecorrido
) As A
Pivot (Sum(HoraDiferenca) For TipoDaAnaliseRealizada In ([None],[Torn_Page_Detection],[CheckSum])) As Pvt
Go

A Tabela 3 apresentada a seguir, ilustra o dados coletados durante o processamento do Bloco de Código 4, sumarizados e estruturados através do uso de Pivot:

Sumário por segundos None Torn_Page_Detection CheckSum
Média de processamento….. 34 33 32
Menor tempo de processamento….. 30 29 30
Maior tempo de processamento….. 52 40 38
Somatória do tempo de processamento….. 348 334 329

Tabela 3 – Dados sumarizados e apresentados em formato de Pivot após o processamento do Bloco de Código 4.

Agora sim, chegamos ao final. Ufa deu um pouco de trabalho este post, como de costume, mesmo assim sempre vale a pena poder compartilhar um pouco do conhecimento e experiências adquiridas ao longo dos anos de trabalho como DBA e Professor.

Espero que você tenha gostado, eu posso dizer que sim, mas sua opinião é muito importante.


Referências

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-database-transact-sql?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/policy-based-management/set-the-page-verify-database-option-to-checksum?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-properties-options-page?view=sql-server-2017

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/manage-the-suspect-pages-table-sql-server?view=sql-server-2017

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar um dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2018/05/28/21-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/04/12/20-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/01/02/19-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2017/12/15/18-para-que-serve/

Conclusão

Pensar na melhor forma para se armazenar um dado em uma respectiva tabela, vai muito além de escolher o tipo de dados mais indicado, temos também que procurar conhecer cada vez mais as propriedades de definem a estrutura e comportamento de um banco de dados, visando sempre garantir a melhor forma de armazenar, coletar e garantir que nossos servidores, aplicações e usuários possam fazer uso desta tão importante matéria prima utilizada pelas organizações, os dados que estão guardados em nossos bancos dados.

Neste post, você pode conhecer uma mais sobre a propriedade de banco de dados Page_Verify e suas opções: None, Torn_Page_Detection e CheckSum. Propriedade que desempenha um papel de extrema importância no que diz respeita a garantir que nossos dados estão armazenados de forma integra e confiável.

Realizamos uma simples análise para elucidar como estas opções podem influenciar no comportamento do Database Engine e também no Storage Engine, conhecemos também como cada opção desempenha o papel de verificar a estrutura física e lógica das páginas de dados que formam nossas tabelas, fazendo uso de algoritmos que gravam diretamente bits nos cabeçalhos destas mesma páginas, como fonte de identificação para tentar garantir que sua estrutura esta integra e confiável.

Mais uma vez destaco que este o estudo realizado no cenário apresentando neste post, não tem a finalidade de mostrar qual opção é mais rápida, mas sim demonstrar como em alguns momento a opção Torn_Page_Detection em comparação com a CheckSum pode ser mais vantajosa ou não, sabendo que a opção None não é recomendada para fiz corporativos.

Este é o fantástico Microsoft SQL Server, que desde suas primeiras versões nos apresenta inúmeras possibilidade de se aprender, possibilitando usar o passado como fonte de inspiração para construção de um futuro melhor, por isso que a cada dia eu me apaixono ainda mais por este produto…

Vai SQL Server, Vai SQL Server….

Agradecimentos

Mais uma vez obrigado por sua ilustre visita, sinto-me honrado com sua presença, espero que este conteúdo possa lhe ajudar e ser útil em suas atividades profissionais e acadêmicas.

Um forte abraço, até o próximo post da sessão Para que serve a ser publicado no mês novembro.

Um grande abraço e ótima semana.

Valeu.

Microsoft SQL Server 2017 Cumulative Update 9 disponível


A Microsoft informou ontem dia 19/07 no blog SQL Server Release Services a disponibilidade da Atualização Cumulativa(Cumulative Update) 9 para o Microsoft SQL Server 2017.

Atualizações Cumulativas disponíveis para o Microsoft SQL Server 2017:

O artigo KB4341265 publicado no site de suporte da Microsoft, esta nova atualização do SQL Server 2017 traz todas as correções disponibilizadas desde o lançamento do novo SQL Server, incluindo também correções para problemas encontrados após o lançamento das atualizações cumulativas anteriores.

Hotfixes que estão incluídos neste pacote de atualização cumulativa:
Número do bug VSTS Número do artigo KB Descrição Área fixa Plataforma
12144190 4340069 CORREÇÃO: SQL Server 2017 no Linux é desligado inesperadamente durante a recuperação de um banco de dados OLTP de memória OLTP in-memory Linux
12041154 4340134 CORREÇÃO: Erro quando uma função é definida com uma coluna restrita é usada para executar uma consulta drill-through no SSAS Analysis Services Windows
12128861 4340747 CORRIGIR: SQLDUMPER. Despejos EXE iniciada podem levar muito tempo para concluir o processo de geração de despejo para 2017 do SQL Server no Linux Mecanismo SQL Linux
12168709 4010460 CORREÇÃO: Um erro do.NET Framework ocorreu quando você atualiza a tabela de referência de uma transformação Fuzzy Lookup no SSIS Integration Services Windows
12138685 4339613 CORREÇÃO: “Unclosed aspas após a sequência de caracteres” erro ocorre no explorer MDS quando você tentar adicionar um novo membro para uma entidade no SQL Server Data Quality Services (DQS) Windows
12107546 4338890 CORREÇÃO: Uma instância do SQL Server pode parecer não responder e em seguida, pode ocorrer um erro de “não respondendo no Agendador” no SQL Server 2016 Mecanismo SQL Windows
11922902 4316858 CORREÇÃO: “índice corrompido” mensagem e servidor desconexão quando uma consulta de estatísticas de atualização usa hash agregação no SQL Server Desempenho do SQL Todas
12149855 4341219 CORREÇÃO: Um cenário de cérebro divisão ocorre após um failover ao usar grupos de disponibilidade do AlwaysOn com a tecnologia de cluster externo no SQL Server 2017 Alta disponibilidade Todas
12111717 4340837 CORREÇÃO: Erro 3906 quando for aplicado um hotfix em um SQL Server que possui um banco de dados em um banco de dados de inscrição de recepção de instantâneo Mecanismo SQL Windows
11983925 4133164 CORREÇÃO: Erro quando um trabalho do SQL Server Agent executa um comando PowerShell enumere permissões do banco de dados Ferramentas de gerenciamento Windows
12121216 4339664 CORREÇÃO: O erro de exceção ocorre quando você tenta atualizar dados de uma tabela dinâmica no Excel no SSAS 2017 Analysis Services Windows
12123248 4340742 CORREÇÃO: Acesso ao SSAS usando HTTP falha no SQL Server Analysis Services Windows
12162067 4341264 Aperfeiçoamento: Permitir trabalhos do SQL Server Agent iniciar sem esperar que todos os bancos de dados obter recuperado no SQL Server 2017 no Linux Mecanismo SQL Linux
12186129 4101502 CORREÇÃO: Backup de banco de dados TDE habilitada com compactação causa corrupção de banco de dados no SQL Server Mecanismo SQL Todas
12129434 4134601 CORREÇÃO: “não foi possível carregar arquivo ou assembly ‘ Microsoft.AnalysisServices.AdomdClientUI” erro quando uma operação de “Processo total” é executada no SQL Server Analysis Services Windows
12162425 4341221 CORREÇÃO: Backup VSS Falha na réplica secundária de grupos básicos de disponibilidade no SQL Server 2016 e 2017 Mecanismo SQL Windows
12108225 4339858 CORREÇÃO: Redo paralelo não funciona após você desativar 3459 de sinalizador de rastreamento em uma instância do SQL Server Alta disponibilidade Todas
12061383 4341253 CORREÇÃO: Sys.dm_db_log_info e sys.dm_db_log_stats DMVs podem retornar valores incorretos para o último banco de dados da instância do SQL Server 2016 Mecanismo SQL Windows

Dentre os erros e falhas corrigidas neste cumulative update, as informações apresentadas no KB4341265 destacam uma correção relacionada comportamento apresentado por uma instância do SQL Server 2017 que aparentemente encontra-se travada e exibindo o erro “Non-yielding Scheduler“. 

Outra correção destacada no artigo, se relaciona ao erro “Could not load file or assembly ‘Microsoft.AnalysisServices.AdomdClientUI”.

Vale ressaltar que além de correções relacionadas a erros apresentados por comportamentos apresentadas pelas instância SQL Server 2017, a CU9 também possui correções para os bugs relacionados as DMVs sys.dm_db_log_stats e sys.dm_db_log_info may retornem valores incorretos em determinados momentos de consulta de dados relacionados aos arquivos de log existentes em bancos de dados.

Vale ressaltar que após a atualização desta nova atualização cumulativa, o número do build utilizado pelo Microsoft SQL Server 2017 RTM será alterado para compilação: 14.0.3030.27.

Para realizar o download clique na imagem abaixo:

Fontes e Direitos Autorais: SQL Server Release Services – 19/07/2018.

Microsoft SQL Server Management Studio 17.8 liberado


Em anuncio oficial, A Microsoft apresentou em seu blog a nova versão do Microsoft SQL Server Management Studio 17.8, conhecida por muitos profissionais de tecnologia pela sigla SSMS.

O SSMS combina um amplo grupo de ferramentas gráficas com vários editores de script avançados para fornecer acesso para desenvolvedores e administradores de todos os níveis de conhecimento ao SQL Server, além disso, através desta ferramenta você vai encontrar um ambiente totalmente integrado com os mais diversos serviços e recursos existentes no Microsoft SQL Server.

Vale ressaltar que desde a versão 2016 do Microsoft SQL Server, o time de engenheiros e desenvolvedores da Microsoft, decidiram superar a dependência do Management Studio da versão do SQL Server, sendo assim, deste então independente da versão do Microsoft SQL Server instalado é possível utilizar e instalar versões superiores ou não do Management Studio, tornando-se então um novo produto independente do SQL Server.

A partir da versão 17, o Microsoft SQL Server Management Studio apresenta um novo ícone que faz referência a esta ferramenta substituindo justamente o ícone utilizado pelas versões anteriores do Management Studio específicos de cada versão do Microsoft SQL Server.

A Figura 1 abaixo apresenta este novo ícone:

Figura 1 – Novo ícone utilizado pelo Microsoft SQL Server Management Studio a partir da versão 17.

Para realizar download do Microsoft SQL Server Management Studio 17.8, utilize um dos links apresentados abaixo:

Download SQL Server Management Studio 17.8

Download SQL Server Management Studio 17.8 Upgrade Package (upgrades 17.x to 17.8)

Após a instalação desta nova versão o Microsoft SQL Server Management Studio terá sua número de versão evoluído para: 17.8 e seu release build para: 14.0.17276.0. Dentre os bugs e melhorias implementadas nesta nova versão a Microsoft destaca correções específicas para editor de querys, nova interface para scripts e suporte a propriedade AUTOGROW_ALL_FILES, entre outras inovações.

Caso queira saber mais sobre esta versão, sua lista de correções e melhorias, acesse: https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017

Esta nova versão do SSMS 17.8 esta disponível para as versões do Mirosoft SQL Server versão 2008 até 2017, é compatível com as versões 64 bits do Windows 7, Windows 8/8.1, Windows 10, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2 e Windows Server 2016 e também suporta o SQL Analysis Service PaaS.

Fontes e Direitos Autorais: Microsoft – Docs SQL Tools SQL Server Management Studio (SSMS) – 21/06/2018.

Nova versão do Microsoft SQL Server Data Tools para Visual Studio 2017


O Microsoft SQL Server Data Tools v15.7.0 é uma ferramenta de desenvolvimento moderna disponível gratuitamente pela Microsoft, que permite o desenvolvimento de bancos de dados relacionais do SQL Server, bancos de dados SQL do Azure, projetos de integração de dados através do Integration Services, projetos e modelos de dados do Analysis Services e relatórios do Reporting Services.

Através do SQL Server Data Tools, você pode criar e implementar qualquer projeto relacionado ao Microsoft SQL Server com a mesma facilidade com que desenvolve um aplicativo no Visual Studio.

Caso deseje instalar o SQL Server Data Tools de forma integrada ao Visual Studio, selecione o setup de instalação do Visual Studio 2017 a opção Data Storage and Processing, conforme apresenta a Figura 1 abaixo:

Sql Dt 157 02Figura 1 – Instalação do SSDT de forma integrada com o Visual Studio 2017.

Você pode também instalar esta nova versão do SSDT em seu ambiente, mesmo que uma instância do Visual Studio 2017 esteja instalada, logo após a iniciação do setup do instalação, o instalador do SSDT irá identificar se já existe uma instância do Visual Studio instalada em seu máquina, como também, lhe permitira realizar uma nova instalação de acordo com o conjunto de serviços a serem escolhidos.

O SQL Server Data Tools v15.7.0 para Visual Studio 2017 está disponível para download aqui, o mesmo é compatível com as versões Windows 7 SP1, Windows 8.1, Windows 10, Windows Server 2012 R2 e Windows Server 2016, para os seguintes idiomas:

Chinês (República Popular da China) | Chinês (Taiwan) | Inglês (Estados Unidos) | Francês | Alemão | Italiano | Japonês | Coreano | Português (Brasil) | Russo | Espanhol.

O changelog publicado pela Microsoft, destaca que a versão 15.7.0 do SQL Server Data Tools para Visual Studio 2017 apresenta diversas correções para múltiplos bugs.

A lista de problemas apresentados no changelog, inclui entre os mais diversos bugs um em específico que afeta o SSIS Execute Package Task, fazendo que esta funcionalidade não suporte a depuração quando o valor do parâmetro ExecuteOutOfProcess quando o mesmo esta configurado como  como True.

Para maiores informações sobre o SQL Server Data Tools podem ser encontradas através do link: https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-2017#ssdt-for-vs-2017-standalone-installer

Observação: Segundo a documentação Microsoft, antes de realizar o processo de instalação do SQL Server Data Tools v15.7.0 para Visual Studio 2017, desinstale as extensões “Projetos do Microsoft Analysis Services” e “Projetos do Microsoft Reporting Services”, caso eles já estejam instalados no Visual Studio 2017.

Além disso, é obrigatório que nenhuma instância do Visual Studio encontre-se em execução durante o processo de instalação.

Fontes e Direitos Autorais: Microsoft – Docs SQL SSDT (SQL Server Data Tools).

Microsoft disponibiliza nova versão do System Center Management Pack para SQL Server


A Microsoft anunciou ontem dia 05/06 em seu blog SQL Server Release Services a nova versão do System Center Management Pack v7.0.5.0 Preview compatível com as versões: 2017, 2016, 2014, 2012, 2008 e 2008 R2 do Microsoft SQL Server.

Através do Management Pack, Profissionais de Tecnologia, Administradores de Servidores, Administradores de Bancos de Dados e DBAs, terão a possibilidade de monitorar em tempo os respectivos bancos de dados, serviços como SQL Server Agent e outros componentes que compõem o System Center Operations Manager.

See the source image

Em seu anúncio a Microsoft, informa que o System Center Management Pack v7.0.5.0 Preview para SQL Server traz correções para múltiplos bugs, mudanças em alguns scripts, mudanças na severidade de alguns alertas, suporte para monitoramento de instâncias SQL Server Cluster localmente, suporte para monitoramento de SQL Server Integration Services.

A versão 7.0.5.0 Preview encontra-se disponível para download, através dos links:

System Center Management Pack 7.0.5.0 Preview para SQL Server 2008, 2012, 2014 e 2016.

System Center Management Pack 7.0.5.0 Preview para SQL Server 2017.

Há lista completa com todas as novidades e bugs corrigidos pode ser obtida acessando: https://blogs.msdn.microsoft.com/sqlreleaseservices/released-public-preview-for-sql-server-management-packs-update-7-0-5-0-and-ssrs-management-pack-update-7-0-6-0/

Fontes e Direitos Autorais: 

Microsoft SQL Server 2016 SP2 – Atualização Cumulativa 1 disponível


A Microsoft disponibilizou para download hoje dia 30/05/2018 a Atualização Cumulativa 1 para SQL Server 2016 SP2.

As informações obtidas através do artigo KB4135048 publicado no site de suporte da Microsoft, esta atualização traz correções decorrentes dos problemas apresentados e identificados após o lançamento do SP2, sendo esta a primeira atualização cumulativa para este service pack.

Hotfixes que estão incluídos neste pacote de atualização cumulativa


Número de bug do VSTS Número de artigo do KB Descrição Corrigir a área
11983391 4131193 Problemas de desempenho ocorrem sob a forma de PAGELATCH_EX e PAGELATCH_SH espera em TempDB quando você usar o SQL Server 2016 Serviço do SQL
11983323 4133164 CORREÇÃO: Erro quando um trabalho do SQL Server Agent executa um comando do PowerShell para enumerar as permissões do banco de dados Ferramentas de gerenciamento
11516235 4087406 CORREÇÃO: Erro 9002 quando não houver nenhum espaço em disco suficiente para crescimento de crítica de log no SQL Server 2014, 2016 e 2017 Serviço do SQL
11695337 4092554 CORREÇÃO: “não é possível usar salvar transação dentro de uma transação distribuída” erro quando você executar um procedimento armazenado no SQL Server Serviço do SQL
11983395 4086173 CORREÇÃO: Violação de acesso ocorre ao executar uma consulta DAX em um modelo tabular no SQL Server Analysis Services Serviços de análise
11983390 4099472 PFS página melhoria de algoritmo round robin no SQL Server 2016 Serviço do SQL
11983376 3028216 CORREÇÃO: Ocorre uma falha quando o cache pró-ativo é desencadeada por uma dimensão no SSAS Serviços de análise
11971819 4230516 CORREÇÃO: Uma falha de asserção de memória ocorre e o servidor é incapaz de fazer qualquer novas conexões no SQL Server Serviço do SQL
11684529 4164562 CORREÇÃO: Nome de usuário errado aparece quando dois usuários acesse a MDS em momentos diferentes no SQL Server Serviços de qualidade de dados (DQS)
11578522 4089718 Melhoria: Problema de desempenho ao atualizar o MDS do SQL Server 2012 para 2016 Serviços de qualidade de dados (DQS)
11983367 4134541 CORREÇÃO: Erro do MDS Add-in para o Excel quando você usar a versão alemã do Excel no SQL Server Serviços de qualidade de dados (DQS)
11983360 4094858 CORREÇÃO: “ocorreu um erro inesperado” quando você usa o DAX medidas em visualizações de mesa poder BI no SQL Server Serviços de análise
11983362 4094706 FIX: Um thread de trabalho parece ficar depois que outro thread de trabalho é abortado quando você executa uma consulta paralela no SQL Server Serviço do SQL
11983392 4101502 CORREÇÃO: Backup de banco de dados habilitada a TDE com a compactação causa corrupção de banco de dados no SQL Server 2016 Serviço do SQL
11983382 4230306 CORREÇÃO: Restauração de um backup compactado TDE é vencida quando usando o cliente VDI Serviço do SQL
11983383 4163087 CORREÇÃO: Desempenho é lento para um sempre na AG quando você processa uma leitura consulta no SQL Server Serviço do SQL
11983373 4162814 CORREÇÃO: Ocorre uma violação de acesso de exceção interna e o servidor SSAS para de responder Serviços de análise
11922532 4157948 CORREÇÃO: Erro de estouro de ponto flutuante ocorre quando você executar um módulo compilado nativamente aninhado que usa EXP funções no SQL Server Na memória OLTP
11983358 4094893 CORREÇÃO: Banco de dados não pode ser descartado após seu armazenamento é desconectado e reconectado no SQL Server Serviço do SQL
11983381 4058175 CORREÇÃO: Backup banco de dados habilitado para TDE e as operações de restauração são lentas quando a chave de criptografia é armazenada em um provedor de EKM no SQL Server Segurança do SQL
11983369 4134175 FIX: Um cubo com várias partições de processamento gera muitas conexões de fonte de dados simultâneos no SSAS Serviços de análise
11983357 4091245 CORREÇÃO: Violação de acesso ocorre quando você consulta uma tabela com uma coluna de inteiro em 2017 de SQL Server e SQL Server 2016 Desempenho de SQL
11983366 4101554 CORREÇÃO: Paralelo refazer em uma réplica do secundária de um grupo de disponibilidade que contém tabelas heap gera um despejo de declaração de tempo de execução ou o servidor de SQL falha com um erro de violação de acesso Alta disponibilidade
11983379 4131960 CORREÇÃO: Um erro de declaração ocorre quando você executar uma consulta select aninhada contra um índice de columnstore no SQL Server Desempenho de SQL
11983359 4132267 CORREÇÃO: Implantar um projeto SSAS em SSDT é frequentemente mal sucedido no SQL Server Analysis Services no modo Tabular Serviços de análise
11057341 4052135 CORREÇÃO: Instrução RESTORE HEADERONLY para um TDE compactado backup leva muito tempo para concluir no SQL Server Serviço do SQL
11750742 4098762 CORREÇÃO: Parâmetros ocultos são incluídos nos relatórios quando o papel do navegador é usado em 2016 SSRS O Reporting Services
11983394 4163478 CORREÇÃO: Uma violação de acesso ocorre quando incrementais estatísticas são atualizadas automaticamente em uma tabela no SQL Server Desempenho de SQL

Dentre os mais diversos bugs identificados e corrigidos destaco um relacionado ao bug de número: 11983332, artigo KB: 4133164, relacionada a um erro apresentado quando um trabalho do SQL Server Agent executa um comando do PowerShell para enumerar as permissões do banco de dados.

Vale ressaltar que após a atualização desta nova atualização cumulativa, o número do build utilizado pelo Microsoft SQL Server 2016 SP2 será alterado para compilação: 13.0.5149.0.

Para realizar o download clique na imagem abaixo:

Fontes e Direitos Autorais: Suporte da Microsoft -https://support.microsoft.com/pt-br/help/4135048/cumulative-update-1-for-sql-server-2016-sp2 – 30/05/2018.

Microsoft SQL Server 2016 SP1 – Atualização Cumulativa 9 disponível


A Microsoft disponibilizou para download hoje dia 30/05/2018 a Atualização Cumulativa 9 para SQL Server 2016 SP1.

As informações obtidas através do artigo KB4100997 publicado no site de suporte da Microsoft, esta atualização traz correções decorrentes dos problemas apresentados e identificados após o lançamento do SP1 e das atualizações cumulativas anteriores.

Relação de Atualizações Cumulativas disponíveis para o Microsoft SQL Server 2016 Service Pack 1:

SQL Server 2016 SP1 CU8
SQL Server 2016 SP1 CU7
SQL Server 2016 SP1 CU6
SQL Server 2016 SP1 CU5
SQL Server 2016 SP1 CU4
SQL Server 2016 SP1 CU3
SQL Server 2016 SP1 CU2
SQL Server 2016 SP1 CU1
SQL Server 2016 SP1
SQL Server 2016 all builds

Hotfixes que estão incluídos neste pacote de atualização cumulativa


Número de bug do VSTS Número de artigo do KB Descrição Corrigir a área
11814294 4099472 PFS página melhoria de algoritmo round robin no SQL Server 2016 Serviço do SQL
11231756 4133164 CORREÇÃO: Erro quando um trabalho do SQL Server Agent executa um comando do PowerShell para enumerar as permissões do banco de dados Ferramentas de gerenciamento
11701139 4086173 CORREÇÃO: Violação de acesso ocorre ao executar uma consulta DAX em um modelo tabular no SQL Server Analysis Services Serviços de análise
11814333 4131193 Problemas de desempenho ocorrem sob a forma de PAGELATCH_EX e PAGELATCH_SH espera em TempDB quando você usar o SQL Server 2016 Serviço do SQL
11829791 3028216 CORREÇÃO: Ocorre uma falha quando o cache pró-ativo é desencadeada por uma dimensão no SSAS Serviços de análise
11829056 4135113 CORREÇÃO: Registro de controle de alterações é inconsistente durante uma atualização em uma tabela que tem um índice cluster/exclusivo no SQL Server Serviço do SQL
11918578 4293839 CORREÇÃO: Banco de dados TDE fica offline durante operações de descarga de log quando problemas de conectividade com o provedor EKM tornar-se inacessível no SQL Server Segurança do SQL
11810404 4230730 CORREÇÃO: Uma condição de morto trava ocorre quando você executar uma reconstrução de índice online ou executa um comando de mesclagem no SQL Server Serviço do SQL
11793118 4163478 CORREÇÃO: Uma violação de acesso ocorre quando incrementais estatísticas são atualizadas automaticamente em uma tabela no SQL Server Desempenho de SQL
11923632 4230306 CORREÇÃO: Restauração de um backup compactado TDE é vencida quando usando o cliente VDI Serviço do SQL
11924460 4163087 CORREÇÃO: Desempenho é lento para um sempre na AG quando você processa uma leitura consulta no SQL Server Serviço do SQL
11684528 4164562 CORREÇÃO: Nome de usuário errado aparece quando dois usuários acesse a MDS em momentos diferentes no SQL Server Serviços de qualidade de dados (DQS)
11634113 4094893 CORREÇÃO: Banco de dados não pode ser descartado após seu armazenamento é desconectado e reconectado no SQL Server Serviço do SQL
11708639 4162814 CORREÇÃO: Ocorre uma violação de acesso de exceção interna e o servidor SSAS para de responder Serviços de análise
11801446 4134541 CORREÇÃO: Erro do MDS Add-in para o Excel quando você usar a versão alemã do Excel no SQL Server Serviços de qualidade de dados (DQS)
11637501 4132267 CORREÇÃO: Implantar um projeto SSAS em SSDT é frequentemente mal sucedido no SQL Server Analysis Services no modo Tabular Serviços de análise
11797887 4101554 CORREÇÃO: Paralelo refazer em uma réplica do secundária de um grupo de disponibilidade que contém tabelas heap gera um despejo de declaração de tempo de execução ou o servidor de SQL falha com um erro de violação de acesso Alta disponibilidade
11750742 4098762 CORREÇÃO: Parâmetros ocultos são incluídos nos relatórios quando o papel do navegador é usado em 2016 SSRS O Reporting Services
11830380 4134175 FIX: Um cubo com várias partições de processamento gera muitas conexões de fonte de dados simultâneos no SSAS Serviços de análise
11591371 4091245 CORREÇÃO: Violação de acesso ocorre quando você consulta uma tabela com uma coluna de inteiro em 2017 de SQL Server e SQL Server 2016 Desempenho de SQL
11714686 4094706 FIX: Um thread de trabalho parece ficar depois que outro thread de trabalho é abortado quando você executa uma consulta paralela no SQL Server Serviço do SQL
11953725 4058175 CORREÇÃO: Backup banco de dados habilitado para TDE e as operações de restauração são lentas quando a chave de criptografia é armazenada em um provedor de EKM no SQL Server Serviço do SQL
11833599 4131960 CORREÇÃO: Uma violação de acesso ocorre quando você executar uma consulta select aninhada contra um índice de columnstore no SQL Server Mecanismo do SQL
11676935 4094858 CORREÇÃO: “ocorreu um erro inesperado” quando você usa o DAX medidas em visualizações de mesa poder BI no SQL Server Serviços de análise
11791348 4101502 CORREÇÃO: Backup de banco de dados habilitada a TDE com a compactação causa corrupção de banco de dados no SQL Server 2016 Serviço do SQL

Dentre os mais diversos bugs identificados e corrigidos destaco um relacionado ao bug de número: 11923632, artigo KB: 4230306, que corresponde um erro apresentado durante a restauração de um backup de banco de dados compactado que utiliza criptografia transparente de dados TDE.

Vale ressaltar que após a atualização desta nova atualização cumulativa, o número do build utilizado pelo Microsoft SQL Server 2016 SP1 será alterado para compilação: 13.0.4502.0.

Para realizar o download clique na imagem abaixo:

Fontes e Direitos Autorais: Suporte da Microsoft – https://support.microsoft.com/pt-br/help/4100997/cumulative-update-9-for-sql-server-2016-sp1 – 30/05/2018.