Microsoft SQL Server é um sistema gerenciador de Banco de dados relacional (SGBD) desenvolvido pela Sybase em parceria com a Microsoft.
Esta parceria durou até 1994, com o lançamento da versão para Windows NT e desde então a Microsoft mantém a manutenção do produto.
Como um Banco de dados, é um produto de software cuja principal função é a de armazenar e recuperar dados solicitados por outras aplicações de software, seja aqueles no mesmo computador ou aqueles em execução em outro computador através de uma rede (incluindo a Internet).
Há várias diferentes edições do Microsoft SQL Server destinadas a públicos diferentes e para diferentes cargas de trabalho (variando de pequenas aplicações que armazenam e recuperam dados no mesmo computador, a milhões de usuários e computadores que acessam grandes quantidades de dados a partir da Internet ao mesmo tempo).
Suas linguagens de consulta primárias são Transact-SQL (T-SQL) e ANSI SQL.
Mantido pela Microsoft há anos, é um dos principais SGBDs relacionais do mercado. Distribuído em diferentes edições e com várias ferramentas integradas, esse banco é capaz de atender às demandas desde os mais simples negócios até os mais complexos cenários que lidam com grande volume de dados.
Antigamente o SQL Server era um banco de dados relacional. Essencialmente você armazenava nele dados estruturados no formato tabular (linhas e colunas).
Ele permite a criação de tabelas relacionadas, evitando a necessidade de armazenar dados redundantes em vários locais dentro de um banco de dados. O modelo relacional também fornece integridade referencial e outras restrições de integridade para manter a precisão dos dados. O SQL Server suporta transações, é aderente e suporta os princípios de atomicidade, consistência, isolamento e durabilidade. Serviço do SQL ServerPrincipal FunçãoDatabase EngineArmazenamento de dados OLTPReporting ServicesRelatório de dadosAnalysis ServicesAnálise de dados OLAPIntegration ServicesFluxos de dadosData Quality ServicesLimpeza de dadosMaster Data ServicesRepositório único de dadosReplicaçãoReplicação de dados entre servidores
Arquitetura A camada de protocolo implementa a interface externa para o SQL Server. Todas as operações que podem ser chamadas no SQL Server são comunicadas a ele por meio de um formato definido pela Microsoft, chamado TDS (Tabular Data Stream). TDS é um protocolo da camada de aplicação, usado para transferir dados entre um servidor de banco de dados e um cliente. Inicialmente projetados e desenvolvidos pela Sybase Inc. para seu mecanismo de banco de dados relacional Sybase SQL Server em 1984 e posteriormente pela Microsoft no Microsoft SQL Server, os pacotes TDS podem ser encapsulados em outros protocolos dependentes de transporte físico, incluindo TCP / IP, pipes nomeados e compartilhados memória. Conseqüentemente, o acesso ao SQL Server está disponível nesses protocolos. Além disso, a API do SQL Server também é exposta em serviços da web.
Armazenamento de dados O armazenamento de dados é um banco de dados, que é uma coleção de tabelas com colunas digitadas. O SQL Server suporta diferentes tipos de dados, incluindo tipos primitivos como Integer, Float, Decimal, Char (incluindo cadeias de caracteres), Varchar (cadeias de caracteres de comprimento variável), binário (para blobs de dados não estruturados), Text (para dados textuais) entre outros. . O arredondamento de floats para inteiros usa Rounding Aritmético Simétrico ou Round Redondo Simétrico (correção) dependendo dos argumentos:
Round SELECT (2.5, 0) dá 3.
O Microsoft SQL Server também permite que os tipos compostos definidos pelo usuário (UDTs) sejam definidos e usados. Ele também disponibiliza estatísticas do servidor como tabelas e exibições virtuais (chamadas DMVs ou Visualizações de Gerenciamento Dinâmico). Além das tabelas, um banco de dados também pode conter outros objetos, incluindo exibições, procedimentos armazenados, índices e restrições, juntamente com um log de transações. Um banco de dados do SQL Server pode conter no máximo 231 objetos e pode abranger vários arquivos no nível do SO com um tamanho máximo de arquivo de 260 bytes (1 exabyte). Os dados no banco de dados são armazenados em arquivos de dados primários com uma extensão .mdf. Os arquivos de dados secundários, identificados com uma extensão .ndf, são usados para permitir que os dados de um único banco de dados sejam distribuídos em mais de um arquivo e, opcionalmente, em mais de um sistema de arquivos. Os arquivos de log são identificados com a extensão .ldf.
O espaço de armazenamento alocado a um banco de dados é dividido em páginas numeradas sequencialmente, cada uma com 8 KB de tamanho. Uma página é a unidade básica de E / S para operações do SQL Server. Uma página é marcada com um cabeçalho de 96 bytes que armazena metadados sobre a página, incluindo o número da página, o tipo de página, o espaço livre na página e o ID do objeto que a possui. O tipo de página define os dados contidos na página: dados armazenados no banco de dados, índice, mapa de alocação que contém informações sobre como as páginas são alocadas a tabelas e índices, mapa de alterações que contém informações sobre as alterações feitas em outras páginas desde o último backup ou registro ou contém tipos de dados grandes, como imagem ou texto. Enquanto página é a unidade básica de uma operação de E / S, o espaço é realmente gerenciado em termos de uma extensão que consiste em 8 páginas. Um objeto de banco de dados pode abranger todas as 8 páginas em uma extensão ("extensão uniforme") ou compartilhar uma extensão com até mais 7 objetos ("extensão mista"). Uma linha em uma tabela de banco de dados não pode abranger mais de uma página, portanto, é limitada a 8 KB de tamanho. No entanto, se os dados excederem 8 KB e a linha contiver dados varchar ou varbinary, os dados nessas colunas serão movidos para uma nova página (ou possivelmente uma sequência de páginas, denominada unidade de alocação) e substituídos por um ponteiro para os dados.
Para o armazenamento físico de uma tabela, suas linhas são divididas em uma série de partições (numeradas de 1 a n). O tamanho da partição é definido pelo usuário; Por padrão, todas as linhas estão em uma única partição. Uma tabela é dividida em várias partições para distribuir um banco de dados por um cluster de computador. As linhas em cada partição são armazenadas na estrutura B-tree ou heap. Se a tabela tiver um índice clusterizado associado para permitir a rápida recuperação de linhas, as linhas serão armazenadas em ordem de acordo com seus valores de índice, com uma árvore B fornecendo o índice. Os dados estão no nó folha das folhas e outros nós armazenam os valores de índice para os dados foliares alcançáveis a partir dos respectivos nós. Se o índice não estiver em cluster, as linhas não serão classificadas de acordo com as chaves do índice. Uma exibição indexada tem a mesma estrutura de armazenamento que uma tabela indexada. Uma tabela sem um índice clusterizado é armazenada em uma estrutura de heap não-ordenada. No entanto, a tabela pode ter índices não agrupados para permitir a recuperação rápida de linhas. Em algumas situações, a estrutura de heap possui vantagens de desempenho em relação à estrutura em cluster. Ambas as pilhas e árvores B podem abranger várias unidades de alocação.
Gerenciamento de buffers O SQL Server armazena em buffer páginas na RAM para minimizar a E / S do disco. Qualquer página de 8 KB pode ser armazenada em buffer na memória, e o conjunto de todas as páginas atualmente armazenadas em buffer é chamado de cache de buffer. A quantidade de memória disponível para o SQL Server decide quantas páginas serão armazenadas em cache na memória. O cache de buffer é gerenciado pelo Gerenciador de Buffer. Ler ou gravar em qualquer página copia para o cache do buffer. Leituras subseqüentes ou gravações são redirecionadas para a cópia na memória, em vez da versão no disco. A página é atualizada no disco pelo Gerenciador de Buffer apenas se o cache na memória não for referenciado por algum tempo. Ao gravar as páginas no disco, a E / S assíncrona é usada, por meio da qual a operação de E / S é feita em um encadeamento secundário, para que outras operações não precisem aguardar a conclusão da operação de E / S. Cada página é escrita junto com sua soma de verificação quando está escrita. Ao ler a página de volta, sua soma de verificação é computada novamente e combinada com a versão armazenada para garantir que a página não tenha sido danificada ou adulterada nesse meio tempo.
Concorrência e bloqueio O SQL Server permite que vários clientes usem o mesmo banco de dados simultaneamente. Como tal, ele precisa controlar o acesso simultâneo aos dados compartilhados, para garantir a integridade dos dados - quando vários clientes atualizam os mesmos dados ou os clientes tentam ler dados que estão em processo de serem alterados por outro cliente. O SQL Server fornece dois modos de controle de simultaneidade: simultaneidade pessimista e simultaneidade otimista. Quando o controle de concorrência pessimista está sendo usado, o SQL Server controla o acesso simultâneo usando bloqueios. Os bloqueios podem ser compartilhados ou exclusivos. Bloqueio exclusivo concede ao usuário acesso exclusivo aos dados - nenhum outro usuário pode acessar os dados, desde que o bloqueio seja mantido. Os bloqueios compartilhados são usados quando alguns dados estão sendo lidos - vários usuários podem ler dados bloqueados com um bloqueio compartilhado, mas não adquirir um bloqueio exclusivo. O último teria que esperar que todos os bloqueios compartilhados fossem liberados.
Os bloqueios podem ser aplicados em diferentes níveis de granularidade - em tabelas inteiras, páginas ou até mesmo em linhas por linhas nas tabelas. Para índices, pode estar no índice inteiro ou nas folhas de índice. O nível de granularidade a ser utilizado é definido por banco de dados pelo administrador do banco de dados. Embora um sistema de bloqueio refinado permita que mais usuários usem a tabela ou o índice simultaneamente, ele requer mais recursos, portanto, não gera automaticamente um desempenho mais alto. O SQL Server também inclui mais duas soluções leves de exclusão mútua - travas e spinlocks - que são menos robustas que os bloqueios, mas consomem menos recursos. O SQL Server os usa para DMVs e outros recursos que geralmente não estão ocupados. O SQL Server também monitora todos os threads de trabalho que adquirem bloqueios para garantir que eles não acabem em deadlocks - caso isso aconteça, o SQL Server adota medidas corretivas, que em muitos casos matam um dos threads emaranhados em um deadlock e o rollback a transação começou. Para implementar o bloqueio, o SQL Server contém o Gerenciador de Bloqueio. O Gerenciador de Bloqueio mantém uma tabela na memória que gerencia os objetos e bloqueios do banco de dados, se houver, neles junto com outros metadados sobre o bloqueio. O acesso a qualquer objeto compartilhado é mediado pelo gerenciador de bloqueio, que concede acesso ao recurso ou o bloqueia.