0% acharam este documento útil (0 voto)
0 visualizações3 páginas

sql_server_topics_extended

O documento explora estratégias avançadas de otimização, segurança e arquitetura no SQL Server, focando em aspectos como índices Columnstore, Row-Level Security, tuning de planos de execução e gerenciamento do TempDB. Ele fornece orientações técnicas para administradores de banco de dados visando maximizar a performance e segurança das instâncias. Além disso, aborda o impacto do Read Committed Snapshot Isolation na concorrência e no desempenho do sistema.

Enviado por

philipanalytic
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
0 visualizações3 páginas

sql_server_topics_extended

O documento explora estratégias avançadas de otimização, segurança e arquitetura no SQL Server, focando em aspectos como índices Columnstore, Row-Level Security, tuning de planos de execução e gerenciamento do TempDB. Ele fornece orientações técnicas para administradores de banco de dados visando maximizar a performance e segurança das instâncias. Além disso, aborda o impacto do Read Committed Snapshot Isolation na concorrência e no desempenho do sistema.

Enviado por

philipanalytic
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Guia Definitivo: Tópicos Avançados e

Tuning no SQL Server

Este documento apresenta uma análise profunda sobre estratégias de otimização, segurança e
arquitetura exclusivamente dentro do ambiente do SQL Server. O objetivo é fornecer conhecimento
técnico validado para administradores de banco de dados e engenheiros de dados que buscam extrair o
máximo de performance de suas instâncias.

1. Arquitetura e Otimização de Índices Columnstore

Os índices Columnstore revolucionaram o processamento de cargas de trabalho analíticas (OLAP) no


SQL Server. Diferente do armazenamento tradicional baseado em linhas (Rowstore), os dados são
logicamente organizados em tabelas com linhas e colunas, mas fisicamente armazenados em um
formato de dados colunar. Isso permite altíssimas taxas de compressão e o uso do processamento em
modo de lote (Batch Mode Execution), onde o motor processa múltiplas linhas simultaneamente,
reduzindo drasticamente o uso de CPU.

Um conceito vital para o DBA é o entendimento do Deltastore e do processo Tuple Mover. Quando
inserções ocorrem em tabelas com índices Columnstore, pequenos lotes (menos de 102.400 linhas) não
são comprimidos imediatamente. Eles vão para o Deltastore, que é estruturado internamente como um
índice B-Tree tradicional. Somente quando esse grupo atinge o limite ideal (geralmente 1.048.576
linhas), um processo em segundo plano (Tuple Mover) entra em ação para comprimir esses dados em
um Rowgroup fechado e altamente comprimido.

A fragmentação ocorre quando linhas são deletadas (marcadas logicamente nos deleted bitmaps) ou
quando muitos pequenos rowgroups são criados. A manutenção contínua exige a execução periódica de
ALTER INDEX REBUILD ou ALTER INDEX REORGANIZE para forçar a consolidação dos dados e a
limpeza física dos registros excluídos, garantindo que o motor não precise ler blocos inúteis durante o
Scan.

2. Engenharia de Segurança com Row-Level Security


(RLS)

O Row-Level Security (RLS) permite o controle de acesso granular ao nível da linha, diretamente na
camada do SQL Server, eliminando a necessidade de lógica de segurança no aplicativo cliente. A
implementação depende da criação de Funções de Valor de Tabela Inline (iTVF) vinculadas a uma
Política de Segurança (Security Policy).

Existem dois tipos principais de predicados no RLS: Filter Predicates e Block Predicates. Os Filter
Predicates filtram silenciosamente as linhas disponíveis para leitura (operações de SELECT, UPDATE e
DELETE). Já os Block Predicates bloqueiam proativamente operações de gravação (INSERT, UPDATE,
DELETE) que violem as regras da política, disparando um erro explícito.

Apesar da robustez, o RLS exige atenção ao desempenho. Funções muito complexas, com múltiplos
JOINs, executadas para cada linha avaliada, podem causar lentidão massiva. Além disso,
administradores devem estar cientes de vulnerabilidades como Side-Channel Attacks. Um usuário mal-
intencionado pode escrever consultas propositais que geram erros (como divisão por zero) para inferir a
existência de dados aos quais ele não tem acesso. O cuidado na construção do schema de segurança e
na tipagem de dados é fundamental.

3. Análise Avançada e Tuning de Planos de Execução

A otimização de consultas (Query Tuning) começa na leitura adequada dos planos de execução.
Gargalos clássicos incluem Index Scans desnecessários e operações de Key Lookup. O Key Lookup
ocorre quando um índice não clusterizado é usado para localizar as linhas, mas não contém (não
"cobre") todas as colunas solicitadas no SELECT. O SQL Server é obrigado a fazer um salto
dispendioso até o índice clusterizado (a tabela real) para buscar os dados faltantes. A solução
geralmente envolve criar Covering Indexes através da cláusula INCLUDE .

Um problema persistente em ambientes OLTP é o Parameter Sniffing. O SQL Server compila e faz
cache do plano de execução com base no primeiro conjunto de parâmetros fornecidos. Se os
parâmetros subsequentes possuírem uma cardinalidade muito diferente (por exemplo, buscando
milhões de linhas em vez de apenas dez), o plano em cache pode ser desastroso. Técnicas de
mitigação envolvem o uso das dicas OPTION (RECOMPILE) , OPTION (OPTIMIZE FOR UNKNOWN)
ou a modularização das consultas.

Outra regra vital é a Sargability (Search-Argument-Able). Aplicar funções a colunas na cláusula


WHERE (ex: WHERE YEAR(DataVenda) = 2023 ) impossibilita o SQL Server de usar índices de
forma eficiente (Seek), forçando um Scan completo. A reescrita otimizada seria WHERE DataVenda >=
'2023-01-01' AND DataVenda < '2024-01-01' .

4. Arquitetura, Contenção e Escalabilidade do TempDB

O TempDB é o "espaço de rascunho" global do SQL Server. Ele armazena tabelas temporárias,
variáveis de tabela, cursores, e também abriga processos internos pesados, como operações de hash,
sorts que excedem a memória (Spill to TempDB) e o Version Store. Em instâncias de alta carga, a
alocação rápida de pequenos objetos gera contenção estrutural severa nas páginas GAM (Global
Allocation Map), SGAM (Shared Global Allocation Map) e PFS (Page Free Space).

O sintoma clássico dessa contenção é a escalada de waits do tipo PAGELATCH_UP ou


PAGELATCH_EX em páginas do sistema. A arquitetura correta exige a pré-alocação de múltiplos
arquivos de dados (normalmente na proporção de 1 arquivo para cada núcleo lógico, até o limite de 8,
escalando conforme a necessidade). Todos os arquivos de dados do TempDB devem possuir
rigorosamente o mesmo tamanho inicial e a mesma configuração de Autogrowth. Isso permite que
o SQL Server distribua gravações equitativamente em todos os arquivos usando o algoritmo
Proportional Fill. Historicamente (antes do SQL Server 2016), isso exigia a ativação das Trace Flags
1117 e 1118, que agora já são comportamentos nativos do motor.

5. Concorrência e Isolamento: O Impacto do RCSI

O controle de concorrência é a espinha dorsal de um banco relacional transacional. O nível de


isolamento padrão, READ COMMITTED , utiliza bloqueios pessimistas: leitores bloqueiam escritores e
escritores bloqueiam leitores, causando deadlocks frequentes e lentidão sistêmica.

A ativação do Read Committed Snapshot Isolation (RCSI) muda para um modelo otimista. Quando
ativado, o SQL Server armazena silenciosamente as versões anteriores das linhas no Version Store
(dentro do TempDB) no exato momento em que um UPDATE ou DELETE começa. Consultas de leitura
concorrentes acessam a última versão confirmada dos dados no TempDB sem sofrer bloqueios. O lema
do RCSI é: "Leitores não bloqueiam escritores e escritores não bloqueiam leitores".

Apesar do benefício incrível para a vazão de dados, o RCSI não é "gratuito". Ele adiciona um custo de
14 bytes a cada registro na tabela para apontar para o Version Store, e aumenta significativamente a
carga de I/O sobre os discos que hospedam o TempDB. Monitorar o crescimento do TempDB e o tempo
de resposta do disco torna-se obrigatório após a ativação.

Você também pode gostar