Návod k funkcím výkonu SQL Serveru v Linuxu
platí pro:SQL Server – Linux
Pokud jste uživatelem Linuxu, který s SQL Serverem začíná, provedou vás následující úlohy některými funkcemi výkonu. Nejsou jedinečné nebo specifické pro Linux, ale pomáhají vám získat představu o oblastech, které je potřeba prozkoumat podrobněji. V každém příkladu je k dispozici odkaz na podrobnou dokumentaci pro danou oblast.
Poznámka
Následující příklady používají ukázkovou databázi AdventureWorks2022
. Pokyny k získání a instalaci této ukázkové databáze najdete v tématu Migrace databáze SQL Serveru z Windows do Linuxu pomocí zálohování a obnovení.
Vytvoření indexu columnstore
Index sloupcového úložiště je technologie pro ukládání a provádění dotazů na velká úložiště dat ve sloupcovém formátu, nazývaném sloupcový úložiště.
Přidejte do tabulky
SalesOrderDetail
sloupcový index spuštěním následujících příkazů Transact-SQL:CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GO
Spusťte následující dotaz, který k prohledávání tabulky používá index columnstore:
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;
Ověřte, že index columnstore byl použit tím, že vyhledáte
object_id
pro index columnstore a potvrdíte, že se zobrazuje ve statistikách využití tabulkySalesOrderDetail
.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');
Použití In-Memory OLTP
SQL Server poskytuje In-Memory funkce OLTP, které můžou výrazně zlepšit výkon aplikačních systémů. Tato část vás provede postupem vytvoření tabulky optimalizované pro paměť uloženou v paměti a nativně zkompilované uložené procedury, která má přístup k tabulce bez nutnosti kompilace nebo interpretace.
Konfigurace databáze pro In-Memory OLTP
Databázi byste měli nastavit na úroveň kompatibility minimálně 130, aby používala In-Memory OLTP. Pomocí následujícího dotazu zkontrolujte aktuální úroveň kompatibility
AdventureWorks2022
:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GO
V případě potřeby aktualizujte úroveň na 130:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GO
Pokud transakce zahrnuje tabulku založenou na disku i tabulku optimalizovanou pro paměť, je nezbytné, aby část transakce optimalizovaná pro paměť fungovala na úrovni izolace transakce s názvem SNAPSHOT. Chcete-li spolehlivě vynutit tuto úroveň pro tabulky optimalizované pro paměť v transakci mezi kontejnery, spusťte následující:
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; GO
Než budete moct vytvořit tabulku optimalizovanou pro paměť, musíte nejprve vytvořit skupinu souborů optimalizovanou pro paměť a kontejner pro datové soubory:
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
Vytvoření tabulky optimalizované pro paměť
Primární úložiště pro tabulky optimalizované pro paměť je hlavní paměť, takže na rozdíl od tabulek založených na disku nemusí být data načtena z disku do vyrovnávací paměti. K vytvoření tabulky optimalizované pro paměť použijte klauzuli MEMORY_OPTIMIZED = ON.
Spuštěním následujícího dotazu vytvořte paměťově optimalizovanou tabulku dbo.ShoppingCart. Ve výchozím nastavení se data uchovávají na disku pro účely stálosti (stálost je také možné nastavit tak, aby se zachovala pouze schémata).
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
Vložte do tabulky několik záznamů:
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);
Nativně zkompilované uložené procedury
SQL Server podporuje nativně zkompilované uložené procedury, které přistupují k tabulkám optimalizovaným pro paměť. Příkazy T-SQL se kompilují do strojového kódu a ukládají se jako nativní knihovny DLL, což umožňuje rychlejší přístup k datům a efektivnější spouštění dotazů než tradiční T-SQL. Uložené procedury označené NATIVE_COMPILATION se nativně kompilují.
Spuštěním následujícího skriptu vytvořte nativně zkompilovanou uloženou proceduru, která vloží velký počet záznamů do tabulky 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;
Vložit 1 000 000 řádků:
EXECUTE usp_InsertSampleCarts 1000000;
Ověřte, zda byly vloženy řádky:
SELECT COUNT(*) FROM dbo.ShoppingCart;
Použití úložiště dotazů
Úložiště dotazů shromažďuje podrobné informace o výkonu dotazů, plánů spouštění a statistikách modulu runtime.
Před SQL Serverem 2022 (16.x) není úložiště dotazů ve výchozím nastavení povolené a dá se povolit pomocí příkazu ALTER DATABASE:
ALTER DATABASE AdventureWorks2022
SET QUERY_STORE = ON;
Spuštěním následujícího dotazu vrátíte informace o dotazech a plánech v úložišti dotazů:
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;
Dotazování zobrazení dynamické správy
Zobrazení dynamické správy vrací informace o stavu serveru, které lze použít k monitorování stavu instance serveru, diagnostice problémů a ladění výkonu.
Pro dotazování dynamického zobrazení správy statistik dm_os_wait:
SELECT wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats;
Související obsah
- průzkum počátečních oblastí v In-Memory OLTP
- Naplánujte přijetí funkcí OLTP In-Memory na SQL Serveru
- rychlejší dočasná tabulka a proměnná tabulky s využitím optimalizace paměti
- Monitorování využití paměti a řešení potíží s využitím OLTP v paměti
- In-Memory přehled a scénáře použití OLTP
- nástroje pro monitorování výkonu a ladění
- osvědčené postupy a pokyny pro konfiguraci pro SQL Server v Linuxu
- rychlý start pro : Instalace SQL Serveru a vytvoření databáze v Red Hat