ApsaraDB for MongoDB 8.3 introduit des commandes granulaires pour la suppression de shards, la journalisation des requêtes lentes en cours d'exécution, le suivi de la mémoire par opération et de nouvelles expressions d'agrégation.
Pour consulter le journal des modifications de la communauté, reportez-vous aux notes de version de MongoDB 8.3.
Vue d'ensemble
ApsaraDB for MongoDB 8.3 inclut les modifications suivantes :
-
Nouvelles fonctionnalités
-
Optimisations
Pour le journal complet des modifications de la communauté, consultez les notes de version de MongoDB 8.3.
Améliorations de l'agrégation
Accès à l'index du tableau
Les opérateurs $map, $filter et $reduce exposent désormais l'index de l'élément courant. Liez-le à une variable avec arrayIndexAs ou utilisez la variable intégrée $$IDX.
// Add a 1-based "rank" field to each element
db.scores.aggregate([
{ $project: {
ranked: { $map: {
input: "$items",
as: "item",
arrayIndexAs: "i",
in: { value: "$$item", rank: { $add: ["$$i", 1] } }
}}
}}
])
Nouvelles expressions
|
Expression |
Objectif |
Cas d'utilisation |
|---|---|---|
|
$subtype |
Renvoie le sous-type BinData |
Distinguer les UUID des champs binaires génériques |
|
$createObjectId |
Génère un ObjectId aléatoire dans un pipeline |
Attribuer des ID lors de $merge ou $out sans aller-retour client |
|
$hash / $hexHash |
Produit des hachages MD5, SHA-256 ou XXH64 |
Calculer des empreintes de contenu ou des clés de partition côté serveur |
|
$serializeEJSON / $deserializeEJSON |
Convertit entre BSON et Extended JSON |
Analyser les chaînes JSON stockées en tant que champs texte pour les reconvertir en BSON typé |
Conversions de types élargies
$toString gère désormais les objets, les tableaux, les expressions régulières, MaxKey, MinKey et les horodatages.
$convert ajoute un paramètre base pour les conversions de chaînes/nombres en bases 2, 8, 10 et 16.
Nouvelles conversions $toArray (chaîne vers tableau, binData vers tableau numérique) et $toObject (chaîne vers objet). Consultez Convertir binData en tableau.
Refonte de la gestion des shards
Suppression granulaire des shards
|
Étape |
Commande |
Description |
|---|---|---|
|
Démarrage |
startShardDraining |
Démarre la migration des chunks hors du shard cible |
|
Pause |
stopShardDraining |
Interrompt la migration ; le shard reste dans le cluster |
|
Surveillance |
shardDrainingStatus |
Renvoie la progression de la migration et le nombre de chunks restants |
|
Validation |
commitShardRemoval |
Finalise la suppression une fois le vidage terminé |
Exigence de routage DDL
Améliorations de la surveillance et du diagnostic
Journalisation des requêtes lentes en cours
Les requêtes lentes sont désormais journalisées pendant leur exécution, et non plus seulement après leur achèvement. Chaque requête est journalisée une fois lorsqu'elle dépasse le seuil défini.
Définissez le seuil avec --defaultSlowInProgMS au démarrage, ou à l'exécution :
db.setProfilingLevel(1, { slowms: 100, slowinprogms: 3000 })
Chaque entrée de journal inclut un originalQueryShapeHash qui relie le journal au niveau du shard à la requête d'origine sur mongos.
Suivi de la mémoire par opération
Deux nouveaux champs apparaissent dans $currentOp, db.currentOp(), le profileur, les journaux de requêtes lentes, la sortie explain et PlanCache.list() :
|
Champ |
Description |
|---|---|
|
inUseTrackedMemBytes |
Mémoire actuellement consommée par l'opération |
|
peakTrackedMemBytes |
Mémoire maximale consommée par l'opération |
Utilisez ces champs pour identifier les requêtes gourmandes en mémoire et définir des limites appropriées.
queryStats sur les serveurs de shards
Lorsque queryStats est activé, les serveurs de shards incluent désormais les requêtes transférées depuis mongos. Dans les versions précédentes, ces requêtes étaient invisibles au niveau du shard.
Sortie serverStatus sélective
De nouvelles métriques couvrent les extensions d'agrégation, les sections critiques de shard, les opérations TTL, la recherche vectorielle, la latence du récupérateur d'oplog de réplication et l'admission à la file d'attente d'exécution.
Utilisez le nouveau flag none: 1 pour supprimer toutes les sections facultatives et opter sélectivement pour celles souhaitées :
db.runCommand({ serverStatus: 1, none: 1, locks: 1 })
Utilisez lockContentionMetrics: 1 pour inclure les données de contention de verrous à la demande.
Le champ service a été supprimé de la sortie serverStatus.
Augmentation de la rétention FTDC
Le plafond par défaut du répertoire de diagnostic FTDC passe de 200 Mo à 500 Mo. connPoolStats est désormais collecté pour mongod.
Performances et paramètres système
Plafonds de ressources avant authentification
Trois nouveaux paramètres limitent les ressources consommées par les connexions non authentifiées :
|
Paramètre |
Objectif |
|---|---|
|
capMemoryConsumptionForPreAuthBuffers |
Plafonne la mémoire totale pour les tampons pré-authentification |
|
messageSizeErrorRateSec |
Limiter le taux des réponses d'erreur liées à la taille des messages |
|
preAuthMaximumMessageSizeBytes |
Limite la taille maximale du corps du message avant authentification |
Ces paramètres protègent les instances contre l'épuisement des ressources causé par les attaques par inondation de connexions.
Récupération automatique en cas de pression sur le cache
cachePressureQueryPeriodMilliseconds contrôle la fréquence à laquelle le moteur de stockage vérifie la pression sur le cache. Lorsqu'une pression est détectée, les transactions les plus anciennes sont automatiquement abandonnées pour libérer de l'espace dans le cache.
Sélection de serveur consciente de la surcharge
Lorsque overloadAwareServerSelectionEnabled est activé, un client qui reçoit une erreur SystemOverloadedError réessaie automatiquement auprès d'un autre nœud.
Cinq paramètres permettent d'affiner le backoff des tentatives pour les connexions internes entre mongos et mongod :
|
Paramètre |
Contrôle |
|---|---|
|
defaultClientBaseBackoffMillis |
Délai initial de nouvelle tentative |
|
defaultClientMaxBackoffMillis |
Délai maximal de nouvelle tentative |
|
defaultClientRetryAttempts |
Nombre maximal de tentatives |
|
shardRetryTokenBucketCapacity |
Taille du pool de jetons de nouvelle tentative en cas de surcharge par shard |
|
shardRetryTokenReturnRate |
Taux de retour des jetons lors des requêtes réussies |
Exemptions de limitation du débit entrant
ingressRequestRateLimiterApplicationExemptions exempte certaines applications (par appName) des limites de débit entrant. Définissez le nom de l'application dans la chaîne de connexion :
mongodb://server:27017/db?appname=mongodump
Contrôle de l'impact du profileur
Deux paramètres empêchent le profileur de dégrader les performances en production :
|
Paramètre |
Objectif |
|---|---|
|
internalQueryGlobalProfilingLockDeadlineMs |
Délai d'expiration global pour le verrou de profilage |
|
internalProfilingMaxAbandonedWritesPerSecondPerDb |
Plafond des écritures de profileur abandonnées par base de données et par seconde |
Surveillez la surcharge du profileur avec profiler.totalAbandonedWrites et profiler.dbsPastThreshold dans serverStatus.
Modifications des index
Mise à niveau de la version par défaut 2dsphere
La version par défaut 2dsphereVersion passe de 3 à 4.
Avant de rétrograder FCV en dessous de 8,3, supprimez d'abord tous les index 2dsphere de version 4.
Priorité GeoJSON dans la génération d'index
Lorsqu'un document contient à la fois des coordonnées GeoJSON et des coordonnées numériques héritées, la génération d'index privilégie désormais GeoJSON. Si vous dépendez des coordonnées héritées dans les index existants, reconstruisez ces index après la mise à niveau.
Modifications des séries temporelles
|
Modification |
Détail |
|---|---|
|
Contrainte de clé de shard |
refineCollectionShardKey sur les collections de séries temporelles exige désormais que la clé de shard référence les champs de métadonnées logiques et de temps. Les clés au format bucket ne sont plus acceptées. |
|
Nommage des index |
Les index de séries temporelles ne peuvent plus être nommés _id_, et _id_ ne peut pas être utilisé comme indice (hint). |
|
Nommage de timeField |
Un nom timeField ne peut plus commencer par $. |
Changements de comportement
|
Domaine |
Modification |
Comportement précédent |
|---|---|---|
|
Codes d'erreur Upsert |
Les upserts produisant des objets BSON > 16 Mo renvoient le code d'erreur 10334 (BSONObjectTooLarge) |
Renvoyait 17419 ou 17420 |
|
validate |
validate vérifie la présence de documents dépassant 16 Mo. validate(full=true) n'active plus automatiquement checkBSONConformance. |
Aucune vérification de 16 Mo ; la validation complète activait la conformité BSON |
|
Arithmétique des dates |
$dateAdd / $dateSubtract avec des unités non millisecondes et des dates antérieures à l'époque peuvent renvoyer des résultats avec une seconde de retard |
Plus rapide mais moins précis |
|
Analyse des flottants |
La plage complète des nombres à virgule flottante en double précision (y compris les subnormaux comme 7.08263e-317) peut désormais être analysée |
Subnormaux rejetés |
|
Plafond de caractères $trim |
L'argument chars de $trim, $ltrim et $rtrim est plafonné à 4 096 caractères |
Aucun plafond |
|
$mergeObjects |
Peut désormais être utilisé à l'intérieur de $setWindowFields |
Non pris en charge |
|
Mémoire TextOr |
L'étape TextOr ($text scoring) est plafonnée à 100 Mo ; débordement sur disque lorsque allowDiskUse est true |
Aucun plafond |
|
explain sur une base de données inexistante |
explain() sur une base de données inexistante dans un cluster sharded ne crée plus implicitement la base de données |
Base de données créée implicitement |
|
config.csrs.indexes |
La collection système config.csrs.indexes a été supprimée |
Présente |
|
findShardsOnConfigTimeoutMS |
Nouveau paramètre qui limite le temps de requête sur config.shards |
Aucun délai d'expiration |