Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server op 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 link gegeven naar diepgaande documentatie voor dat gebied.
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 bevragen van grote hoeveelheden data in een columnar dataformaat, een columnstore genoemd.
Voeg een columnstore-index toe aan de
SalesOrderDetailtabel door de volgende Transact-SQL (T-SQL) commando's uit te voeren:CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GOVoer 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_idvoor de columnstore-index op te zoeken en te bevestigen dat deze wordt weergegeven in de gebruiksstatistieken voor deSalesOrderDetailtabel: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 die de prestaties van applicatiesystemen aanzienlijk kunnen verbeteren. Deze sectie leidt je door de stappen om een geheugengeoptimaliseerde tabel te maken die in het geheugen is opgeslagen en een native gecompileerde opgeslagen procedure die toegang kan krijgen tot de tabel.
Configureer database 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
AdventureWorks2022te controleren:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GOWerk indien nodig het niveau bij naar 130:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GOWanneer 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; GOVoordat je een geheugengeoptimaliseerde tabel kunt maken, moet je eerst een geheugengeoptimaliseerde bestandsgroep aanmaken en een container voor databestanden:
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); GOVoeg 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 prestatie-informatie over queries, uitvoeringsplannen en runtime-statistieken.
Vóór SQL Server 2022 (16.x) is Query Store niet standaard ingeschakeld en kan deze worden ingeschakeld metALTER 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 en functies geven serverstatusinformatie terug die gebruikt kan worden om de gezondheid van een serverinstantie te monitoren, problemen te diagnosticeren en de prestaties af te stemmen.
Om de sys.dm_os_wait_stats dynamische beheerweergave te bevragen:
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
- Best practices voor prestaties: Opslag, kernel, CPU en netwerk voor SQL Server on Linux
- Aanbevolen procedures voor prestaties: SQL Server geheugen in Linux
- Quickstart: SQL Server installeren en een database maken in Red Hat Enterprise Linux