Database
 sql >> Base de Dados >  >> RDS >> Database

Alguns pequenos problemas com amostras Hekaton


Alguns de vocês têm acesso ao Hekaton publicado scripts de demonstração OLTP na memória envolvendo AdventureWorks; a amostra mais recente é publicada aqui. Esses exemplos pegam carona no banco de dados de exemplo AdventureWorks2012 no CodePlex. Se você experimentou esses exemplos, pode ter encontrado alguns problemas que podem mudar drasticamente sua primeira experiência com essa tecnologia.

Autorização de banco de dados


Muitas pessoas baixam o "AdventureWorks2012 Data File" – um arquivo .mdf de 200 MB que você pode anexar – sem log – usando a seguinte sintaxe:
CREATE DATABASE AdventureWorks2012 ON
(
  NAME = AdventureWorks2012_Data, FILENAME = '<path>\AdventureWorks2012_Data.mdf'
)
FOR ATTACH_REBUILD_LOG;

O problema é que, se você estiver conectado à instância do SQL Server como sua conta do Windows, poderá acabar inadvertidamente como proprietário do banco de dados. O que não será grande coisa na maioria dos cenários, exceto que se você criar procedimentos armazenados com EXECUTE AS OWNER , como muitas amostras que você encontra, isso pode causar um problema. Você pode encontrar esta linha, por exemplo, em muitos procedimentos armazenados compilados nativamente:
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER

A menos que você já tenha mitigado esse problema de outras maneiras, se o proprietário do banco de dados for sua conta do Windows, é provável que você receba o seguinte erro ao tentar criar esse procedimento:
Msg 15517, Level 16, State 1, Procedure [procedure name]
Não é possível executar como o principal do banco de dados porque o principal "dbo" não existe, esse tipo de principal não pode ser representado ou você não tem permissão.
Dependendo do seu ambiente, você pode querer avaliar seriamente como lida com isso; no meu caso, peguei o caminho mais fácil e apenas defini a autorização no banco de dados para sa :
ALTER AUTHORIZATION ON DATABASE::AdventureWorks2012 TO sa;

Nesse ponto, consegui executar o script de demonstração sem problemas (bem, recebi erros quando tentei adicionar outro grupo de arquivos com otimização de memória, mas esse é um problema completamente diferente e ignorável).

Contagem de intervalos


Não parece haver muitas orientações práticas sobre como escolher a contagem de buckets para suas tabelas com otimização de memória. Existe este artigo no MSDN, que aborda alguns detalhes técnicos, e Klaus Aschenbrenner escreveu este post sobre como fazer escolhas inteligentes nessa área. Fora isso, você está praticamente sozinho para experimentar. O SWAG que ouvi com mais frequência é 1x-2x o número de valores de chave exclusivos, de modo que as pesquisas de ponto são mais eficientes. No entanto, algumas das amostras que você encontrará por aí usam consistentemente 1.000.000 buckets ou números menores, como 100 (e até 5 em um caso), ou uma mistura. Lembre-se disso ao começar a experimentar seu próprio esquema e padrões de acesso a dados – talvez seja necessário extrair tabelas e tentar novamente com diferentes tamanhos de bucket para encontrar o "ponto ideal" para seu cenário.

Modelo de recuperação


O banco de dados AdventureWorks2012 está definido como SIMPLE recuperação. Assim como o problema do proprietário do banco de dados, na maioria dos casos isso não é grande coisa para um banco de dados de amostra. Mas quando você está testando o OLTP na memória – e provavelmente em combinação com outras tecnologias que tornam o SIMPLE recuperação de um fator decisivo, como Grupos de Disponibilidade – pode fazer muito mais sentido realizar seus testes em um banco de dados com recuperação definida como FULL . Caso contrário, você pode estar deixando de observar determinados comportamentos que podem ser diferentes em diferentes modelos de recuperação. Você pode alterar AdventureWorks2012 para FULL do seguinte modo:
ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;

E não se esqueça de fazer um backup completo, para que uma cadeia de backup seja estabelecida e o banco de dados não esteja operando em pseudo-SIMPLE modo de recuperação.