Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server i Linux
Om du är en Linux-användare som är nybörjare på SQL Server går följande uppgifter igenom några av prestandafunktionerna. Dessa är inte unika eller specifika för Linux, men det hjälper dig att ge dig en uppfattning om områden att undersöka ytterligare. I varje exempel ges en länk till djupgående dokumentation för det området.
Not
De följande exemplen använder exempeldatabasen AdventureWorks2022. Anvisningar om hur du hämtar och installerar den här exempeldatabasen finns i Migrera en SQL Server-databas från Windows till Linux med hjälp av säkerhetskopiering och återställning.
Skapa ett kolumnlagringsindex
Ett kolumnlagringsindex är en teknik för att lagra och söka stora datalager i ett kolumnformat som kallas kolumnlagring.
Lägg till ett kolumnlagringsindex i
SalesOrderDetailtabellen genom att köra följande Transact-SQL (T-SQL)-kommandon:CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GOKör följande fråga som använder kolumnlagringsindexet för att skanna tabellen:
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;Kontrollera att kolumnlagringsindexet användes genom att leta upp
object_idför kolumnlagringsindexet och bekräfta att det visas i användningsstatistiken för tabellenSalesOrderDetail: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');
Använda In-Memory OLTP
SQL Server tillhandahåller In-Memory OLTP-funktioner som kan förbättra prestandan i applikationssystem avsevärt. Denna sektion guidar dig genom stegen för att skapa en minnesoptimerad tabell lagrad i minnet och en native kompilerad lagrad procedur som kan komma åt tabellen.
Konfigurera databas för In-Memory OLTP
Du bör ange databasen till en kompatibilitetsnivå på minst 130 för att använda In-Memory OLTP. Använd följande fråga för att kontrollera den aktuella kompatibilitetsnivån för
AdventureWorks2022:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GOOm det behövs uppdaterar du nivån till 130:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GONär en transaktion omfattar både en diskbaserad tabell och en minnesoptimerad tabell är det viktigt att den minnesoptimerade delen av transaktionen fungerar på transaktionsisoleringsnivå med namnet SNAPSHOT. Kör följande för att på ett tillförlitligt sätt framtvinga den här nivån för minnesoptimerade tabeller i en transaktion mellan containrar:
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; GOInnan du kan skapa en minnesoptimerad tabell måste du först skapa en minnesoptimerad filgrupp och en container för datafiler:
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
Skapa en minnesoptimerad tabell
Det primära arkivet för minnesoptimerade tabeller är huvudminnet, så till skillnad från diskbaserade tabeller behöver data inte läsas in från disken till minnesbuffertar. Om du vill skapa en minnesoptimerad tabell använder du satsen MEMORY_OPTIMIZED = ON.
Kör följande fråga för att skapa den minnesoptimerade tabellen dbo. ShoppingCart. Som standard sparas data på disken i hållbarhetssyfte (DURABILITY kan också ställas in på att endast spara schemat).
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); GOInfoga vissa poster i tabellen:
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);
Nativt kompilerade lagrade procedurer
SQL Server stöder inbyggda kompilerade lagrade procedurer som har åtkomst till minnesoptimerade tabeller. T-SQL-uttrycken kompileras till maskinkod och lagras som interna DLL:er, vilket ger snabbare dataåtkomst och effektivare frågekörning än traditionell T-SQL. Lagrade procedurer som är markerade med NATIVE_COMPILATION kompileras internt.
Kör följande skript för att skapa en internt kompilerad lagrad procedur som infogar ett stort antal poster i tabellen 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;Infoga 1 000 000 rader:
EXECUTE usp_InsertSampleCarts 1000000;Kontrollera att raderna har infogats:
SELECT COUNT(*) FROM dbo.ShoppingCart;
Använd Query Store
Query Store samlar in detaljerad prestandainformation om förfrågningar, exekveringsplaner och körstatistik.
Innan SQL Server 2022 (16.x) är Query Store inte aktiverat som standard och kan aktiveras med ALTER DATABASE:
ALTER DATABASE AdventureWorks2022
SET QUERY_STORE = ON;
Kör följande fråga för att returnera information om frågor och planer i 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;
Fråga dynamiska hanteringsvyer
Dynamiska hanteringsvyer och funktioner returnerar serverstatusinformation som kan användas för att övervaka hälsan hos en serverinstans, diagnostisera problem och justera prestandan.
Så här kör du en fråga mot den dynamiska hanteringsvyn sys.dm_os_wait_stats:
SELECT wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats;
Relaterat innehåll
- Undersökning av inledande områden i In-Memory OLTP
- Planera införandet av In-Memory OLTP-funktioner i SQL Server
- Snabbare temporära tabeller och tabellvariabler med hjälp av minnesoptimering
- Övervaka och felsöka minnesanvändning med minnesintern OLTP-
- In-Memory OLTP-översikt och användningsscenarier
- Verktyg för prestandaövervakning och justering
- Metodtips för prestanda: Lagring, kernel, PROCESSOR och nätverk för SQL Server on Linux
- Metodtips för prestanda: SQL Server minne i Linux
- Snabbstart: Installera SQL Server och skapa en databas i Red Hat Enterprise Linux