@05 – O que Acontece?

Olá, bom dia. 

Tudo bem? Espero que você que acompanha o meu blog ou esta acessando pela primeira vez possa estar bem.

Estamos iniciando o mês de agosto, o ano já esta entrando em sua reta final. 

Para começar o oitavo mês de 2022, nada melhor que um simples post relacionado ao Microsoft SQL Server, não é mesmo?

Eu sou suspeito a dizer.

Seja bem-vindo ao @05 – O que Acontece? 

Seguindo a tradição, antes de apresentar o quinto post, quero destacar alguns pontos sobre esta sessão, em especial o tipo de conteúdo que você leitor vai encontrar em cada post relacionado a ela:

1 – Os posts publicados nesta sessão envolvem um pouco do Micrososft SQL Server, na verdade o objetivo dela é tentar mostrar como ele SQL Server, o qual aqui eu vou denominar como caixa, pensa exclusivamente fora dela, ou seja, como este grandioso SGBD (Sistema Gerenciador de Banco de Dados) faz para que tenhamos nossos dados armazenados e apresentados em tela, em adicional como podemos de uma forma simples aprender, conhecer, desvendar os comportamentos realizados por ele além do uso das habituais ferramentas de administração: SQL Server Management Studio ou Azure Data Studio.

2 – Os posts, não apresentam o objetivo de demonstrar recursos, comandos, funcionalidades ou ensinar algo novo, na verdade eu quero tentar mostrar o que acontece muitas vezes quando por exemplo você esta processando um simples comando Select buscando milhões de dados em uma tabela, e o SQL Server Management Studio vai apresentando aos poucos os registros. Serão exclusivamente estes cenários, comportamentos e formas de atuação envolvendo o SQL Server e o ambiente que ele se encontra;

3 – Os posts, não terão uma estrutura padrão, na verdade, O que Acontece, foi idealizado da mesma forma que inicialmente começamos a pensar. Vamos reunindo conhecimentos, ideias, possibilidades, hipóteses, analisando alternativas, mensurando teorias, até tentar construir algo mais concreto;

4 – Não será estabelecido um calendário de publicação, ao contrário, sempre que algum pensamento fora da caixa pairar sobre a minha cabeça, ou coisas do meu dia-a-dia relacionados as minhas experiências profissionais ou acadêmicas, novos posts serão publicados, bem como, os atuais atualizados e corrigidos;

5 – Não vou me ater ao certo ou errado, melhor ou pior, tecnicamente perfeito ou melhor tecnicamente, o que eu quero é tentar como eu já destaquei ilustrar o que acontece do lado de fora do SQL Server, o que ele muitas vezes esta realizando e não temos ideia do que está acontecendo; e

6 – Vou tentar em cada post trazer uma ferramenta, aplicativo ou utilitário existente no próprio sistema operacional que possa nos ajudar a observar e entender o que está acontecendo de preferência em tempo real, em adicional, se possível utilizarei vídeos para elucidar de forma mais didática o objetivo do post.

Vamos começar nossa aventura

Seja mais uma vez bem-vindo ao @05 – O que Acontece – Quais as diretivas set definidas de forma padrão ao iniciarmos uma nova query ou transação no Microsoft SQL Server!

Pensar no conteúdo de um novo post de acordo com sua respectiva sessão não é uma atividade que posso considerar como algo simples. Idealizar o conteúdo, imaginar o que pode ser compartilhado requer uma certa habilidade, algo que particularmente dizendo eu não tenho, bem como, não sei fazer isso facilmente, demoro vários dias para conseguir concretizar, mas estou sempre tentando.

De uma hora para outra a minha mente começa a juntar um pouco do conhecimento, experiência, pensamentos meio loucos, enfim, vou formulando alguns hipóteses, afim de tentar contextualizar mesmo que de forma vaga um rascunho.

Hoje não foi diferente, acordei como de costume bem cedinho, pensando, pensando, até encontrar algum assunto mesmo que possa parecer simples, mas que ao mesmo tempo traga novos conhecimentos ou possa responder alguma dúvida.

Neste momento estava surgindo o quinto post da sessão O que Acontece.


Comando ou Instruções SET. Eu prefiro chamar de diretivas

Dentre os mais diversos comandos e instruções existentes na linguagem Transact-SQL a qual existe de forma única e exclusiva no Microsoft SQL Server, o comando, instrução ou diretivas SET, tem como finalidade orientar de forma rápida como o SQL Server deverá agir a partir de um determinado momento no ciclo de processamento o qual esta sendo envolvido.

Por padrão estes comando ou instruções, quando processadas implementam em tempo de execução as chamadas alterações comportamentais na sessão que estas foram processadas, estas alterações podem variar desde:

  1. Alteração no formato de apresentação da data;
  2. Identificação de valores nulos;
  3. Contagem de linhas processadas; e
  4. Apresentação ou não de erros aritméticos; entre outros.

Uma variedade de mudanças comportamentais podem ser realizadas, afim de se obter uma nova forma de processamento, com objetivos distintos em ambientes de teste, validação e treinamento.

De forma padronizada, ao inicializarmos o serviço do SQL Server, abrirmos uma nova query ou transações, algumas destas diretivas são novamente aplicadas, estabelecidas dentro do conjunto default de comandos ou instruções SET definidas para serem utilizadas pelo Database Engine.

Agora que sabemos um pouco mais sobre a importância destas diretivas, podemos avançar no objetivo deste post, o qual visa apresentar quais são os comandos, instruções ou diretivas padrões estabelecidas para cada query ou sessão que iniciamos.

Você sabe quais seriam estas diretivas? O que cada uma delas faz? Dizer que eu me lembro de exatamente todas estarei mentindo!

Então, vamos lá, chegou a hora de descobrir o conjunto padrão de diretivas e a sua finalidade. Meu ambiente de estudo atual faz uso do Microsoft SQL Server 2019 Entreprise Edition com a cumulative update 16.

Observação: Caso você não tenha aplicada esta última atualizado do Microsoft SQL Server 2019, poderá facilmente acessar a minha página de updates, a qual, contendo todas as principais atualizações disponíveis para todas as versões do Microsoft SQL Server.


As diretivas SETs padrões no Microsoft SQL Server 2019 CU16

A partir do momento em que inicializamos uma nova query ou sessão, o SQL Server nos apresenta uma novo ambiente para implementação de diversas rotinas de manipulação, desenvolvimento e administração.

Através da ferramenta Microsoft SQL Server Profile, temos um ambiente de monitoramente em tempo real aplicado diretamente ao nosso servidor, instância, banco de dados ou query que estamos trabalhando neste momento.

Dica: Caso queira conhecer mais sobre como criar uma nova query em tempo real realizar seu monitoramento, acesse: https://pedrogalvaojunior.wordpress.com/2020/08/01/02-o-que-acontece/

Foi através desta poderosa ferramenta, que de forma rápida, simples e de fácil compreensão obtive acesso a relação de diretivas SETs padrões definidas para a minha instância do SQL Server, totalizando o número de 13 comandos executados na inicialização de uma nova query, na camada de rede definida como canal de comunição entre o SQL Server e seu ambiente de execução.

A Figura 1 abaixo ilustra este conjunto de diretivas:

Figura1-Oqueacontece5

Figura 1- Relação padrão de diretivas set.

Na sequência destaco uma breve descrição de cada diretiva, de acordo com o status de ativação/desativação da mesma:

  1. Set Quoted_Identifier OnOrienta o SQL Server na utilização das aspas como delimitador de caracteres literais, estabelecendo as aspas como formas de identificar valores textos ou strings dentro do conjunto de aspas simples ou duplas, ao usar o valor ON, os identificadores podem ser delimitados por aspas duplas (” “) e os literais por aspas simples (‘ ‘).
     
  2. Set Arithabort OffDefine o encerramento ou não de uma query, na decorrência do estouro ou erro de divisão por zero durante seu processamento. Ao se utilizar o status OFF, o SQL Server retornar uma mensagem de aviso, retornando como resultado do processamento da operação aritmética NULL, caso algum erro venha a ocorrer.

  3. Set Numeric_RoundAbort Off -  Define o nível de geração ou não de relatórios de erros relacionados ao arrendomento de valores numéricos, como forma de se controlar possíveis perdas recorrentes a exatidão no reconhecimento e exibição valores decimais. Ao se utilizar o status OFF, indica que o SQL Server não deverá apresentar mensagens ou gerar relatórios de erros em decorrência da perda de exatidão para arredondamento de valores numéricos.

  4. Set Ansi_Warnings On Define o comportamento padrão em relação as condições para apresentação ou não de erros. Ao se utilizar o status ON, as funções de agregação SUM, AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP ou COUNT poderão apresentar mensagem de erro em decorrência do seu processamento mediante a manipulação dos valores, relacionados ao estouro resultado de operações aritméticas, divisão por zero, ou uso de valores caracteres em conjunto com valores numéricos.
     
  5. Set Ansi_Padding OnOrienta na maneira como as colunas existentes em uma tabela devem armazenar valores menores em relação ao seu tamanho mínimo definido na momento da sua criação, respeitando os espaços em branco à direita para os tipos de dados char, varchar, binary e varbinary. Ao se utilizar o status ON, os espaços em branco à direita em valores de caractere inseridos em colunas varchar não são cortados. Os zeros à direita em valores binários inseridos em colunas varbinary não são cortados. Os valores não são preenchidos com o tamanho da coluna.
     
  6. Set Ansi_Nulls OnDefine o comportamento em relação aos operadores Igual a (=) e Diferente de (<>) quando os mesmos estão sendo aplicados na comparação de valores nulos. Ao se utilizar o status ON, poderá provocar o retorno de nenhuma linha como forma de resultado durante o processamento do comando Select, mesmo que possa existir a presença de linhas de registros com o valor nulo.

  7. Set Concat_Null_Yields_Null OnOrienta o SQL Server na maneira de se controlar a concatenação de valores em relação ao uso de nulos ou vazios. Ao se utilizar o status ON, o SQL Server retornará valores nulos na ocorrência da concatenação entre um valor nulo em conjunto com uma cadeia de caracteres, neste caso o NULL tem uma precedência maior.

  8. Set Cursor_Close_On_Commit OffEstabelece a forma de controle para se encerrar um cursos ao final da transação ao qual o mesmo esta relacionado. Ao se utilizar o status OFF, uma instrução Rollback deverá fechar apenas cursores assíncronos que estejam abertos e não possuam registros.
     
  9. Set Implicit_Transactions OffDefine o uso do comando Begin Transaction de forma implícita na query, sessão ou transação a ser processada. Ao se utilizar o status OFF, todas as transações anteriores a transação atual a ser processada, são delimitadas por instruções Begin Transaction e Commit Transaction não visíveis, ou seja, a transação é automaticamente confirmada ao final do seu bloco de processamento.
     
  10. Set Language US_EnglishDefine a linguagem “idioma” a ser utilizada pelo SQL Server na query ou sessão atual. Ao se utilizar o valor US_English estamos definindo a linguagem Inglês dos Estados Unidos como idioma a ser utilizado.
     
  11. Set DateFormat MDYDefine o formato de apresentação para valores do tipo de dados data. Ao seu utilizar o valor MDY, estamos definindo como forma de apresentado mês, dia e ano, o qual substituirá a configuração utilizada atualmente em relação a linguage definida na query ou sessão.
     
  12. Set DateFirst 7Determina qual será o primeiro dia da semana a ser utilizado de acordo com o valor numérico informado. Ao se utilizar o valor 7, estamos definindo o domingo como dia inicial da semana.
     
  13. Set Transaction Isolation Level Read CommittedEstabelece a forma de controle relacionado ao bloqueio e compartilhamento de dados, tabelas e recursos que possam estar querendo ter acesso ou manipular objetos já em uso por outras sessões ou transações. Ao se utilizar o valor Read Committed, o SQL Server define como as instruções não poderão realizar a leitura de dados que estão ou foram modificados no presente momento, mas que ainda não estão de forma oficial confirmados como dados alterados por outras transações, desta forma, impondo um controle para se evitar a ocorrência das chamadas leituras sujas, bem como, a presença de dados fantasmas.

Importante: Na cor azul estão apresentandos os comandos, instruções e diretivas SET e na cor vermelha o estado ou valor padrão aplicado de acordo com o meu ambiente de testes.


Desta forma, chegamos ao final do @05 – O que Acontece – Quais as diretivas SET definidas de forma padrão ao iniciarmos uma nova query no Microsoft SQL Server!

Espero que este conteúdo conceitual possa ser útil, o qual teve o objetivo de apresentar, o que acontece, mais especificamente quais seriam as diretivas SETs estabelecidas de forma padrão pelo SQL Server no momento da criação de uma nova query.

E aí gostou deste post? Espero que sim.


Mais uma vez obrigado por sua visita, aproveite para acessar as outras sessões existentes no meu blog.

Um forte abraço