Overzicht van de prestatiefuncties van SQL Server in Linux
van toepassing op:SQL Server- - Linux
Als u een Linux-gebruiker bent die niet bekend is met SQL Server, doorloopt u een aantal van de prestatiefuncties in de volgende taken. Deze zijn niet uniek of specifiek voor Linux, maar het helpt u een idee te geven van gebieden om verder te onderzoeken. In elk voorbeeld wordt een koppeling naar de uitgebreide documentatie voor dat gebied gegeven.
Notitie
In de volgende voorbeelden wordt de AdventureWorks2022
voorbeelddatabase gebruikt. Zie Een SQL Server-database migreren van Windows naar Linux met behulp van back-up en herstelvoor instructies over het verkrijgen en installeren van deze voorbeelddatabase.
Een columnstore-index maken
Een columnstore-index is een technologie voor het opslaan en opvragen van grote gegevensarchieven in een kolomgegevensindeling, een columnstore genaamd.
Voeg een columnstore-index toe aan de
SalesOrderDetail
tabel door de volgende Transact-SQL opdrachten uit te voeren:CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GO
Voer de volgende query uit die gebruikmaakt van de columnstore-index om de tabel te scannen:
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;
Controleer of de columnstore-index is gebruikt door de
object_id
voor de columnstore-index op te zoeken en te bevestigen dat deze wordt weergegeven in de gebruiksstatistieken voor deSalesOrderDetail
tabel: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');
In-Memory OLTP gebruiken
SQL Server biedt In-Memory OLTP-functies waarmee de prestaties van toepassingssystemen aanzienlijk kunnen worden verbeterd. In deze sectie wordt u begeleid bij de stappen voor het maken van een tabel die is geoptimaliseerd voor geheugen en een systeemeigen gecompileerde opgeslagen procedure die toegang heeft tot de tabel zonder dat deze hoeft te worden gecompileerd of geïnterpreteerd.
Database configureren voor In-Memory OLTP
U moet de database instellen op een compatibiliteitsniveau van ten minste 130 om In-Memory OLTP te gebruiken. Gebruik de volgende query om het huidige compatibiliteitsniveau van
AdventureWorks2022
te controleren:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GO
Werk indien nodig het niveau bij naar 130:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GO
Wanneer een transactie zowel een tabel op basis van schijf als een tabel met geoptimaliseerd geheugen omvat, is het essentieel dat het voor geheugen geoptimaliseerde gedeelte van de transactie werkt op het niveau van transactieisolatie met de naam SNAPSHOT. Als u dit niveau betrouwbaar wilt afdwingen voor tabellen die zijn geoptimaliseerd voor geheugen in een transactie tussen containers, voert u het volgende uit:
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; GO
Voordat u een tabel kunt maken die is geoptimaliseerd voor geheugen, moet u eerst een voor geheugen geoptimaliseerde bestandsgroep en een container voor gegevensbestanden maken:
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
Een tabel maken die is geoptimaliseerd voor geheugen
Het primaire archief voor tabellen die zijn geoptimaliseerd voor geheugen is hoofdgeheugen en dus in tegenstelling tot tabellen op basis van schijven, hoeven gegevens niet van schijf in geheugenbuffers te worden gelezen. Als u een tabel wilt maken die is geoptimaliseerd voor geheugen, gebruikt u de component MEMORY_OPTIMIZED = ON.
Voer de volgende query uit om de geheugen-geoptimaliseerde tabel dbo.ShoppingCart te maken. Als standaard worden de gegevens op schijf bewaard voor duurzaamheid (DUURZAAMHEID kan ook worden ingesteld om het schema alleen te behouden).
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
Voeg enkele records in de tabel in:
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);
Systeemeigen gecompileerde opgeslagen procedures
SQL Server ondersteunt systeemeigen gecompileerde opgeslagen procedures voor toegang tot tabellen die zijn geoptimaliseerd voor geheugen. De T-SQL-instructies worden gecompileerd naar machinecode en opgeslagen als systeemeigen DLL's, waardoor snellere gegevenstoegang en efficiëntere queryuitvoering mogelijk zijn dan traditionele T-SQL. Opgeslagen procedures die zijn gemarkeerd met NATIVE_COMPILATION worden systeemeigen gecompileerd.
Voer het volgende script uit om een systeemeigen gecompileerde opgeslagen procedure te maken waarmee een groot aantal records wordt ingevoegd in de tabel 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;
1000.000 rijen invoegen:
EXECUTE usp_InsertSampleCarts 1000000;
Controleer of de rijen zijn ingevoegd:
SELECT COUNT(*) FROM dbo.ShoppingCart;
Query Store gebruiken
Query Store verzamelt gedetailleerde prestatiegegevens over query's, uitvoeringsplannen en runtimestatistieken.
Vóór SQL Server 2022 (16.x) is Query Store niet standaard ingeschakeld en kan deze worden ingeschakeld met ALTER DATABASE:
ALTER DATABASE AdventureWorks2022
SET QUERY_STORE = ON;
Voer de volgende query uit om informatie te retourneren over query's en plannen in de Query Store:
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;
Dynamische beheerweergaven opvragen
Dynamische beheerweergaven retourneren serverstatusinformatie die kan worden gebruikt om de gezondheid van een serverinstantie te bewaken, problemen te diagnosticeren en de prestaties af te stemmen.
Volg de volgende stappen om een query uit te voeren op de dynamische beheerweergave van de dm_os_wait-statistieken:
SELECT wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats;
Verwante inhoud
- overzicht van eerste gebieden in In-Memory OLTP-
- Plan de acceptatie van In-Memory OLTP-functies in SQL Server
- Snellere tijdelijke tabellen en tabelvariabelen door gebruik te maken van geheugenoptimalisatie
- geheugengebruik bewaken en problemen oplossen met OLTP- in het geheugen
- In-Memory OLTP-overzicht en gebruiksscenario's
- hulpprogramma's voor het bewaken en afstemmen van prestaties
- Prestatiebest practices en configuratierichtlijnen voor SQL Server op Linux
- quickstart: SQL Server installeren en een database maken op Red Hat