Hologres V1.3.37 et les versions ultérieures prennent en charge la hiérarchisation du stockage pour les données chaudes et froides, afin de vous aider à gérer efficacement les niveaux de données. Cette rubrique explique comment utiliser la hiérarchisation du stockage.
Introduction
Hologres propose deux types de stockage : Standard et Infrequent Access.
Le stockage Standard repose entièrement sur des SSD (stockage chaud). Il s'agit du type de stockage par défaut dans Hologres et il répond aux exigences d'accès aux données à faible latence et haute performance. Pour la plupart des scénarios, le stockage Standard constitue l'option la plus efficace et la plus rentable. Ce document le désigne sous le terme de stockage chaud.
Le stockage Infrequent Access repose entièrement sur des disques durs (HDD) (stockage froid). Il répond aux besoins de stockage à faible coût pour les données rarement consultées et convient aux très grands ensembles de données qui ne sont pas sensibles à la latence ou qui sont rarement accessibles. Ce document le désigne sous le terme de stockage froid.
Pour les instances primaire/secondaire, mettez à niveau vers Hologres V1.3.55 ou une version ultérieure pour activer le stockage froid.
Hologres prend également en charge la hiérarchisation du stockage au niveau des tables. Définissez dynamiquement le support de stockage pour les tables enfants de partition à l'aide de la fonctionnalité CREATE PARTITION TABLE.
À partir de Hologres V2.1, l'accélération par cache basée sur des SSD améliore la vitesse d'accès au stockage froid. Seul l'espace de cache alloué par défaut est pris en charge. L'accélération par cache est activée par défaut et multiplie les performances d'accès par plus de deux.
Prérequis
Seules les versions Hologres V1.3.37 et ultérieures prennent en charge la hiérarchisation du stockage chaud et froid. Si votre instance exécute une version antérieure, consultez le guide Common upgrade preparation failure errors ou rejoignez le groupe DingTalk Hologres pour fournir vos commentaires. Pour plus d'informations, consultez la rubrique How do I get more online support?.
Pour les instances par abonnement exécutant des versions antérieures, le quota de stockage Infrequent Access est défini par défaut sur 0 Go après la mise à niveau vers Hologres V1.3.37.
Notes
Le stockage des tables Hologres se compose des parties Data et Meta. La partie Data stocke vos données utilisateur, tandis que la partie Meta stocke les métadonnées de la table. Dans le cadre de la hiérarchisation du stockage, vous ne pouvez définir le support de stockage que pour la partie Data. Pour des raisons de performance, la partie Meta est toujours stockée dans le stockage chaud. Par conséquent, même si vous définissez la politique de stockage d'une table sur le stockage froid, celle-ci consomme toujours une petite quantité de stockage chaud et engendre des frais mineurs liés au stockage chaud.
Afin d'éviter tout impact sur vos services, les tâches de migration des données du stockage chaud vers le stockage froid s'exécutent avec une priorité faible. Après avoir modifié la politique de stockage Data d'une table, le changement ne prend pas effet immédiatement. Hologres effectue la migration des données de manière asynchrone en arrière-plan. Par défaut, la migration commence à minuit. À partir de Hologres V2.2, vous pouvez personnaliser l'heure de migration. Pour plus d'informations, consultez la rubrique Dynamic partition management.
Lors de l'écriture de nouvelles données dans une table de stockage froid, les données sont d'abord écrites dans le stockage chaud. Une tâche en arrière-plan les migre ensuite de manière asynchrone vers le stockage froid, ce qui engendre certains frais de stockage chaud.
En raison des limitations liées au temps de recherche sur disque, n'utilisez pas les tables de stockage froid pour des scénarios de requêtes ponctuelles, tels que les tables de dimension Flink ou les scénarios de service. Les tables de stockage froid offrent un débit en lecture inférieur de deux ordres de grandeur à celui des tables de stockage chaud.
Ne configurez pas les tables orientées ligne pour utiliser le stockage froid.
Lors de la conversion par lot des données du stockage chaud vers le stockage froid, tous les tablets de la table sont ouverts, ce qui augmente l'utilisation de la mémoire. Ne convertissez pas plus de 200 tables à la fois.
Créer des tables avec hiérarchisation du stockage
Lors de la création d'une table, spécifiez la politique de stockage des données en définissant le paramètre storage_mode dans SET_TABLE_PROPERTY. Pour plus d'informations, consultez la rubrique CREATE TABLE.
Tables non partitionnées
Définir la politique de stockage pour les tables non partitionnées
Pour les tables non partitionnées, utilisez SET_TABLE_PROPERTY pour définir la politique de stockage. Les options prises en charge sont les suivantes :
hot (stockage chaud).
cold (stockage froid).
Par exemple, pour configurer tbl1 afin qu'elle utilise le stockage froid, exécutez le code suivant :
-- Specify cold storage when creating the table
BEGIN;
CREATE TABLE tbl1 (
"id" INT NOT NULL,
"name" TEXT NOT NULL
);
CALL set_table_property('tbl1', 'storage_mode', 'cold');
COMMIT;
Modifier le support de stockage pour les tables non partitionnées
Hologres permet de modifier le support de stockage après la création de la table. Par exemple, pour passer tbl1 au stockage chaud, le système migre les données vers le stockage chaud de manière asynchrone. Exemple :
-- Change storage medium to hot storage after table creation
CALL set_table_property('tbl1', 'storage_mode', 'hot');
Tables partitionnées
Définir la politique de stockage pour les tables partitionnées
Les tables partitionnées utilisent également SET_TABLE_PROPERTY pour définir les politiques de stockage. Les partitions enfants héritent par défaut de la propriété de stockage de la table parente, mais elles peuvent également être configurées individuellement. Les options prises en charge sont les suivantes :
hot (stockage chaud).
cold (stockage froid).
Par exemple, la définition de la table de partition parente (tbl2) sur le stockage froid entraîne l'utilisation du stockage froid pour toutes ses partitions enfants (telles que tbl2_v1). Code :
-- Specify cold storage when creating the table
BEGIN;
CREATE TABLE tbl2(
c1 TEXT NOT NULL,
c2 TEXT
)
PARTITION BY LIST(c2);
CALL set_table_property('tbl2', 'storage_mode', 'cold');
CREATE TABLE tbl2_v1 PARTITION OF tbl2 FOR VALUES IN ('v1');
COMMIT;
Modifier le stockage pour les tables partitionnées
Hologres permet de modifier le support de stockage après la création de la table. Par exemple, le passage de la table de partition parente tbl2 au stockage chaud entraîne la migration asynchrone de toutes ses partitions enfants vers le stockage chaud. Exemple :
-- Change storage policy to hot storage after table creation
CALL set_table_property('tbl2', 'storage_mode', 'hot');
Pour définir une partition enfant spécifique sur le stockage froid, modifiez la propriété storage_mode de cette partition. Le système commence immédiatement à migrer cette partition vers le stockage froid. Exemple :
-- Create multiple child partitions
CREATE TABLE tbl2_v2 PARTITION OF tbl2 FOR VALUES IN ('v2');
CREATE TABLE tbl2_v3 PARTITION OF tbl2 FOR VALUES IN ('v3');
-- Query table properties; they currently inherit the parent's hot storage setting
SELECT * FROM hg_table_storage_status('public', 'tbl2');
-- Change a child partition to cold storage
CALL set_table_property('tbl2_v3', 'storage_mode', 'cold');
Gérer dynamiquement le support de stockage pour les tables partitionnées
Pour gérer intelligemment les supports de stockage des partitions, utilisez le partitionnement dynamique afin de définir des règles de transformation des données du stockage chaud vers le stockage froid. Cela permet une hiérarchisation intelligente du stockage qui équilibre efficacement le coût et la performance. Pour plus d'informations sur la gestion dynamique des partitions, consultez la rubrique Dynamic partition management.
Consulter l'état du support de stockage
Appelez la fonction hg_table_storage_status pour vérifier l'état du stockage de la table. La fonction hg_table_storage_status affiche uniquement la taille du stockage des données, à l'exclusion de la taille du stockage Meta. Utilisation :
SELECT * FROM hg_table_storage_status('<schema_name>', '<table_name>');
|
Paramètre |
Description |
|
|
Nom du schéma de la table |
|
|
Nom de la table |
Le résultat suivant est renvoyé :
Nom de la colonne | Contenu |
table_name |
|
hot_size | Taille du stockage chaud en octets |
cold_size | Taille du stockage froid en octets |
status | État :
|
Exemples :
-- Non-partitioned table
SELECT * FROM hg_table_storage_status('public', 'tbl1');-- returns size in bytes
table_name | hot_size | cold_size | status
------------+----------+---------------+--------
tbl1 | 145643 | 3685 | transferring
-- Parent partition table
SELECT * FROM hg_table_storage_status('public', 'tbl2');-- returns size in bytes
table_name | hot_size | cold_size | status
-----------------+----------+-----------+--------
tbl2_2022062222 | 0 | 0 | hot
tbl2_2022062221 | 1125 | 0 | hot
tbl2_2022062220 | 1245 | 0 | hot
tbl2_2022062219 | 1358 | 0 | hot
tbl2_2022062218 | 0 | 1875 | cold
tbl2_2022062217 | 0 | 1143 | cold
tbl2_2022062216 | 0 | 1299 | cold
Consulter la fréquence d'accès aux tables
À partir de Hologres V1.3.37, la table système de journaux hologres.hg_table_info collecte des statistiques quotidiennes sur les tables au sein d'une instance. Utilisez ces données pour afficher et analyser les informations des tables en vue d'une optimisation ciblée. Pour plus d'informations, consultez la rubrique View and analyze table statistics. Interrogez cette table pour obtenir le volume de stockage chaud/froid, la fréquence d'accès aux tables et la fréquence d'accès aux partitions, afin de décider s'il convient d'effectuer une conversion des données du stockage chaud vers le stockage froid. Requêtes d'exemple :
Tables non partitionnées
SELECT a.table_name,
(a.total_read_count - b.total_read_count) AS read_count,
(a.total_write_count - b.total_write_count) AS write_count,
a.hot_storage_size
FROM (SELECT * FROM hologres.hg_table_info
WHERE type='TABLE' AND collect_time::DATE = CURRENT_DATE - interval '1 day') a
JOIN
(SELECT * FROM hologres.hg_table_info
WHERE type='TABLE' AND collect_time::DATE = CURRENT_DATE - interval '${days} day') b
ON a.table_name = b.table_name
ORDER BY hot_storage_size DESC;
Tables partitionnées
Interroger toutes les partitions :
SELECT parent_table_name,COUNT(*) AS partition_cnt,
sum(hot_storage_size)/1024/1024/1024 AS hot_size_gb
FROM hologres.hg_table_info
WHERE type = 'PARTITION' AND collect_time::DATE = CURRENT_DATE - interval '1 day'
GROUP BY parent_table_name
ORDER BY hot_size_gb DESC;