Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server - Linux
Si es usuario de Linux y está empezando a usar SQL Server, en las tareas siguientes se explican algunas de las características de rendimiento. No son exclusivas ni específicas de Linux, pero le ayudarán a hacerse una idea de las áreas en las que puede profundizar. En los ejemplos, se proporciona un vínculo a documentación detallada de cada área.
Nota:
Los ejemplos siguientes usan la base de datos de ejemplo AdventureWorks2022
. Para obtener instrucciones sobre cómo obtener e instalar esta base de datos de ejemplo, consulte Migración de una base de datos de SQL Server de Windows a Linux mediante la copia de seguridad y restauración.
Crear un índice de almacén de columnas
Un índice de almacén de columnas es una tecnología para almacenar y consultar grandes almacenes de datos con un formato de datos en columnas denominados almacenes de columnas.
Agregue un índice de almacén de columnas a la tabla
SalesOrderDetail
; para hacerlo, ejecute los siguientes comandos de Transact-SQL:CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GO
Ejecute la consulta siguiente, que usa el índice del almacén de columnas para analizar la tabla:
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;
Asegúrese de que el índice del almacén de columnas se haya usado; para hacerlo, busque el elemento
object_id
del índice del almacén de columnas y confirme que aparece en las estadísticas de uso de la tablaSalesOrderDetail
: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 OLTP en memoria
SQL Server proporciona características de OLTP en memoria que pueden mejorar considerablemente el rendimiento de muchos sistemas de aplicaciones. En esta sección, se describen los pasos para crear una tabla optimizada para memoria almacenada en memoria y un procedimiento almacenado y compilado de forma nativa que puede acceder a la tabla sin necesidad de compilarse o interpretarse.
Configurar la base de datos para OLTP en memoria
Debe establecer la base de datos en un nivel de compatibilidad de al menos 130 para usar OLTP en memoria. Use la consulta siguiente para comprobar el nivel de compatibilidad actual de
AdventureWorks2022
:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GO
Si es necesario, actualice el nivel a 130:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GO
Cuando en una transacción se usa una tabla basada en disco y una tabla optimizada para memoria, es esencial que la parte optimizada para memoria de la transacción opere en el nivel de aislamiento de la transacción denominado INSTANTÁNEA. Para exigir de forma confiable este nivel para las tablas optimizadas para memoria en una transacción entre contenedores, ejecute el código siguiente:
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; GO
Antes de crear una tabla optimizada para memoria, primero necesita crear un grupo de archivos optimizado para memoria y un contenedor para archivos de datos:
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
Crear una tabla optimizada para memoria
El almacén primario de las tablas optimizadas para memoria es la memoria principal y, por lo tanto, al contrario que con las tablas basadas en discos, no es necesario leer los datos del disco en los búferes de memoria. Para crear una tabla optimizada para memoria, use la cláusula MEMORY_OPTIMIZED = ON.
Ejecute la consulta siguiente para crear la tabla optimizada para memoria dbo.ShoppingCart. De forma predeterminada, los datos persisten en el disco con fines de durabilidad (la DURABILIDAD también se puede establecer para persistir solo en el 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); GO
Inserte algunos registros en la tabla:
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);
Procedimientos almacenados compilados de forma nativa
SQL Server admite de forma nativa los procedimientos almacenados y compilados que acceden las tablas optimizadas para memoria. Las instrucciones T-SQL se compilan en código máquina y se almacenan como DLL nativas, lo que permite un acceso a los datos más rápido y una ejecución de consultas más eficiente que el uso de T-SQL tradicional. Los procedimientos almacenados marcados con NATIVE_COMPILATION se compilan de forma nativa.
Ejecute el script siguiente para crear un procedimiento almacenado y compilado de forma nativa que inserta un gran número de registros en la tabla 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;
Inserte 1 000 000 de filas:
EXECUTE usp_InsertSampleCarts 1000000;
Verifique que las filas se hayan insertado correctamente:
SELECT COUNT(*) FROM dbo.ShoppingCart;
Usar el Almacén de consultas
El Almacén de consultas recopila información de rendimiento detallada sobre consultas, planes de ejecución y estadísticas del entorno de ejecución.
Antes de SQL Server 2022 (16.x), Almacén de consultas no está habilitado de forma predeterminada y se puede habilitar con ALTER DATABASE:
ALTER DATABASE AdventureWorks2022
SET QUERY_STORE = ON;
Ejecute la consulta siguiente para devolver información sobre consultas y planes en el Almacén 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 administración dinámica de consultas
Las funciones y vistas de administración dinámica devuelven información sobre el estado de una instancia de servidor que se puede usar para supervisar el estado de una instancia del servidor, para diagnosticar problemas y para optimizar el rendimiento.
Para consultar la vista de administración dinámica de estadísticas de dm_os_wait:
SELECT wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats;
Contenido relacionado
- Encuesta de áreas iniciales en OLTP en memoria
- Planear la adopción de características de OLTP en memoria en SQL Server
- Tabla temporal y variable de tabla más rápidas con optimización para memoria
- Supervisión y solución de problemas de uso de memoria con OLTP en memoria
- Información general y escenarios de uso de OLTP en memoria
- Herramientas de supervisión y optimización del rendimiento
- Procedimientos recomendados e instrucciones de configuración para SQL Server en Linux
- Inicio rápido: instalar SQL Server y crear una base de datos en Red Hat