Bestimmen der korrekten Bucketanzahl für HashindizesDetermining the Correct Bucket Count for Hash Indexes

Beim Erstellen der speicheroptimierten Tabelle müssen Sie einen Wert für den BUCKET_COUNT-Parameter angeben.You must specify a value for the BUCKET_COUNT parameter when you create the memory-optimized table. Dieses Thema enthält Empfehlungen zum Bestimmen des geeigneten Werts für den BUCKET_COUNT-Parameter.This topic makes recommendations for determining the appropriate value for the BUCKET_COUNT parameter. Wenn Sie die richtige Bucketanzahl nicht ermitteln können, verwenden Sie einen nicht gruppierten Index.If you cannot determine the correct bucket count, use a nonclustered index instead. Ein ungültiger BUCKET_COUNT-Wert kann, insbesondere wenn er zu niedrig ist, die Arbeitsauslastungsleistung sowie die Wiederherstellungszeit der Datenbank erheblich beeinträchtigen.An incorrect BUCKET_COUNT value, especially one that is too low, can significantly impact workload performance, as well as recovery time of the database. Es ist besser, die Bucketanzahl zu überschätzen.It is better to overestimate the bucket count.

Doppelte Indexschlüssel können bei Verwendung eines Hashindexes die Leistung beeinträchtigen, da die Schlüssel demselben Hashbucket hinzugefügt werden, wodurch die Kette dieses Buckets anwächst.Duplicate index keys can decrease performance with a hash index because the keys are hashed to the same bucket, causing that bucket's chain to increase.

Weitere Informationen zu nicht gruppierten Hashindizes finden Sie unter Hash Indexes und Guidelines for Using Indexes on Memory-Optimized Tables.For more information about nonclustered hash indexes, see Hash Indexes and Guidelines for Using Indexes on Memory-Optimized Tables.

Für jeden Hashindex in einer speicheroptimierten Tabelle wird eine Hashtabelle zugeordnet.One hash table is allocated for each hash index on a memory-optimized table. Die Größe der Hashtabelle zugeordnet, für ein Index, durch angegeben wird die BUCKET_COUNT Parameter im CREATE TABLE (Transact-SQL) oder CREATE TYPE (Transact-SQL) .The size of the hash table allocated for an index is specified by the BUCKET_COUNT parameter in CREATE TABLE (Transact-SQL) or CREATE TYPE (Transact-SQL). Die Bucketanzahl wird intern bis zur nächsten Zweierpotenz aufgerundet.The bucket count will internally be rounded up to the next power of two. Wenn als Bucketanzahl beispielsweise 300.000 angegeben wird, führt dies zu einer tatsächlichen Bucketanzahl von 524.288.For example, specifying a bucket count of 300,000 will result in an actual bucket count of 524,288.

Links zu einem Artikel und Videos zur Bucketanzahl finden Sie unter Bestimmen der richtigen Bucketanzahl für Hashindizes (In-Memory OLTP).For links to an article and video on bucket count, see How to determine the right bucket count for hash indexes (In-Memory OLTP).

EmpfehlungenRecommendations

In den meisten Fällen sollte die Bucketanzahl das Ein- bis Zweifache der Anzahl von unterschiedlichen Werten im Indexschlüssel betragen.In most cases the bucket count should be between 1 and 2 times the number of distinct values in the index key. Wenn der Indexschlüssel zahlreiche doppelte Werte enthält und durchschnittlich über 10 Zeilen für jeden Indexschlüsselwert vorhanden sind, verwenden Sie einen nicht gruppierten Index.If the index key contains a lot of duplicate values, on average there are more than 10 rows for each index key value, use a nonclustered index instead

Möglicherweise können Sie nicht immer prognostizieren, wie viele Werte ein bestimmter Indexschlüssel enthalten kann oder wird.You may not always be able to predict how many values a particular index key may have or will have. Die Leistung sollte akzeptabel sein, wenn der BUCKET_COUNT-Wert bis zum Fünffachen der tatsächlichen Anzahl von Schlüsselwerten beträgt.Performance should be acceptable if the BUCKET_COUNT value is within 5 times of the actual number of key values.

Verwenden Sie zum Ermitteln der Anzahl von eindeutigen Indexschlüsseln in vorhandenen Daten Abfragen wie in den folgenden Beispielen:To determine the number of unique index keys in existing data, use queries similar to the following examples:

Primärschlüssel und eindeutige IndizesPrimary Key and Unique Indexes

Da der Primärschlüsselindex eindeutig ist, entspricht die Anzahl unterschiedlicher Werte im Schlüssel der Anzahl der Zeilen in der Tabelle.Because the primary key index is unique, the number of distinct values in the key corresponds to the number of rows in the table. Geben Sie für einen Beispielprimärschlüssel für (SalesOrderID, SalesOrderDetailID) in der Tabelle "Sales.SalesOrderDetail" in der AdventureWorks-Datenbank die folgende Abfrage aus, um die Anzahl der unterschiedlichen Primärschlüsselwerte zu berechnen. Diese entspricht der Anzahl der Zeilen in der Tabelle.For an example primary key on (SalesOrderID, SalesOrderDetailID) in the table Sales.SalesOrderDetail in the AdventureWorks database, issue the following query to calculate the number of distinct primary key values, which corresponds to the number of rows in the table:

SELECT COUNT(*) AS [row count]   
FROM Sales.SalesOrderDetail  

Diese Abfrage enthält eine Zeilenanzahl von 121.317.This query shows a row count of 121,317. Verwenden Sie eine Bucketanzahl von 240.000, wenn sich die Zeilenanzahl nicht signifikant ändert.Use a bucket count of 240,000 if the row count will not change significantly. Verwenden Sie eine Bucketanzahl von 480.000, wenn Sie erwarten, dass sich die Anzahl der Bestellungen vervierfachen wird.Use a bucket count of 480,000 if the number of sales orders in the table is expected to quadruple.

Nicht eindeutige IndizesNon-Unique Indexes

Für andere Indizes, z. B. einen mehrspaltigen Index für (SpecialOfferID, ProductID), geben Sie die folgende Abfrage aus, um die Anzahl von eindeutigen Indexschlüsselwerten zu bestimmen:For other indexes, for example a multi-column index on (SpecialOfferID, ProductID), issue the following query to determine the number of unique index key values:

SELECT COUNT(*) AS [SpecialOfferID_ProductID index key count]  
FROM   
   (SELECT DISTINCT SpecialOfferID, ProductID   
    FROM Sales.SalesOrderDetail) t  

Diese Abfrage gibt für (SpecialOfferID, ProductID) die Indexschlüsselanzahl 484 zurück, was darauf hindeutet, dass ein nicht gruppierter Index anstelle eines nicht gruppierten Hashindexes verwendet werden sollte.This query returns an index key count for (SpecialOfferID, ProductID) of 484, indicating a that a nonclustered index should be used instead of a nonclustered hash index.

Bestimmen der Anzahl von DuplikatenDetermining the Number of Duplicates

Teilen Sie zum Bestimmen der durchschnittlichen Anzahl doppelter Werte für einen Indexschlüsselwert die Gesamtzeilenanzahl durch die Anzahl der eindeutigen Indexschlüssel.To determine the average number of duplicate values for an index key value, divide the total number of rows by the number of unique index keys.

Beim Beispielindex für (SpecialOfferID, ProductID) ist dies 121317/484 = 251.For the example index on (SpecialOfferID, ProductID), this leads to 121317 / 484 = 251. Dies bedeutet, dass der Durchschnitt von Indexschlüsselwerten 251 beträgt und es sich daher hier um einen nicht gruppierten Index handeln sollte.This means index key values have an average of 251, and thus this should be a nonclustered index.

Problembehandlung für die BucketanzahlTroubleshooting the Bucket Count

Bucketanzahl in speicheroptimierten Tabellen verwenden um beheben, Sys. dm_db_xtp_hash_index_stats (Transact-SQL) um Statistiken zu den leeren Buckets und die Länge der zeilenketten zu erhalten.To troubleshoot bucket count issues in memory-optimized tables, use sys.dm_db_xtp_hash_index_stats (Transact-SQL) to obtain statistics about the empty buckets and the length of row chains. Mit der folgenden Abfrage können Statistiken zu allen Hashindizes in der aktuellen Datenbank abgerufen werden.The following query can be used to obtain statistics about all the hash indexes in the current database. Die Abfrage kann einige Zeit in Anspruch nehmen, wenn die Datenbank große Tabellen enthält.The query can take several minutes to run if there are large tables in the database.

SELECT   
   object_name(hs.object_id) AS 'object name',   
   i.name as 'index name',   
   hs.total_bucket_count,  
   hs.empty_bucket_count,  
   floor((cast(empty_bucket_count as float)/total_bucket_count) * 100) AS 'empty_bucket_percent',  
   hs.avg_chain_length,   
   hs.max_chain_length  
FROM sys.dm_db_xtp_hash_index_stats AS hs   
   JOIN sys.indexes AS i   
   ON hs.object_id=i.object_id AND hs.index_id=i.index_id  

Zwei wichtige Indikatoren für den Zustand von Hashindizes lauten wie folgt:The two key indicators of hash index health are:

empty_bucket_percentempty_bucket_percent
empty_bucket_percent gibt die Anzahl der leeren Buckets im Hashindex an.empty_bucket_percent indicates the number of empty buckets in the hash index.

Wenn empty_bucket_percent kleiner als 10 Prozent ist, ist die Bucketanzahl wahrscheinlich zu niedrig.If empty_bucket_percent is less than 10 percent, the bucket count is likely to be too low. Im Idealfall sollte empty_bucket_percent mindestens 33 Prozent betragen.Ideally, the empty_bucket_percent should be 33 percent or greater. Wenn die Bucketanzahl der Anzahl der Indexschlüsselwerte entspricht, ist ca. 1/3 der Buckets aufgrund der Hashverteilung leer.If the bucket count matches the number of index key values, about 1/3 of the buckets is empty, due to hash distribution.

avg_chain_lengthavg_chain_length
avg_chain_length gibt die durchschnittliche Länge der Zeilenketten in den Hashbuckets an.avg_chain_length indicates the average length of the row chains in the hash buckets.

Wenn avg_chain_length größer als 10 und empty_bucket_percent größer als 10 Prozent ist, sind wahrscheinlich zahlreiche doppelte Indexschlüsselwerte vorhanden, und ein nicht gruppierter Index wäre besser geeignet.If avg_chain_length is greater than 10 and empty_bucket_percent is greater than 10 percent, there likely are many duplicate index key values and a nonclustered index would be more appropriate. Eine durchschnittliche Kettenlänge von 1 ist ideal.An average chain length of 1 is ideal.

Zwei Faktoren haben Auswirkungen auf die Kettenlänge:There are two factors that impact the chain length:

  1. Duplikate: Alle doppelten Zeilen sind Teil derselben Kette im Hashindex.Duplicates; all duplicate rows are part of the same chain in the hash index.

  2. Mehrere Schlüsselwerte wurden dem gleichen Bucket zugeordnet.Multiple key values map to the same bucket. Je niedriger die Bucketanzahl, desto mehr Buckets sind mehrere Werte zugeordnet.The lower the bucket count, the more buckets that will have multiple values mapped to them.

Betrachten Sie als Beispiel die folgende Tabelle und das Skript zum Einfügen von Beispielzeilen in der Tabelle:As an example, consider the following table and script to insert sample rows in the table:

CREATE TABLE [Sales].[SalesOrderHeader_test]  
(  
   [SalesOrderID] [uniqueidentifier] NOT NULL DEFAULT (newid()),  
   [OrderSequence] int NOT NULL,  
   [OrderDate] [datetime2](7) NOT NULL,  
   [Status] [tinyint] NOT NULL,  
  
PRIMARY KEY NONCLUSTERED HASH ([SalesOrderID]) WITH ( BUCKET_COUNT = 262144 ),  
INDEX IX_OrderSequence HASH (OrderSequence) WITH ( BUCKET_COUNT = 20000),  
INDEX IX_Status HASH ([Status]) WITH ( BUCKET_COUNT = 8),  
INDEX IX_OrderDate NONCLUSTERED ([OrderDate] ASC),  
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )  
GO  
  
DECLARE @i int = 0  
BEGIN TRAN  
WHILE @i < 262144  
BEGIN  
   INSERT Sales.SalesOrderHeader_test (OrderSequence, OrderDate, [Status]) VALUES (@i, sysdatetime(), @i % 8)  
   SET @i += 1  
END  
COMMIT  
GO  

Mit dem Skript werden 262.144 Zeilen in der Tabelle eingefügt.The script inserts 262,144 rows in the table. Das Skript fügt eindeutige Werte im Primärschlüsselindex und in "IX_OrderSequence" ein.It inserts unique values in the primary key index and in IX_OrderSequence. Es werden zahlreiche doppelte Werte im Index "IX_Status" eingefügt. Das Skript generiert nur 8 unterschiedliche Werte.It inserts a lot of duplicate values in the index IX_Status: the script only generates 8 distinct values.

Die Ausgabe der BUCKET_COUNT-Abfrage zur Problembehandlung lautet wie folgt:The output of the BUCKET_COUNT troubleshooting query is as follows:

Indexnameindex name total_bucket_counttotal_bucket_count empty_bucket_countempty_bucket_count empty_bucket_percentempty_bucket_percent avg_chain_lengthavg_chain_length max_chain_lengthmax_chain_length
IX_StatusIX_Status 88 44 5050 6553665536 6553665536
IX_OrderSequenceIX_OrderSequence 3276832768 1313 00 88 2626
PK_SalesOrd_B14003C3F8FB3364PK_SalesOrd_B14003C3F8FB3364 262144262144 9631996319 3636 11 88

Betrachten Sie die drei Hashindizes für diese Tabelle:Consider the three hash indexes on this table:

  • IX_Status: 50 Prozent der Buckets sind leer, was gut ist.IX_Status: 50 percent of the buckets are empty, which is good. Die durchschnittliche Kettenlänge ist jedoch sehr hoch (65.536).However, the average chain length is very high (65,536). Dies weist auf eine große Anzahl doppelter Werte hin.This indicates a large number of duplicate values. Die Verwendung eines nicht gruppierten Hashindexes ist in diesem Fall daher nicht sinnvoll.Therefore, using a nonclustered hash index is not appropriate in this case. Stattdessen sollte ein nicht gruppierter Index verwendet werden.A nonclustered index should be used instead.

  • IX_OrderSequence: 0 Prozent der Buckets sind leer, zu niedrig ist.IX_OrderSequence: 0 percent of the buckets are empty, which is too low. Darüber hinaus beträgt die durchschnittliche Kettenlänge 8.In addition, the average chain length is 8. Da die Werte in diesem Index eindeutig sind, bedeutet dies, dass durchschnittlich jedem Bucket 8 Werte zugeordnet sind.As the values in this index are unique, this means on average 8 values are mapped to each bucket. Die Bucketanzahl sollte erhöht werden.The bucket count should be increased. Da der Indexschlüssel 262.144 eindeutige Werte enthält, sollte die Bucketanzahl mindestens 262.144 betragen.As the index key has 262,144 unique values, the bucket count should be at least 262,144. Wenn zukünftiges Wachstum erwartet wird, sollte die Zahl größer sein.If future growth is expected, the number should be higher.

  • Primärschlüsselindex (pk__salesorder…): 36 Prozent der Buckets sind leer, was gut ist.Primary key index (PK__SalesOrder...): 36 percent of the buckets are empty, which is good. Außerdem beträgt die durchschnittliche Kettenlänge 1, was ebenfalls positiv ist.In addition the average chain length is 1, which is also good. Es ist keine Änderung erforderlich.No change needed.

Weitere Informationen zur Fehlerbehebung bei speicheroptimierten Hashindizes finden Sie unter Troubleshooting Common Performance Problems with Memory-Optimized Hash Indexes.For more information on troubleshooting issues with your memory-optimized hash indexes, see Troubleshooting Common Performance Problems with Memory-Optimized Hash Indexes.

Ausführliche Überlegungen für die weitere OptimierungDetailed Considerations for Further Optimization

Dieser Abschnitt enthält zusätzliche Überlegungen zum Optimieren der Bucketanzahl.This section outlines further considerations for optimizing the bucket count.

Um die optimale Leistung von Hashindizes zu gewährleisten, müssen Sie ein Gleichgewicht zwischen dem Speicherplatz, der der Hashtabelle im Arbeitsspeicher zugeordnet ist, und der Anzahl der unterschiedlichen Werte im Indexschlüssel finden.To achieve the best performance for hash indexes, balance the amount of memory allocated to the hash table and the number of distinct values in the index key. Zudem besteht ein Zusammenhang zwischen der Leistung von Punktsuchen und Tabellenscans:There is also a balance between the performance of point lookups and table scans:

  • Je höher der Wert für die Bucketanzahl ist, desto mehr leere Buckets sind im Index enthalten.The higher the bucket count value, the more empty buckets there will be in the index. Dies hat Auswirkungen auf die Speicherauslastung (8 Bytes pro Bucket) und die Leistung von Tabellenscans, da jeder Bucket als Teil eines Tabellenscans überprüft wird.This has an impact on memory usage (8 bytes per bucket) and the performance of table scans, as each bucket is scanned as part of a table scan.

  • Je niedriger die Bucketanzahl, desto mehr Werte sind einem einzelnen Bucket zugewiesen.The lower the bucket count, the more values are assigned to a single bucket. Dadurch wird die Leistung für Punktsuchen und Einfügungen verringert, da SQL ServerSQL Server möglicherweise mehrere Werte in einem einzelnen Bucket durchlaufen muss, um den durch das Suchprädikat angegebenen Wert zu finden.This decreases performance for point lookups and inserts, because SQL ServerSQL Server may need to traverse several values in a single bucket to find the value specified by the search predicate.

Wenn die Bucketanzahl deutlich niedriger als die Anzahl der eindeutigen Indexschlüssel ist, werden jedem Bucket zahlreiche Werte zugeordnet.If the bucket count is significantly lower than the number of unique index keys, many values will map to each bucket. Dadurch wird die Leistung der meisten DML-Vorgänge beeinträchtigt, insbesondere von Punktsuchen (Suchen nach einzelnen Indexschlüsseln) und Einfügevorgängen.This degrades performance of most DML operations, particularly point lookups (lookups of individual index keys) and insert operations. Beispielsweise lässt sich eine Leistungsminderung bei SELECT-Abfragen sowie UPDATE- und DELETE-Vorgängen mit Gleichheitsprädikaten feststellen, durch die die Indexschlüsselspalten in der WHERE-Klausel verglichen werden.For example, you may see poor performance of SELECT queries and, UPDATE and DELETE operations with equality predicates matching the index key columns in the WHERE clause. Eine niedrige Bucketanzahl hat außerdem Auswirkungen auf die Dauer der Datenbankwiederherstellung, da die Indizes beim Datenbankstart neu erstellt werden.A low bucket count will also affect the recovery time of the database, as the indexes are recreated on database startup.

Doppelte IndexschlüsselwerteDuplicate Index Key Values

Doppelte Werte können die Auswirkungen auf die Leistung durch Hashkonflikte verstärken.Duplicate values can increase the performance impact of hash collisions. Dies stellt normalerweise kein Problem dar, wenn jeder Indexschlüssel eine geringe Anzahl von Duplikaten aufweist.This is usually not a problem if each index key has a low number of duplicates. Es kann jedoch problematisch werden, wenn die Diskrepanz zwischen der Anzahl eindeutiger Indexschlüssel und der Anzahl der Tabellenzeilen erheblich zunimmt.But this can be a problem if the discrepancy between the number of unique index keys and the number of rows in the tables becomes very large.

Alle Zeilen mit dem gleichen Indexschlüssel werden der gleichen Duplikatkette zugewiesen.All rows with the same index key will go into the same duplicate chain. Wenn ein Bucket aufgrund eines Hashkonflikts mehrere Indexschlüssel enthält, müssen Indexscanner immer die vollständige Duplikatkette nach dem ersten Wert durchsuchen, bevor die erste Zeile gesucht werden kann, die dem zweiten Wert entspricht.If multiple index keys are in the same bucket due to a hash collision, index scanners always need to scan the full duplicate chain for the first value before they can locate the first row corresponding to the second value. Doppelte Schlüssel erschweren der Garbage Collection zusätzlich die Suche nach der entsprechenden Zeile.Duplicate keys also make it more difficult for garbage collection to locate the row. Beispiel: Wenn für einen Schlüssel 1.000 Duplikate vorhanden sind und eine der Zeilen gelöscht wird, muss der Garbage Collector die gesamte Kette von 1.000 Duplikaten überprüfen, um die Verknüpfung der Zeile mit dem Index aufzuheben.For example, if there are 1,000 duplicates for any key and one of the rows is deleted, the garbage collector needs to scan the chain of 1,000 duplicates to unlink the row from the index. Dies gilt selbst dann, wenn die Abfrage, durch die die gelöschte Zeile gefunden wurde, einen effizienteren Index (Primärschlüsselindex) zum Suchen der Zeile verwendet hat, weil der Garbage Collector die Verknüpfung mit jedem Index aufheben muss.This is true even if the query that found the delete used a more efficient index (a primary key index) to locate the row, because the garbage collector needs to unlink from every index

Bei Hashindizes gibt es zwei Möglichkeiten, den durch doppelte Indexschlüsselwerte verursachten Aufwand zu reduzieren:For hash indexes, there are two ways to reduce the work caused by duplicate index key values:

  • Verwenden Sie stattdessen einen nicht gruppierten Index.Use a nonclustered index instead. Sie können die Duplikate verringern, indem Sie dem Indexschlüssel Spalten hinzufügen, ohne dass Änderungen an der Anwendung erforderlich sind.You can decrease the duplicates by adding columns to the index key without requiring any changes to the application.

  • Geben Sie eine sehr hohe Bucketanzahl für den Index an.Specify a very high bucket count for the index. Beispielsweise das 20- bis 100-fache der Anzahl der eindeutigen Indexschlüssel.For example, 20-to-100 times the number of unique index keys. Dadurch werden Hashkonflikte verringert.This will reduce hash collisions.

Kleine TabellenSmall Tables

Bei kleineren Tabellen ist die Arbeitsspeicherauslastung normalerweise kein Problem, da die Indexgröße im Vergleich zur Gesamtgröße der Datenbank gering ist.For smaller tables, memory utilization is usually not a concern, as the size of the index will be small compared to the overall size of the database.

Sie müssen nun auf Grundlage der gewünschten Leistung eine Auswahl treffen:You must now make a choice based on the kind of performance you want:

  • Wenn es sich bei den leistungskritischen Vorgängen für den Index vorwiegend um Punktsuchen und/oder Einfügevorgänge handelt, ist eine höhere Bucketanzahl sinnvoll, um die Wahrscheinlichkeit von Hashkonflikten zu reduzieren.If the performance-critical operations on the index are predominantly point lookups and/or insert operations, a higher bucket count would be appropriate to reduce the likelihood of hash collisions. Das Dreifache der Zeilenanzahl oder sogar ein höherer Wert ist hier die beste Option.Three times the number of rows or even more would be the best option.

  • Wenn es sich bei den wichtigsten leistungskritischen Vorgängen um vollständige Indexscans handelt, verwenden Sie eine Bucketanzahl, die nah an der tatsächlichen Anzahl von Indexschlüsselwerten liegt.If full index scans are the predominant performance-critical operations, use a bucket count that is close to the actual number of index key values.

Große TabellenBig Tables

Bei großen Tabellen kann die Arbeitsspeicherauslastung zu einem Problem werden.For large tables, memory utilization could become a concern. Beispielsweise ist der Mehraufwand für die Hashtabellen mit einer Tabelle von 250 Millionen Zeilen, die 4 Hashindizes, jeder mit einer Bucketanzahl von einer Milliarde, 4 Indizes * 1 Milliarde Buckets * 8 Bytes = 32 GB Arbeitsspeicher.For example, with a 250 million row table that has 4 hash indexes, each with a bucket count of one billion, the overhead for the hash tables is 4 indexes * 1 billion buckets * 8 bytes = 32 gigabytes of memory utilization. Wenn eine Bucketanzahl von 250 Millionen für jeden der Indizes ausgewählt wird, beträgt die benötigte Leistung für die Hashtabellen 8 GB.When choosing a bucket count of 250 million for each of the indexes, the total overhead for the hash tables will be 8 gigabytes. Beachten Sie, dass dies zusätzlich zu den 8 Bytes speicherauslastung jeder Index ist von jeder einzelnen Zeile, 8 GB in diesem Szenario wird hinzugefügt (4 Indizes * 8 Byte * 250 Millionen Zeilen).Note that this is in addition to the 8 bytes of memory usage each index adds to each individual row, which is 8 gigabytes in this scenario (4 indexes * 8 bytes * 250 million rows).

Vollständige Tabellenscans befinden sich normalerweise nicht im leistungskritischen Pfad für OLTP-Arbeitsauslastungen.Full table scans are not usually in the performance-critical path for OLTP workloads. Daher muss eine Wahl zwischen Arbeitsspeicherauslastung und Leistung von Punktsuchen und Einfügevorgängen getroffen werden:Therefore, the choice is between memory utilization versus performance of point lookup and insert operations:

  • Wenn die Arbeitsspeicherauslastung wichtig ist, wählen Sie eine Bucketanzahl aus, die nahe an der Anzahl der Indexschlüsselwerte liegt.If memory utilization is a concern, choose a bucket count close to the number of index key values. Die Bucketanzahl sollte nicht deutlich niedriger sein als die Anzahl der Indexschlüsselwerte, da dies Auswirkungen auf die meisten DML-Vorgänge sowie die Zeit hat, die zum Wiederherstellen der Datenbank nach einem Neustart des Servers benötigt wird.The bucket count should not be significantly lower than the number of index key values, as this impacts most DML operations as well the time it takes to recover the database after server restart.

  • Beim Optimieren der Leistung für Punktsuchen ist eine höhere Bucketanzahl (das Zwei- oder Dreifache der Anzahl von eindeutigen Indexwerten) angemessen.When optimizing the performance for point lookups, a higher bucket count of two or even three times the number of unique index values would be appropriate. Eine höhere Bucketanzahl würde eine erhöhte Speicherauslastung bedeuten und die benötigte Zeit für einen vollständigen Indexscan verlängern.A higher bucket count would mean an increased memory utilization and an increase in the time required for a full index scan.

Siehe auchSee Also

Indizes für speicheroptimierte TabellenIndexes on Memory-Optimized Tables