SQL Server 2008

Novidades

Randy Dyess

 

Visão geral:

  • Gerenciamento mais poderoso
  • Desempenho e escalabilidade aprimorados
  • Mais segurança e disponibilidade
  • Alterações para desenvolvedores

Novamente, a Microsoft lançou uma nova versão do SQL Server que promete melhorar a vida dos administradores de banco de dados. A versão mais recente é o SQL Server 2008, e oferece uma grande variedade de novos

recursos e funcionalidades que transformarão a administração em uma tarefa muito melhor.

Os administradores de banco de dados que têm usado o SQL Server® 2005 por qualquer período de tempo encontrarão muitos dos recursos utilizados em seus trabalhos diários, mas logo descobrirão também que essas ferramentas familiares foram aperfeiçoadas no SQL Server 2008. A nova funcionalidade criada com base nos recursos existentes percorre um longo caminho para a redução do número de soluções alternativas ou personalizações uma vez necessárias para a utilização de vários recursos em ambientes de banco de dados complexos.

Os novos recursos do SQL Server 2008 envolvem um amplo intervalo de cargos de trabalho de banco de dados, dificultando sua categorização. Como eu classifico recursos em diferentes tópicos, percebi que alguns leitores poderão querer saber por que coloquei o Recurso X na Categoria Y quando ele claramente pertence à Categoria Z. É uma questão de perspectiva, afetada pela forma como a sua empresa trabalha.

Eu compreendo que quem trabalha com bancos de dados quase sempre se vê em diferentes cargos de trabalho, mas tentarei dividir os novos recursos para que eles se encaixem nas seguintes categorias genéricas: gerenciamento, escalabilidade, desempenho, alta disponibilidade, segurança, desenvolvimento e business intelligence.

O que há de novo em gerenciamento?

Para os administradores de banco de dados (como eu), a funcionalidade de gerenciamento adicional torna o SQL Server 2008 um novo produto bem interessante. O novo gerenciamento de diretivas, os diversos recursos de consulta de servidor, os servidores de configuração e o data collector/management warehouse oferecem capacidades novas e poderosas para administradores de banco de dados que quase sempre são responsáveis pelo gerenciamento de ambientes de banco de dados grandes e complexos, com centenas ou milhares de bancos de dados em dezenas ou até em centenas de servidores.

O recurso Gerenciamento de Diretivas do SQL Server 2008, que, na verdade, foi chamado de Declarative Management Framework nas CTPs (Community Technology Previews), permite a você criar e executar diretivas de configuração em um ou mais servidores de banco de dados. Com essas diretivas, você pode garantir que configurações padrão sejam aplicadas e mantidas em cada um dos servidores e bancos de dados de destino. Você pode ver um exemplo desse recurso na Figura 1.

Figure 1 A diretiva de melhores práticas de local de dados e de arquivos de log

Figure 1** A diretiva de melhores práticas de local de dados e de arquivos de log **(Clique na imagem para aumentar a exibição)

As diretivas são criadas a partir de conjuntos predefinidos de facetas. Cada faceta contém um subgrupo de configurações do SQL Server 2008 e de outros eventos que você pode controlar. Emparelhe essas facetas com condições para criar uma diretiva. As condições são os valores permitidos para as propriedades de uma faceta, das configurações ou de outros eventos contidos nelas.

As condições também são valores usados para filtros de diretivas. Digamos que você queira que a diretiva seja executada somente em certo banco de dados. Nesse caso, é possível criar uma condição que contenha o nome do banco de dados e adicioná-la à diretiva. Dessa forma, a diretiva só se aplicará a esse único banco de dados. Confie em mim — o Gerenciamento de Diretivas do SQL Server 2008 pode soar complexo, mas depois de experimentá-lo, você perceberá que ele é bem intuitivo.

Os novos recursos Multiple Server Interaction e Configuration Servers são úteis quando você precisa executar consultas em diversos servidores ao mesmo tempo. Você pode registrar servidores em seu Management Studio e depois agrupá-los. Quando for necessário executar uma diretiva ou consulta em todos os servidores do agrupamento, bastará clicar com o botão direito do mouse no agrupamento.

Como um benefício adicional, você pode configurar esse recurso para que ele retorne um conjunto de resultados por servidor ou mescle todos eles em um conjunto de resultados maior. Também é possível especificar se você deseja que os nomes do servidor e do banco de dados façam parte dos resultados para poder separar os resultados individuais de cada servidor. Ser capaz de armazenar os servidores registrados no servidor de configuração em vez de cada Management Studio individual é uma grande vantagem.

Outro bom recurso de gerenciamento é o Data Collector. Com freqüência, os administradores de banco de dados precisam coletar dados de gerenciamento de um grande número de servidores, e muitos desses DBAs criaram sua própria solução personalizada para isso. O Data Collector é um mecanismo interno que facilita a tarefa de coleta de dados relacionados ao gerenciamento. Ele permite que você utilize o SQL Server Agent e o SSIS (SQL Server Integration Services) para criar uma estrutura que coleta e armazena seus dados, além de oferecer manipulação de erros, auditoria e histórico de coleta.

Ao contrário de ferramentas de terceiros e de trabalhos personalizados, o Data Collector será facilmente compreendido pela maioria dos administradores de banco de dados, uma vez que utiliza o SQL Server Agent e o SSIS para criar um conjunto de trabalhos e de pacotes para manipular as conexões, a coleta e o armazenamento de dados (como você pode ver na Figura 2). Quando esses dados forem armazenados em um local central, conhecido como o Management Warehouse, poderão ser exibidos e organizados por meio de um conjunto de instruções T-SQL e de relatórios do SQL Server 2008 Reporting Services. Esse armazenamento central de dados facilita muito a análise e a exibição das métricas gerais de gerenciamento do ambiente de banco de dados.

Figure 2 O arquivo de log de uso de disco do Data Collector

Figure 2** O arquivo de log de uso de disco do Data Collector **(Clique na imagem para aumentar a exibição)

O que há de novo em escalabilidade?

Ao longo dos anos, administradores de banco de dados SQL Server viram seus ambientes de banco de dados se tornarem cada vez maiores. À medida que o tamanho do seu ambiente de banco de dados aumenta, você precisa de novos métodos e ferramentas para obter a escalabilidade exigida pela maioria das empresas. O SQL Server 2008 apresenta diversos recursos novos que serão muito úteis.

O SQL Server 2008 possui compactação interna para os arquivos do banco de dados e para os arquivos do log de transações associados ao banco de dados correspondente. O SQL Server 2005 apresentou o recurso de compactar dados em um arquivo ou grupo de arquivos somente leitura, mas ele simplesmente utilizava o recurso de compactação do NTFS do Windows®. Com o SQL Server 2008, agora você pode obter a compactação em nível de linha e em nível de página, oferecendo benefícios que não podem ser obtidos com a compactação no nível do arquivo de dados.

A compactação nos níveis de linha e de página reduz o tamanho do espaço de dados necessário, além de reduzir a quantidade de memória necessária, já que os dados permanecem compactados na memória. Os dados compactados na memória resulta em maior utilização da memória, beneficiando a escalabilidade de vários sistemas.

O SQL Server 2008 também apresenta a compactação em nível de backup. Embora os backups de banco de dados só incluam a parte ativa do banco de dados, isso ainda representa centenas de gigabytes ou até mesmo dezenas de terabytes. Em ambientes de banco de dados que possuem mais de uma cópia de um arquivo de backup com vários terabytes, esses backups quase sempre ocupam um valioso espaço de armazenamento que poderia ser usado de forma mais eficiente. Ao permitir que administradores de banco de dados compactem seus arquivos de backup, o SQL Server 2008 libera um pouco desse espaço para que ele possa ser usado para dados dinâmicos.

E há também o Resource Governor. Esse novo recurso permite que você defina os valores de recursos que cargas de trabalho ou agrupamentos de cargas de trabalho poderão usar durante a execução. Com o Resource Governor, você pode criar um ambiente no qual diversas cargas de trabalho diferentes coexistirão em um servidor sem temer que uma ou mais delas sobrecarregue o servidor e reduza o desempenho das outras cargas de trabalho.

A vantagem desse recurso é que você pode usar com mais eficiência a quantidade total de recursos disponíveis em seus servidores de banco de dados. A Figura 3 mostra um exemplo da utilização do Resource Governor para limitar a atividade em um servidor.

Figure 3 Limit activity with the Resource Governor

USE master
go

--Drop function
IF OBJECT_ID('rgclassifier_demo','Function') IS NOT NULL
DROP FUNCTION rgclassifier_demo
go

--Create a classifier function for report group
CREATE FUNCTION rgclassifier_demo() RETURNS SYSNAME 
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @group_name AS SYSNAME
  IF (USER_NAME() LIKE '%Launch_Demo%')
         SET @group_name = 'demogroup'
    RETURN @group_name
END
GO

--Drop workload group for anything coming from Management Studio
IF EXISTS (SELECT name FROM sys.resource_governor_workload_groups 
  WHERE name = 'demogroup')
BEGIN
  DROP WORKLOAD GROUP demogroup
END
GO

--Create workload group
CREATE WORKLOAD GROUP demogroup
GO

--Register the classifier function with 
--Resource Governor
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_demo)
GO

--Alter the dbogroup workload group to only 
--allow 10% of CPU for each workload request 
ALTER WORKLOAD GROUP demogroup
WITH (REQUEST_MAX_CPU_TIME_SEC = 10)
GO

--Create a new resource pool and set a maximum CPU limit for all workloads.
IF EXISTS (SELECT name FROM sys.resource_governor_resource_pools
  WHERE name = 'pooldemo')
DROP RESOURCE POOL pooldemo
GO
  
CREATE RESOURCE POOL pooldemo
WITH (MAX_CPU_PERCENT = 40)
GO

--Configure the workload group so it uses the 
--new resource pool. 
ALTER WORKLOAD GROUP demogroup
USING pooldemo
GO

--Apply the changes to the Resource Governor
--in-memory configuration.
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

O que há de novo em desempenho?

O desempenho geral de bancos de dados melhora no SQL Server 2008. Graças aos diversos recursos novos do SQL Server 2008, você pode controlar e monitorar o desempenho de seus bancos de dados e dos aplicativos que os utilizam.

Quando você tem grandes números de transações executadas a cada segundo, o bloqueio que normalmente ocorre durante essas transações pode ter um pacto negativo sobre o desempenho dos seus aplicativos de banco de dados. O SQL Server foi projetado para reduzir o número total de bloqueios mantido por um processo ao escalonar bloqueios a partir dos de menor nível de linha e de página até grandes bloqueios de nível de tabela. Mas é importante compreender que esse escalonamento de bloqueios pode causar problemas. Por exemplo, uma única transação pode bloquear uma tabela inteira e impedir que outras transações trabalhem com ela.

O SQL Server 2008 funciona com o mecanismo de particionamento de tabelas (introduzido no SQL Server 2005) para permitir que o mecanismo do SQL Server escalone bloqueios em nível de partição antes de em nível de tabela. O nível intermediário de bloqueio pode reduzir drasticamente os efeitos do escalonamento de bloqueios em sistemas que precisam processar centenas e milhares de transações por segundo.

O SQL Server 2008 oferece diversos aperfeiçoamentos de processador de consultas novos para quando a consulta interagir com tabelas particionadas. O otimizador de consultas agora pode executar consultas em partições, como faria em índices individuais, ao trabalhar com a ID da partição e não com o mecanismo de particionamento no nível de tabela.

O que há de novo em alta disponibilidade?

À medida que ambientes de banco de dados se tornam mais complexos e os bancos de dados aumentam, a capacidade de garantir a sua disponibilidade se torna cada vez mais difícil. Os mecanismos conhecidos que você usou no passado para obter alta disponibilidade ainda estão presentes no SQL Server 2008. Mas alguns desses recursos foram aperfeiçoados no SQL Server 2008 e outros novos foram adicionados.

Como SQL Server 2005, muitos administradores começaram a implementar o espelhamento de bancos de dados para obter a alta disponibilidade. O SQL Server 2008 oferece várias aprimoramentos para a prática do espelhamento de bancos de dados. No passado, por exemplo, o espelhamento de bancos de dados ocasionalmente tinham problemas de desempenho quando os dados do log de transações eram movidos do banco de dados principal para os espelhados. Em resposta a isso, o SQL Server 2008 agora reduz a quantidade de informações que é movida pela rede do log de transações do principal para o log de transações do espelho ao compactá-las antes do envio para o log de transações do espelho para proteção.

Agora você pode corrigir páginas de dados corrompidas no principal. Se um banco de dados principal tiver páginas de dados corrompidas devido aos erros 823 e 824, poderá solicitar uma cópia nova dessas páginas de dados dos servidores espelhados. Essa solicitação é um processo automatizado transparente para qualquer usuário que estiver acessando os bancos de dados principais.

Outro recurso novo, o Hot Add CPU, permite que você adicione CPUs novas a um servidor de banco de dados sem afetar a disponibilidade dos bancos de dados que ele contém. No entanto, saiba que o Hot Add CPU possui as suas limitações, já que ele só será útil se você estiver executando o Windows Server® 2008 Enterprise Edition ou o Datacenter Edition baseados em Itanium de 64 bits, além de exigir a Enterprise Edition do SQL Server 2008.

O que há de novo em segurança?

O SQL Server 2005 introduziu a segurança de dados na forma de criptografia de dados. Com o SQL Server 2008, a criptografia foi bastante aprimorada com a introdução de dois recursos: Gerenciamento Extensível de Chaves e Criptografia Transparente de Dados.

O Gerenciamento Extensível de Chaves permite que uma estrutura avançada armazene com segurança as chaves usadas na infra-estrutura de criptografia — não só no próprio banco de dados como também fora dele, em módulos de software de terceiros ou com um Módulo de Segurança de Hardware.

A Criptografia Transparente de Dados oferece flexibilidade aprimorada para a criptografia de dados ao permitir que ela seja uma propriedade do banco de dados e não somente o resultado de funções em uma linha de código. O resultado é que os administradores não precisam executar um grande número de alterações necessárias para a estrutura de seus bancos de dados e para o código de aplicativos quando criptografarem no nível dos dados. O código da Figura 4 mostra como você pode criptografar um banco de dados com a Criptografia Transparente de Dados.

Figure 4 Using Transparent Data Encryption

USE master;
GO

--Create a master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YouWillNeedToCreateAStrongPassword';
GO

--Create a certificate to use with TDE
CREATE CERTIFICATE TDECERT WITH SUBJECT = 'TDECert'
GO

--Change to the database to encrypt
USE AdventureWorks
GO

--Create your database master key
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128 --Use a strong algorithm
ENCRYPTION BY SERVER CERTIFICATE TDECERT
GO

--Alter the database to encrypt it with the
--master database key
ALTER DATABASE AdventureWorks
SET ENCRYPTION ON
GO

O que há de novo para desenvolvedores?

Os administradores de banco de dados não são as únicas pessoas que se beneficiarão diretamente das alterações do SQL Server 2008. Há uma série de recursos novos que foram projetados para ajudar os desenvolvedores de banco de dados. Eles vão desde novos aprimoramentos de T-SQL até novos componentes que poderão ajudar os desenvolvedores a criar e a utilizar consultas de banco de dados.

Muitos desenvolvedores de banco de dados são responsáveis pela criação das consultas necessárias para o retorno dos dados para seus aplicativos. Provavelmente você já conhece a ferramenta LINQ (Consulta Integrada à Linguagem), que permite aos desenvolvedores gerar consultas em um banco de dados usando linguagem de programação baseada no Microsoft® .NET em vez das instruções T-SQL normais. Bem, o SQL Server 2008 aprimora a LINQ, oferecendo uma nova LINQ ao provedor de SQL, permitindo aos desenvolvedores gerar comandos LINQ diretamente em tabelas e colunas do SQL Server. Isso reduzirá o tempo para a criação de novas consultas de dados.

Ao desenvolver em bancos de dados, os desenvolvedores utilizam objetos de nível mais alto que podem ser mapeados para tabelas e colunas individuais do banco de dados. Esses objetos, conhecidos como entidades, representam os dados necessários para os aplicativos de banco de dados e, portanto, o desenvolvedor não precisa compreender a estrutura de armazenamento real dos dados e o esquema do banco de dados. O novo ADO.NET Entity Framework permite que desenvolvedores criem consultas de banco de dados usando essas entidades. A abstração da estrutura de banco de dados subjacente permite que os desenvolvedores sejam mais produtivos.

O SQL Server 2008 oferece muitos aprimoramentos diferentes para o T-SQL, fazendo com que os desenvolvedores tenham mais eficiência. Um exemplo é a nova instrução MERGE, que permite ao desenvolvedor verificar a existência de dados antes de tentar inserir novos. Essa verificação antes da execução da instrução INSERT permite que os dados sejam atualizados. Não é mais necessário criar associações complexas para atualizar dados existentes e inserir dados que ainda não existem, tudo durante uma única instrução.

Além disso, separar dados de hora e de data do tipo de dados data/hora ficou mais fácil. O SQL Server 2008 introduziu dois tipos de dados separados para a manipulação de dados de data e de hora. Tipos de dados diferentes significarão desempenho aprimorado para muitas consultas, já que não haverá mais a necessidade da execução de uma operação nos dados antes de sua utilização na consulta.

Ao criar estruturas de banco de dados mais novas, os desenvolvedores de banco de dados quase sempre se vêem alongando a estrutura de bancos de dados para implementar aplicativos de mapeamento. O SQL Server 2008 ajuda a corrigir esse problema com novos tipos de dados espaciais. Os dois tipos de dados espaciais, GEOGRAPHY e GEOMETRY, permitem que os desenvolvedores armazenem dados específicos de local diretamente no banco de dados, sem a necessidade de divisão desses elementos de dados em formatos que se ajustem a outros tipos de dados padrão. O código da Figura 5 é um exemplo de uma tabela espacial simples.

Figure 5 A simple spatial table

IF OBJECT_ID ( 'Demo_SpatialTable', 'Table' ) IS NOT NULL 
    DROP TABLE Demo_SpatialTable
GO

--Create table to hold spatial data
CREATE TABLE Demo_SpatialTable 
    ( SpatialID int IDENTITY (1,1),
    SpatialInputCol geography, 
    SpatialOutputCol AS SpatialInputCol.STAsText() )
GO

--Insert data into table
INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326));

INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));
GO

--View data to see that data has been converted and stored in col2
SELECT * FROM Demo_SpatialTable

No passado, um problema muito comum para desenvolvedores de banco de dados era a forma como armazenar e utilizar objetos binários grandes, como documentos e arquivos de mídia. O método normalmente usado era armazenar os arquivos fora do banco de dados e simplesmente armazenar um ponteiro no banco de dados para o arquivo externo. Com esse método, no entanto, ao mover o arquivo, você não podia se esquecer de atualizar o ponteiro.

O SQL Server 2008 lida com esse problema com o novo tipo de dados FILESTREAM. Com esse tipo de dados, os arquivos ainda podem ser armazenados fora do banco de dados, mas os dados são considerados parte do banco de dados para consistência transacional. Isso possibilita a utilização de operações de arquivo comuns com a manutenção dos benefícios de desempenho e de segurança do banco de dados.

E quanto ao business intelligence?

O uso cada vez maior do SQL Server nos últimos anos tem sido guiado em grande parte pela adoção de estratégias de business intelligence. Os recursos de business intelligence não são novidade para o SQL Server, mas o SQL Server 2008 possui algumas novidades.

Por exemplo, quando dados são armazenados em data warehouses, freqüentemente há perdas de espaço devido a valores NULL. As colunas que armazenam valores NULL ocupam o espaço do maior tamanho de dados permitido definido na coluna. Isso significa que uma coluna com milhares de valores NULL pode consumir muitos MBs de espaço sem realmente armazenar quaisquer dados.

O SQL Server 2008 apresenta as colunas esparsas, que possibilitam o armazenamento de valores NULL sem a ocupação de qualquer espaço físico do disco. Como as colunas esparsas não consomem espaço real, as tabelas que as contêm podem exceder o limite de coluna de 1.024.

O SQL Server 2008 também apresenta um novo mecanismo, Captura de Dados Alterados, para o gerenciamento de alterações incrementais que precisam ser carregadas no data warehouse. Ele captura e coloca os dados alterados em um conjunto de tabelas de alterações. Capturar dados atualizados, excluídos e inseridos em um esquema de armazenamento que pode ser facilmente utilizado permite o carregamento incremental de data warehouses a partir dessas tabelas — ao contrário de ter de criar instruções de inserção personalizadas que tentam descobrir quais são as alterações feitas em linhas existentes de dados antes da atualização do data warehouse.

Conclusão

Esta é somente uma rápida visão geral das novidades do SQL Server 2008. Ele trará um amplo conjunto de novos recursos e de atualizações de recursos existentes para melhorar a vida dos administradores e dos desenvolvedores de banco de dados. Por fim, ele oferecerá desempenho e escalabilidade aprimorados para os bancos de dados cada vez mais exigentes de hoje.

Randy Dyess é um mentor da Solid Quality Mentors. Ele é especializado em sistemas OLTP do SQL Server. Randy é autor de TransactSQL Language Reference Guide, co-autor de MCTS Self-Paced Training Kit: Microsoft SQL Server 2005 Implementation and Maintenance (Exam 70-431) e de diversos artigos de revistas e de boletins informativos. Randy também é diretor de programa do North Texas SQL Server Users Group e é MVP do SQL Server. Visite seu blog em blogs.solidq.com/EN/rdyess/default.aspx.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..