Primeiros passos no SQL Azure (v11)

Como havia comentado no post SQL Azure TempDB, comecei a trabalhar com o SQL Azure. A primeira reação que tive foi que os bancos de dados TempDB, Model e MSDB sumiram.

Hoje quero compartilhar um pouco das outras surpresas que tive com o SQL Azure. Eu não sabia que existem diferentes versões no Azure (11 e 12) e isso faz muita diferença.

Versão 11 ou 12

Como saber qual a versão do SQL Server?

Comecei rodando o comando xp_msver para buscar a versão, mas retornou o erro:

Msg 2812, Level 16, State 62, Line 10
Could not find stored procedure 'xp_msver'.

Então a solução foi rodar SELECT @@version.

Microsoft SQL Azure (RTM) - 11.0.9231.178
Oct 22 2015 12:39:03
Copyright (c) Microsoft Corporation

Hoje estarei trabalhando com o SQL Azure versão 11 e isso é algo muito importante. Muitas coisas não são suportadas pelo SQL 11. Se você é um desenvolvedor, provavelmente notará poucas coisas diferentes. Entretanto, se você for um DBA e está acostumado com o SQL Server tradicional (2000, 2005, 2008, 2012, 2014), então terá inúmeras surpresas.

Documentação

Onde está o SQL Books Online (BOL)? Para mim, BOL é a bíblia do SQL e tem toda a documentação necessária para meu dia a dia. Gosto de fazer o download e deixar instalado na minha máquina, não sendo necessário me conectar online para tirar dúvidas. Mas quando vamos para o Azure, cadê o BOL relacionado?

Books Online
https://technet.microsoft.com/en-us/library/ms130214.aspx

A melhor documentação que encontrei foi o Azure Documentation, mas é bem diferente do BOL.

Azure documentation
https://azure.microsoft.com/pt-br/documentation/articles/sql-database-technical-overview/

Isso não deve ser um problema, pois, na teoria, os comandos tradicionais do SQL funcionam no Azure normalmente.

Comandos Suportados

Na teoria, os comandos tradicionais do SQL funcionam no Azure normalmente. Na prática, quase nada funciona igual ao SQL Server tradicional.

Deixo fazer algumas considerações sobre o cenário:

  • SQL Azure v11
  • Comandos administrativos

Meu dia começou com os seguintes comandos:

1. Escolhendo o banco de dados

Não existe o comando USE <database> .

Msg 40508, Level 16, State 1, Line 4
USE statement is not supported to switch between databases. Use a new connection to connect to a different Database.

A forma mais fácil é mudar o contexto de banco de dados usando a interface gráfica. Isso força uma nova conexão com o banco de dados.

image

O efeito colateral é que a informação sobre o Session ID nunca aparece corretamente. É meio estranho explicar, mas tenho certeza que isso acaba confundindo muita gente (demorei muito tempo para perceber isso).

image

O ideal é registrar uma conexão e adicionar “Connection Properties” com o nome do banco de dados.

image

 

2. Quem está conectado no banco?

Eu raramente uso o comando sp_who. Entretanto, é curioso saber que esse comando não existe no SQL Azure v11. Também não existe sp_who2, nem sysprocesses.

A solução é fácil: basta usar as DMV’s.

image

 

3. Qual foi o comando enviado?

Conhecendo os processos ativos no servidor, normalmente quero identificar o comando em execução. Para isso usamos o DBCC INPUTBUFFER para mostrar o conteúdo do último pacote de rede recebido, ou seja, ele contém a informação sobre o que está rodando na máquina. Mas esse é mais um comando não suportado no SQL Azure v11.

Assim, a solução é codificar usando a DMF chamada sys.dm_exec_sql_text.

image

Uma das vantagens de usar a DMF ao invés do DBCC é a possibilidade de usar dentro de SELECT.

image

 

4. Qual o espaço usado pelo banco de dados?

Essa é uma informação fundamental no Azure, pois sempre queremos saber a espaço usado pelo banco de dados. A surpresa é que o clássico sp_spaceused não funciona. Essa procedure depende da sysindexes, que também não existe no SQL Azure v11.

O melhor caminho é usar a DMV sys.dm_db_partition_stats para agregar o número de páginas usadas e reservadas.

image

Por questão de métrica, calculamos o espaço do banco de dados como 351159 x 8kb = 2743mb.

 

Conclusão

Ainda estou começando a trabalhar com o SQL Azure e já notei muitas diferenças. Entretanto, essas diferenças não são tão perceptíveis do ponto de vista de desenvolvedor (comandos DML) ou na versão do SQL Azure v12.