Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Ezek a statisztikák hasznosak a hash indexek vödörszámának megértéséhez és hangolásához a memóriaoptimalizált táblázatokban. Használható olyan esetek felismerésére is, amikor az indexkulcs sok másolatot tartalmaz.
Egy nagy átlagos lánchossz azt jelzi, hogy sok sor ugyanahhoz a vödörbe van hashelve. Ez megtörténhet, mert a következők:
Ha az üres vödrök száma alacsony, vagy az átlagos és maximális lánchossz hasonló, akkor valószínű, hogy a teljes vödr száma túl alacsony. Ez sok különböző indexkulcsot eredményez, hogy ugyanabba a vödörbe hashel.
Ha az üres vödrök száma magas, vagy a maximális lánchossz magas az átlagos lánchosszhoz képest, két valószínű magyarázat létezik. Sok sor van, ahol duplikált indexkulcs értékek vannak, vagy a kulcsértékek torzítása van. Mindkét esetben minden sor, amelynek azonos indexkulcsértéke van, ugyanabba a vödörbe hash, ami hosszú lánchosszhoz vezet abban a vödörben.
A hosszú lánchosszok jelentősen befolyásolhatják az egyes sorokon végzett DML műveletek teljesítményét, beleértve SELECT és INSERT. A rövid lánchosszok és a magas üres vödrös szám arra utalnak, hogy túl magas bucket_count. Ez csökkenti az indexvizsgálatok teljesítményét.
Figyelmeztetés
Ez a DMV az egész táblát átvizsgálja. Tehát ha nagy táblák vannak az adatbázisodban, sys.dm_db_xtp_hash_index_stats az hosszú időbe telhet.
További információért lásd: Hash indexek Memory-Optimized táblázatokhoz.
| Oszlop név | Típus | Description |
|---|---|---|
| object_id | int | Az anyatáblák objektumazonosítója. |
| xtp_object_id | bigint | A memóriaoptimalizált tábla azonosítója. |
| index_id | int | Az index azonosító. |
| total_bucket_count | bigint | Az indexben lévő hash bucketek teljes száma. |
| empty_bucket_count | bigint | Az indexben lévő üres hash vödrök száma. |
| avg_chain_length | bigint | A sorláncok átlagos hossza az index összes hash vödörén át. |
| max_chain_length | bigint | A hash vödörökben lévő sorláncok maximális hossza. |
| xtp_object_id | bigint | A In-Memory OLTP objektumazonosító, amely megfelel a memóriaoptimalizált táblának. |
Permissions
A VIEW DATABASE STATE engedélyre van szükség az adatbázisban.
Engedélyek az SQL Server 2022-hez és újabb verziókhoz
Az adatbázishoz a VIEW DATABASE PERFORMANCE STATE engedélyre van szükség.
Példák
A. Keresés hash index bucket count
A következő lekérdezés segítségével elháríthatja egy meglévő tábla hash index bucket számát. A lekérdezés statisztikákat ad vissza az üres vödrök százalékáról és lánchosszáról az összes hash indexhez a felhasználói táblákon.
SELECT
QUOTENAME(SCHEMA_NAME(t.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(h.object_id)) as [table],
i.name as [index],
h.total_bucket_count,
h.empty_bucket_count,
FLOOR((
CAST(h.empty_bucket_count as float) /
h.total_bucket_count) * 100)
as [empty_bucket_percent],
h.avg_chain_length,
h.max_chain_length
FROM sys.dm_db_xtp_hash_index_stats as h
INNER JOIN sys.indexes as i
ON h.object_id = i.object_id
AND h.index_id = i.index_id
INNER JOIN sys.memory_optimized_tables_internal_attributes ia ON h.xtp_object_id=ia.xtp_object_id
INNER JOIN sys.tables t on h.object_id=t.object_id
WHERE ia.type=1
ORDER BY [table], [index];
A lekérdezés eredményeinek értelmezéséről a részletekért lásd: Troubleshooting Hash Indexes for Memory-Optimized Tables.
B. Hash index statisztikák belső táblákhoz
Bizonyos funkciók belső táblázatokat használnak, amelyek hash indexeket használnak, például columnstore indexeket memóriaoptimalizált táblákon. A következő lekérdezés a felhasználói táblákhoz kapcsolt belső táblák hash indexeinek statisztikáit adja.
SELECT
QUOTENAME(SCHEMA_NAME(t.schema_id)) + N'.' + QUOTENAME(OBJECT_NAME(h.object_id)) as [user_table],
ia.type_desc as [internal_table_type],
i.name as [index],
h.total_bucket_count,
h.empty_bucket_count,
h.avg_chain_length,
h.max_chain_length
FROM sys.dm_db_xtp_hash_index_stats as h
INNER JOIN sys.indexes as i
ON h.object_id = i.object_id
AND h.index_id = i.index_id
INNER JOIN sys.memory_optimized_tables_internal_attributes ia ON h.xtp_object_id=ia.xtp_object_id
INNER JOIN sys.tables t on h.object_id=t.object_id
WHERE ia.type!=1
ORDER BY [user_table], [internal_table_type], [index];
Az index belső táblák vödörszáma nem változtatható, ezért ennek a lekérdezésnek a kimenetét csak információs jellegűnek kell tekinteni. Nincs szükség műveletre.
Ez a lekérdezés nem várható, hogy sorokat adjon, hacsak nem használsz olyan funkciót, amely hash indexeket használ belső táblákon. Az alábbi memóriaoptimalizált táblázat egy oszloptároló indexet tartalmaz. A táblázat létrehozása után hash indexeket fogsz látni a belső táblákon.
CREATE TABLE dbo.table_columnstore
(
c1 INT NOT NULL PRIMARY KEY NONCLUSTERED,
INDEX ix_columnstore CLUSTERED COLUMNSTORE
) WITH (MEMORY_OPTIMIZED=ON);
Kapcsolódó tartalom
- Bevezetés a Memory-Optimized-táblák használatába
- Memory-Optimized Table dinamikus menedzsment nézetek
- SQL Server és Azure SQL index architektúra és tervezési útmutató: Hash index tervezési irányelvek
- In-Memory OLTP áttekintése és használati forgatókönyvek
- Hash indexek elhanyagolása Memory-Optimized táblákhoz
- Teljesítmény optimalizálása memóriabeli technológiákkal az Azure SQL Database
- Teljesítmény optimalizálása memóriabeli technológiákkal a felügyelt Azure SQL-példányokban