Megosztás a következőn keresztül:


Útmutató a Linuxon futó SQL Server teljesítményfunkcióihoz

A következőkre vonatkozik:SQL Server Linux rendszeren

Ha Ön linuxos felhasználó, aki még nem ismeri az SQL Servert, az alábbi feladatok végigvezetik a teljesítmény egyes funkcióin. Ezek nem egyediek vagy a Linuxra jellemzőek, de segít ötleteket adni a további vizsgálatra szolgáló területekről. Minden példában egy hivatkozás található az adott terület részletes dokumentációjában.

Jegyzet

Az alábbi példák a AdventureWorks2022 mintaadatbázist használják. A mintaadatbázis beszerzésére és telepítésére vonatkozó utasításokért lásd: SQL Server-adatbázis áttelepítése Windowsról Linuxra biztonsági mentéssel és visszaállítással.

Oszloptárolós index létrehozása

Az oszlopcentrikus index a nagy adattárolók oszlopos adatformátumban történő tárolására és lekérdezésére szolgáló technológia, amelyet oszloptárnak neveznek.

  1. Adjon hozzá oszlopcentrikus indexet a SalesOrderDetail táblához a következő Transact-SQL parancsok végrehajtásával:

    CREATE NONCLUSTERED COLUMNSTORE INDEX [IX_SalesOrderDetail_ColumnStore]
        ON Sales.SalesOrderDetail(UnitPrice, OrderQty, ProductID);
    GO
    
  2. Hajtsa végre a következő lekérdezést, amely az oszlopcentrikus indexet használja a tábla vizsgálatához:

    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;
    
  3. Az oszlopcentrikus index használatának ellenőrzéséhez találja meg a object_id-t, amely az oszlopcentrikus indexet jelöli, és győződjön meg arról, hogy megjelenik a SalesOrderDetail táblázat használati statisztikáiban.

    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 használata

Az SQL Server In-Memory OLTP-funkciókat biztosít, amelyek jelentősen javítják az alkalmazásrendszerek teljesítményét. Ez a szakasz végigvezeti a memóriában tárolt memóriaoptimalizált táblázat létrehozásának lépésein, valamint egy natívan lefordított tárolt eljáráson, amely fordítás és értelmezés nélkül is hozzáfér a táblához.

Adatbázis konfigurálása In-Memory OLTP-hez

  1. Az adatbázist legalább 130 kompatibilitási szintre kell állítania In-Memory OLTP használatához. A AdventureWorks2022jelenlegi kompatibilitási szintjének ellenőrzéséhez használja az alábbi lekérdezést:

    USE AdventureWorks2022;
    GO
    
    SELECT d.compatibility_level
    FROM sys.databases AS d
    WHERE d.name = DB_NAME();
    GO
    

    Szükség esetén frissítse a szintet 130-ra:

    ALTER DATABASE CURRENT
        SET COMPATIBILITY_LEVEL = 130;
    GO
    
  2. Ha egy tranzakció lemezalapú táblát és memóriaoptimalizált táblát is magában foglal, elengedhetetlen, hogy a tranzakció memóriaoptimalizált része a SNAPSHOT nevű tranzakcióelkülönítési szinten működjon. Ha megbízhatóan szeretné érvényesíteni ezt a szintet a tárolók közötti tranzakció memóriaoptimalizált tábláihoz, hajtsa végre a következőket:

    ALTER DATABASE CURRENT
        SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
    GO
    
  3. A memóriaoptimalizált tábla létrehozása előtt létre kell hoznia egy memóriaoptimalizált fájlcsoportot és egy tárolót az adatfájlokhoz:

    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
    

Memóriaoptimalizált tábla létrehozása

A memóriaoptimalizált táblák elsődleges tárolója a fő memória, ezért a lemezalapú táblákkal ellentétben az adatokat nem kell beolvasni a lemezről a memóriapufferekbe. Memóriaoptimalizált tábla létrehozásához használja a MEMORY_OPTIMIZED = ON záradékot.

  1. Hajtsa végre a következő lekérdezést a memóriaoptimalizált dbo.ShoppingCart tábla létrehozásához. Alapértelmezés szerint az adatok tartóssági okokból megmaradnak a lemezen (a TARTÓSSÁG is beállítható úgy, hogy csak a sémát őrizze meg).

    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
    
  2. Szúrjon be néhány rekordot a táblába:

    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);
    

Natív módon lefordított tárolt eljárások

Az SQL Server támogatja a memóriaoptimalizált táblákhoz hozzáférő natívan lefordított tárolt eljárásokat. A T-SQL-utasítások gépi kódra vannak lefordítva, és natív DLL-ként vannak tárolva, ami gyorsabb adathozzáférést és hatékonyabb lekérdezés-végrehajtást tesz lehetővé, mint a hagyományos T-SQL. Azok a tárolt eljárások, amelyek NATIVE_COMPILATION-ként vannak megjelölve, natívan vannak lefordítva.

  1. Futtassa a következő szkriptet egy natívan lefordított tárolt eljárás létrehozásához, amely nagy számú rekordot szúr be a ShoppingCart táblába:

    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;
    
  2. 1 000 000 sor beszúrása:

    EXECUTE usp_InsertSampleCarts 1000000;
    
  3. Ellenőrizze, hogy a sorok be lettek-e szúrva:

    SELECT COUNT(*)
    FROM dbo.ShoppingCart;
    

A Lekérdezéstár használata

A Lekérdezéstár részletes teljesítményadatokat gyűjt a lekérdezésekről, a végrehajtási tervekről és a futtatókörnyezeti statisztikákról.

Az SQL Server 2022 (16.x) előtt a lekérdezéstár alapértelmezés szerint nincs engedélyezve, és az ALTER DATABASE-ben engedélyezhető:

ALTER DATABASE AdventureWorks2022
    SET QUERY_STORE = ON;

Futtassa a következő lekérdezést a lekérdezéstárban található lekérdezésekkel és tervekkel kapcsolatos információk visszaadásához:

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;

Dinamikus felügyeleti nézetek lekérdezése

A dinamikus felügyeleti nézetek a kiszolgáló állapotadatait adják vissza, amelyek felhasználhatók a kiszolgálópéldány állapotának monitorozására, a problémák diagnosztizálására és a teljesítmény finomhangolására.

A dm_os_wait statisztikai adatait tartalmazó dinamikus felügyeleti nézet lekérdezése:

SELECT wait_type,
       wait_time_ms
FROM sys.dm_os_wait_stats;