J'aimerais mettre en œuvre (SQL Server 2014) Index ColumnStore en cluster sur certaines très grandes tables larges. Aurai-je besoin de plus RAM== pour supporter cela? Si oui, comment puis-je déterminer combien?
Il y a quelques aspects à considérer:
Quant à votre question de 'aurai-je besoin de plus de RAM' puis que la réponse est probablement non non, car le moteur utilisera tout ce que RAM est disponible lorsque vous créez l'index, sauf si vous créez sévèrement. contraint. http://www.nikoport.com/2014/06/21/clustered-columnstore-indexes-par-31-memory-Pressure-and-row-group-size/
Plus RAM par opposition à quoi? Comparé à un indice en cluster normal, les données sont fortement compressées, afin de prendre moins de mémoire lors de la requête. Toutefois, le processus de construction de la CCI peut être très intensif de mémoire. . Voir la Documentation du produit
Planifiez une mémoire suffisante pour créer des index de colonne en parallèle Création d'un indice de colonne de colonne est par défaut une opération parallèle à moins que la mémoire ne soit contrainte. La création de l'indice en parallèle nécessite plus de mémoire que la création de l'index en série. Lorsqu'il y a une grande mémoire, la création d'un indice de colonne prend l'ordre de 1,5 fois aussi longtemps que la construction d'un arbre B sur les mêmes colonnes.
La mémoire requise pour la création d'un indice de colonne dépend du nombre de colonnes, du nombre de colonnes de chaîne, du degré de parallélisme (DOP) et des caractéristiques des données. Par exemple, si votre table a moins d'un million de lignes, SQL Server n'utilisera qu'un seul thread pour créer l'index de colonne.
Si votre table dispose de plus d'un million de lignes, mais SQL Server ne peut pas obtenir une subvention de mémoire suffisante pour créer l'index à l'aide de MaxDop, SQL Server diminuera automatiquement MaxDop au besoin pour s'adapter à la subvention de la mémoire disponible. Dans certains cas, DOP doit être réduite à l'une afin de construire l'index sous la mémoire contrainte.
Mendosi a déjà été indiqué par Mendosi: la piscine d'objets de colonne est située à l'extérieur du pool tampon. Voir le blog qu'il a lié.
La question est un peu floue.
Voulez-vous que le piscine tampon ait la même mémoire disponible lorsque vous commencez à utiliser des index de colonne? Si oui, alors:
D'autre part, si vous allez bien avec la piscine tampon, obtenez moins de mémoire et/ou vous ne pouvez pas augmenter la mémoire sur la machine - diminuez le réglage de la mémoire max de l'instance, car vous aurez besoin de la mémoire pour le pool d'objets de colonne.
Dans tous les cas, je recommande de surveiller l'utilisation de la mémoire et la syntonisation de la mémoire de la machine et/ou le réglage de la mémoire max en conséquence. Comme point de départ, certains DMV:
SELECT * FROM sys.dm_os_sys_memory;
SELECT * FROM sys.dm_os_process_memory;
SELECT * FROM sys.dm_os_memory_broker_clerks; --undocumented DMV!
SELECT
name
,type
,memory_node_id
,pages_kb
,page_size_in_bytes
,virtual_memory_reserved_kb
,virtual_memory_committed_kb
,shared_memory_reserved_kb
,shared_memory_committed_kb
FROM
sys.dm_os_memory_clerks
ORDER BY
pages_kb DESC;