Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server em Linux
Se você é um usuário do Linux que é novo no SQL Server, as tarefas a seguir o orientam por alguns dos recursos de desempenho. Estes não são exclusivos ou específicos do Linux, mas ajuda a dar-lhe uma ideia de áreas para investigar mais a fundo. Em cada exemplo, um link é fornecido para a documentação de profundidade para essa área.
Observação
Os exemplos a seguir usam o banco de dados de exemplo AdventureWorks2022. Para obter instruções sobre como obter e instalar esse banco de dados de exemplo, consulte Migrar um banco de dados do SQL Server do Windows para o Linux usando backup e restauração.
Criar um índice columnstore
Um índice columnstore é uma tecnologia para armazenar e consultar grandes quantidades de dados num formato de dados colunar, conhecido como columnstore.
Adicione um índice columnstore à tabela
SalesOrderDetailexecutando os seguintes comandos Transact-SQL:CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GOExecute a seguinte consulta que usa o índice columnstore para verificar a tabela:
SELECT ProductID, SUM(UnitPrice) AS SumUnitPrice, AVG(UnitPrice) AS AvgUnitPrice, SUM(OrderQty) AS SumOrderQty, AVG(OrderQty) AS AvgOrderQty FROM Sales.SalesOrderDetail GROUP BY ProductID ORDER BY ProductID;Verifique se o índice columnstore foi usado pesquisando o índice columnstore no
object_ide confirmando que ele aparece nas estatísticas de uso da tabelaSalesOrderDetail:SELECT * FROM sys.indexes WHERE name = 'IX_SalesOrderDetail_ColumnStore'; GO SELECT * FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID('AdventureWorks2022') AND object_id = OBJECT_ID('AdventureWorks2022.Sales.SalesOrderDetail');
Usar In-Memory OLTP
O SQL Server fornece In-Memory recursos OLTP que podem melhorar consideravelmente o desempenho dos sistemas de aplicativos. Esta seção orienta você pelas etapas para criar uma tabela com otimização de memória armazenada na memória e um procedimento armazenado compilado nativamente que pode acessar a tabela sem precisar ser compilado ou interpretado.
Configurar banco de dados para In-Memory OLTP
Você deve definir o banco de dados para um nível de compatibilidade de pelo menos 130 para usar In-Memory OLTP. Use a seguinte consulta para verificar o nível de compatibilidade atual do
AdventureWorks2022:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GOSe necessário, atualize o nível para 130:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GOQuando uma transação envolve uma tabela baseada em disco e uma tabela com otimização de memória, é essencial que a parte otimizada para memória da transação opere no nível de isolamento da transação chamado SNAPSHOT. Para impor de forma confiável esse nível para tabelas com otimização de memória em uma transação entre contêineres, execute o seguinte:
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; GOAntes de criar uma tabela com otimização de memória, você deve primeiro criar um grupo de arquivos com otimização de memória e um contêiner para arquivos de dados:
ALTER DATABASE AdventureWorks2022 ADD FILEGROUP AdventureWorks_mod CONTAINS MEMORY_OPTIMIZED_DATA; GO ALTER DATABASE AdventureWorks2022 ADD FILE (NAME = 'AdventureWorks_mod', FILENAME = '/var/opt/mssql/data/AdventureWorks_mod') TO FILEGROUP AdventureWorks_mod; GO
Criar uma tabela com otimização de memória
O armazenamento primário para tabelas com otimização de memória é a memória principal e, portanto, ao contrário das tabelas baseadas em disco, os dados não precisam ser lidos do disco para buffers de memória. Para criar uma tabela com otimização de memória, use a cláusula MEMORY_OPTIMIZED = ON.
Execute a seguinte consulta para criar a tabela dbo.ShoppingCart otimizada para memória. Como padrão, os dados são mantidos no disco para fins de durabilidade (DURABILITY também pode ser definido para persistir apenas o esquema).
CREATE TABLE dbo.ShoppingCart ( ShoppingCartId INT IDENTITY (1, 1) PRIMARY KEY NONCLUSTERED, UserId INT NOT NULL INDEX ix_UserId NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000000), CreatedDate DATETIME2 NOT NULL, TotalPrice MONEY ) WITH (MEMORY_OPTIMIZED = ON); GOInsira alguns registos na tabela:
INSERT dbo.ShoppingCart VALUES (8798, SYSDATETIME(), NULL); INSERT dbo.ShoppingCart VALUES (23, SYSDATETIME(), 45.4); INSERT dbo.ShoppingCart VALUES (80, SYSDATETIME(), NULL); INSERT dbo.ShoppingCart VALUES (342, SYSDATETIME(), 65.4);
Procedimentos armazenados compilados nativamente
O SQL Server dá suporte a procedimentos armazenados compilados nativamente que acessam tabelas com otimização de memória. As instruções T-SQL são compiladas em código de máquina e armazenadas como DLLs nativas, permitindo um acesso mais rápido aos dados e uma execução de consultas mais eficiente do que o T-SQL tradicional. Os procedimentos armazenados marcados com NATIVE_COMPILATION são compilados nativamente.
Execute o seguinte script para criar um procedimento armazenado compilado nativamente que insere um grande número de registros na tabela ShoppingCart:
CREATE PROCEDURE dbo.usp_InsertSampleCarts @InsertCount INT WITH NATIVE_COMPILATION, SCHEMABINDING AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') DECLARE @i AS INT = 0; WHILE @i < @InsertCount BEGIN INSERT INTO dbo.ShoppingCart VALUES (1, SYSDATETIME(), NULL); SET @i += 1; END END;Inserir 1.000.000 linhas:
EXECUTE usp_InsertSampleCarts 1000000;Verifique se as linhas foram inseridas:
SELECT COUNT(*) FROM dbo.ShoppingCart;
Usar o Repositório de Consultas
O Repositório de Consultas coleta informações detalhadas de desempenho sobre consultas, planos de execução e estatísticas de tempo de execução.
Antes do SQL Server 2022 (16.x), o Repositório de Consultas não estava habilitado por padrão e pode ser habilitado com ALTER DATABASE:
ALTER DATABASE AdventureWorks2022
SET QUERY_STORE = ON;
Execute a seguinte consulta para retornar informações sobre consultas e planos no Repositório de Consultas:
SELECT Txt.query_text_id,
Txt.query_sql_text,
Pl.plan_id,
Qry.*
FROM sys.query_store_plan AS Pl
INNER JOIN sys.query_store_query AS Qry
ON Pl.query_id = Qry.query_id
INNER JOIN sys.query_store_query_text AS Txt
ON Qry.query_text_id = Txt.query_text_id;
Vistas de gestão dinâmica de consulta
As exibições de gerenciamento dinâmico retornam informações de estado do servidor que podem ser usadas para monitorar a integridade de uma instância do servidor, diagnosticar problemas e ajustar o desempenho.
Para consultar a vista de gestão dinâmica de estatísticas dm_os_wait:
SELECT wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats;
Conteúdo relacionado
- Levantamento de Áreas Iniciais em In-Memory OLTP
- Planejar a adoção de In-Memory recursos OLTP no SQL Server
- Aceleração de tabelas temporárias e variáveis de tabela através da otimização de memória
- Monitorar e solucionar problemas de uso de memória com OLTP na memória
- In-Memory visão geral do OLTP e cenários de uso
- Ferramentas de monitoramento e ajuste de desempenho
- Práticas recomendadas de desempenho e diretrizes de configuração para SQL Server no Linux
- Guia de início rápido: instale o SQL Server e crie um banco de dados no Red Hat