Manter tabelas de dados do SQL Server na memória é uma função fornecida pelo SQL Server, que raramente está envolvida no processo de desenvolvimento de pequenos sistemas gerais. Documentos relacionados são compilados aqui para demonstrar como colocar todos os dados de uma tabela no SQL Server na memória para implementar um banco de dados na memória e melhorar o desempenho em tempo real.
1, DBCC PINTABLE
Marca umatabela
a ser fixada, o que significa que o Microsoft SQL Server não libera as páginas da tabela da memória.
DBCC PINTABLE ( database_id , table_id )
Para determinar o ID do banco de dados, use a função DB_ID.
Para determinar o ID da tabela, use a função OBJECT_ID.
Comentar
DBCC PINTABLE não faz com que a tabela seja lida na memória. Quando as páginas de uma tabela são lidas no cache por instruções Transact-SQL comuns, elas são marcadas como páginas residentes na memória. As páginas residentes na memória não são limpas quando o SQL Server precisa de espaço para ler novas páginas. O SQL Server ainda registra atualizações na página e, se necessário, grava a página atualizada de volta no disco. No entanto, o SQL Server mantém uma cópia das páginas disponíveis no cache até que a tabela se torne não residente usando a instrução DBCC UNPINTABLE.
DBCC PINTABLE é melhor usado para manter tabelas pequenas e frequentemente referenciadas na memória. Leia as páginas da pequena tabela na memória de uma só vez, e todas as referências futuras aos seus dados não precisarão ser lidas no disco.
NOTA DBCC PINTABLE pode fornecer melhorias de desempenho, mas deve ser usado com cautela. Se residir uma tabela grande, a tabela inicialmente usará uma grande parte do cache sem deixar cache suficiente para outras tabelas no sistema. Se a tabela hospedada for maior que o cache, a tabela preencherá todo o cache. Um membro da função de servidor fixa sysadmin deve desligar e reiniciar o SQL Server e, em seguida, tornar a tabela não residente. Hospedar muitas tabelas cria o mesmo problema que hospedar tabelas maiores que o cache.
Exemplo:
Declare @db_id int, @tbl_id int
Use DATABASE_NAME
Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
DBCC pintable (@db_id, @tbl_id)
pode definir a tabela Departamento como memória- residente.
Declare @db_id int, @tbl_id int
Use DATABASE_NAME
Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
DBCC UNpintable (@db_id, @tbl_id)
pode desmarcar a tabela Department como residente na memória.
Você pode usar o seguinte comando SQL para detectar a execução:
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
Se o resultado de retorno for 1: significa que a tabela foi configurada para residir na memória 0: significa que a tabela foi configurada para residir na memória; que não foi configurado para residir na memória.
2, SP_TableOption
Define
valores de opção para tabelas definidas pelo usuário e pode ser usado para ativar o recurso de texto em linha em tabelas com colunas de texto, ntext ou imagem.
sp_tableoption [@TableNamePattern =] 'tabela'
, [ @OptionName = ] 'option_name'
, [ @OptionValue = ] 'value'
onde 'option_name' tem o seguinte uso:
pintable - Quando desabilitado (o padrão), marca a tabela como não residente em RAM. Quando habilitado, marca a tabela como residente em RAM. (A tabela especificada pode ser residente na memória)
Além disso, o bloqueio de tabela no carregamento em massa, o bloqueio de inserção de linha, o texto na linha e outros valores opcionais não envolvem tabela residente na memória. Para uso específico, você pode consultar os livros do SQL Server. Online
Valor Tem o seguinte uso:
o option_name está habilitado (true, on ou 1) ou desabilitado (false, off ou 0)
Exemplo:
EXEC sp_tableoption 'Department','pintable', 'true'
fará
comque a tabela de dados Department resida na memória
.
.
Você pode usar o seguinte comando SQL para detectar a execução:
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
Se o resultado de retorno for 1: significa que a tabela foi configurada para residir na memória 0: significa que a tabela foi configurada para residir na memória; que não foi configurado para residir na memória.
3. ConclusõesAo
definir uma tabela de dados como residente na memória, a tabela não é realmente lida na memória até que seja recuperada. Portanto, você pode usar as seguintes instruções SQL para residir ainda mais a tabela de dados Departamento na memória:
Selecione * Do Departamento
Além disso, você pode usar as seguintes instruções SQL para exibir/detectar facilmente todas as tabelas definidas para residir na memória do banco de dados:
SELECT * FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned' ) > 0