Data

11 jul, 2013

Como habilitar índices XML seletivos no SQL Server 2012 SP1

Publicidade

O SQL Server 2012 SP1 foi lançado com uma ótima melhoria em relação ao XML: índices XML seletivos. Quando utilizados de maneira apropriada, esses índices podem aumentar tremendamente a velocidade de busca nas colunas dos XMLs ao custo de uma baixa relação disco/tamanho:

A funcionalidade dos índices XML seletivos permite que você promova para o índice apenas certos caminhos nos documentos XML. No momento da criação do índice, esses caminhos são avaliados, e os nós para onde eles apontam, divididos e armazenados em uma tabela relacional no SQL Server. Esse recurso utiliza um eficiente algoritmo de mapeamento desenvolvido pelo Microsoft Research em colaboração com o time do SQL Server. O algoritmo mapeia os nós XML para uma única tabela relacional e alcança um desempenho excepcional, ao mesmo tempo em que necessita de um espaço de armazenamento modesto.

Entretanto, no momento em que este artigo foi escrito, a documentação no MSDN omitia uma necessidade crucial: a base de dados precisa estar habilitada para suportar esses novos índices. Pelo fato de o formato em disco ter mudado com o Service Pack, o motor não pode utilizar os novos índices XML seletivos, a não ser que estes estejam explicitamente habilitados. E a versão da base de dados precisa ser alterada para uma versão que o SQL Server 2012 RTM não reconheça, para que o programa não anexe ou recupere acidentalmente a base em uma instância RTM do SQL Server 2012 que não compreenderia os novos objetos de índices XML seletivos, ocasionando um erro do tipo “undefined behavior”. Para permitir esse tipo de índice na base de dados, é necessário executar o sp_db_selective_xml_index:

Habilita e desabilita a funcionalidade de índices XML seletivos em uma base de dados SQL Server. Se executado sem parâmetro algum, o procedimento retorna 1 se o índice de XML seletivo estiver habilitado em uma base de dados particular.

EXECUTE sys.sp_db_selective_xml_index
@db_name = N'AdventureWorks2012'
, @action = N'true';
GO

Tenha em mente que uma vez que os índices XML seletivos tiverem sido habilitados, essa base de dados não poderá mais ser anexada ou recuperada em uma instância RTM do SQL Server 2012. Isso se aplica ao envio de log (log shipping), espelhamento de base de dados e relações AlwaysOn, que quebrarão quando o upgrade for feito. Se todos os partners no envio de log, sessão SBM ou AG também passarem por upgrade para o SQL Server 2012 SP1, você pode reabilitar as relações depois de habilitar os índices XML seletivos.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://rusanu.com/2013/02/11/how-to-enable-selective-xml-indexes-in-sql-server-2012-sp1/