Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:Program SQL Server w systemie Linux
Jeśli jesteś użytkownikiem systemu Linux, który jest nowym użytkownikiem programu SQL Server, następujące zadania przeprowadzą Cię przez niektóre funkcje wydajności. Nie są one unikatowe ani specyficzne dla systemu Linux, ale pomagają w dalszym zbadaniu obszarów. W każdym przykładzie podano link do szczegółowej dokumentacji dotyczącej tego obszaru.
Notatka
W poniższych przykładach użyto przykładowej bazy danych AdventureWorks2022. Aby uzyskać instrukcje dotyczące uzyskiwania i instalowania tej przykładowej bazy danych, zobacz Migrowanie bazy danych programu SQL Server z systemu Windows do systemu Linux przy użyciu kopii zapasowej i przywracania.
Utwórz indeks magazynowy kolumnowy
Indeks magazynu kolumnowego to technologia służąca do przechowywania dużych zbiorów danych i wykonywania na nich zapytań w kolumnowym formacie danych, zwanym magazynem kolumnowym.
Dodaj indeks columnstore do tabeli
SalesOrderDetail, wykonując następujące polecenia Transact-SQL (T-SQL):CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore] ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID); GOWykonaj następujące zapytanie, które używa indeksu magazynu kolumn do skanowania tabeli:
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;Sprawdź, czy indeks magazynu kolumn został użyty, wyszukując
object_iddla indeksu magazynu kolumn i sprawdzając, czy jest wyświetlany w statystykach użycia dla tabeliSalesOrderDetail: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');
Korzystanie z In-Memory OLTP
SQL Server oferuje funkcje In-Memory OLTP, które mogą znacząco poprawić wydajność systemów aplikacyjnych. Ta sekcja przeprowadza Cię przez kroki tworzenia tabeli zoptymalizowanej pod pamięć oraz natywnie skompilowanej procedury przechowywanej, która umożliwia dostęp do tabeli.
Skonfiguruj bazę danych dla funkcji In-Memory OLTP
Należy ustawić bazę danych na poziom zgodności co najmniej 130, aby używać In-Memory OLTP. Użyj następującego zapytania, aby sprawdzić bieżący poziom zgodności
AdventureWorks2022:USE AdventureWorks2022; GO SELECT d.compatibility_level FROM sys.databases AS d WHERE d.name = DB_NAME(); GOW razie potrzeby zaktualizuj poziom do 130:
ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130; GOGdy transakcja obejmuje zarówno tabelę opartą na dysku, jak i tabelę zoptymalizowaną pod kątem pamięci, niezbędne jest, aby część transakcji zoptymalizowana pod kątem pamięci działała na poziomie izolacji transakcji o nazwie SNAPSHOT. Aby niezawodnie wymusić ten poziom dla tabel zoptymalizowanych pod kątem pamięci w transakcji między kontenerami, wykonaj następujące czynności:
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON; GOZanim utworzysz tabelę zoptymalizowaną pod pamięć, musisz najpierw stworzyć grupę plików zoptymalizowaną pod pamięć oraz kontener na pliki danych:
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
Tworzenie tabeli zoptymalizowanej pod kątem pamięci
Podstawowym magazynem tabel zoptymalizowanych pod kątem pamięci jest pamięć główna, dlatego w odróżnieniu od tabel dyskowych, dane nie muszą być odczytywane z dysku do pamięci. Aby utworzyć tabelę zoptymalizowaną pod kątem pamięci, użyj klauzuli MEMORY_OPTIMIZED = ON.
Wykonaj następujące zapytanie, aby utworzyć zoptymalizowaną pod kątem pamięci tabelę dbo.ShoppingCart. Domyślnie dane są utrwalane na dysku na potrzeby trwałości (trwałość można również ustawić tak, aby utrwały tylko 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); GOWstaw kilka rekordów do tabeli:
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);
Natywnie skompilowane procedury składowane
Program SQL Server obsługuje natywnie skompilowane procedury składowane, które uzyskują dostęp do tabel zoptymalizowanych pod kątem pamięci. Instrukcje języka T-SQL są kompilowane do kodu maszynowego i przechowywane jako natywne biblioteki DLL, co umożliwia szybszy dostęp do danych i wydajniejsze wykonywanie zapytań niż tradycyjny język T-SQL. Procedury przechowywane oznaczone jako NATIVE_COMPILATION są kompilowane na poziomie natywnym.
Wykonaj następujący skrypt, aby utworzyć natywnie skompilowaną procedurę składowaną, która wstawia dużą liczbę rekordów do tabeli 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;Wstaw 1000 000 wierszy:
EXECUTE usp_InsertSampleCarts 1000000;Sprawdź, czy wiersze zostały wstawione:
SELECT COUNT(*) FROM dbo.ShoppingCart;
Użyj magazynu zapytań
Query Store zbiera szczegółowe informacje o wydajności zapytań, planów wykonania oraz statystyk w czasie działania.
Przed SQL Server 2022 (16.x) Query Store nie jest domyślnie włączona i może być włączona za pomocą polecenia ALTER DATABASE:
ALTER DATABASE AdventureWorks2022
SET QUERY_STORE = ON;
Uruchom następujące zapytanie, aby uzyskać informacje o zapytaniach i planach w magazynie zapytań.
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;
Wykonywanie zapytań dotyczących dynamicznych widoków zarządzania
Dynamiczne widoki i funkcje zarządzania zwracają informacje o stanie serwera, które mogą być używane do monitorowania stanu instancji serwera, diagnozowania problemów i dostosowywania wydajności.
Aby wykonać zapytanie dotyczące dynamicznego widoku zarządzania sys.dm_os_wait_stats:
SELECT wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats;
Powiązana zawartość
- Badanie obszarów początkowych w In-Memory OLTP
- Planowanie wdrożenia funkcji OLTP In-Memory w programie SQL Server
- Szybsza tabela tymczasowa i zmienna tabelaryczna dzięki optymalizacji pamięci
- Monitorowanie i rozwiązywanie problemów z użyciem pamięci za pomocą OLTP w pamięci
- In-Memory omówienie OLTP i scenariusze użycia
- narzędzia do monitorowania wydajności i dostrajania
- Najlepsze rozwiązania dotyczące wydajności: magazyn, jądro, procesor CPU i sieć dla SQL Server on Linux
- Najlepsze praktyki dotyczące wydajności: pamięć programu SQL Server w systemie Linux
- Szybki start: instalowanie programu SQL Server i tworzenie bazy danych w systemie Red Hat Enterprise Linux