2015-03-10 4 views
5

Nous exécutons un serveur Titan Graph DB soutenu par Cassandra comme un magasin persistant et rencontrons un problème avec l'atteinte de la limite sur les seuils tombstone Cassandra qui provoque nos requêtes d'échec/timeout périodiquement les données s'accumulent. Il semble que le compactage soit incapable de suivre le nombre de pierres tombales ajoutées.Cassandra Tombstoning seuils d'avertissement et de défaillance enfreints

Notre cas d'utilisation prend en charge:

  1. rendements élevés en lecture/écriture.
  2. Haute sensibilité aux lectures.
  3. Mises à jour fréquentes des valeurs de noeud dans Titan. la mise à jour des lignes à Cassandra.

Compte tenu des cas d'utilisation ci-dessus, nous optimisons déjà Cassandra à faire agressivement ce qui suit:

  1. compactage agressif en utilisant les stratégies de compactage nivelé
  2. Utilisation tombstone_compaction_interval 60 secondes.
  3. En utilisant tombstone_threshold à 0,01
  4. Réglage gc_grace_seconds pour être 1800

Malgré les optimisations suivantes, nous voyons toujours des avertissements dans la Cassandra se connecte similaires à: [WARN] (ReadStage: 7510) org .apache.cassandra.db.filter.SliceQueryFilter: Lit 0 live et 10350 cellules désactivées dans .graphindex (voir tombstone_warn_threshold). il a été demandé colonnes 8001, tranches = [00-ff], delInfo = {deletedAt = -9223372036854775808, localDeletion = 2147483647}

De temps en temps que le temps passe, nous voyons aussi le seuil d'échec violé et provoque des erreurs.

Notre fichier cassandra.yaml a le tombstone_warn_threshold à 10000, et le tombstone_failure_threshold à beaucoup plus élevé que recommandé à 250000, sans avantages notables.

Toute aide pouvant nous orienter vers les configurations correctes serait grandement appréciée s'il y a de la place pour d'autres optimisations. Merci d'avance pour votre temps et votre aide.

+0

Etes-vous fréquemment en train de supprimer des données? Je crois comprendre que les pierres tombales ne sont créées que si les données sont explicitement supprimées ou expirent. –

+0

Notre conviction est que Titan GraphDb qui gère toutes nos interactions avec Cassandra en interne pourrait faire des suppressions et de nouvelles créations pour chaque mise à jour, ce qui ajoute au nombre de suppressions. – Rohit

+0

Ce serait bien de confirmer si c'était le cas. Pourriez-vous activer le suivi probabiliste (http://www.datastax.com/documentation/cassandra/2.0/cassandra/tools/toolsSetTraceProbability.html) sur l'un de vos noeuds Cassandra pour voir les suppressions? Une autre possibilité est que les colonnes sont expirées (avec un TTL), pensez-vous que cela pourrait se produire ici aussi? –

Répondre

6

Les pierres tombales ne sont pas compactées avant que la configuration gc_grace_seconds sur une table ne se soit écoulée pour une pierre tombale donnée. Ainsi, même en augmentant votre intervalle de compactage, vos pierres tombales ne seront pas supprimées tant que gc_grace_seconds ne se sera pas écoulé, la valeur par défaut étant 10 jours. Vous pouvez essayer de régler gc_grace_seconds à une valeur inférieure et effectuer des réparations plus fréquemment (en général, vous souhaitez planifier des réparations chaque fois que gc_grace_seconds_in_days - 1 jours).

+0

Merci de votre retour Andy. Bon point que vous avez mentionné. Nous mettons aussi la seconde grâce à Gc. J'ai édité mon post pour refléter cette tentative de notre part aussi. – Rohit

7

On dirait que la racine de votre problème est votre modèle de données. Vous avez fait tout ce que vous pouvez faire pour atténuer l'obtention de TombstoneOverwhelmingException. Étant donné que votre modèle de données nécessite des mises à jour si fréquentes provoquant la création d'une pierre tombale, un magasin cohérent éventuel tel que Cassandra peut ne pas convenir à votre cas d'utilisation. Lorsque nous avons rencontré ce type de problèmes, nous avons dû modifier notre modèle de données pour mieux l'adapter aux forces de Cassandra.

A propos de http://www.slideshare.net/planetcassandra/8-axel-liljencrantz-23204252 (supprime les diapositives 34-39)

+1

Merci Curtis. Je vais regarder cela et voir s'il y a des changements que nous pouvons apporter au modèle de données. Une partie du problème est qu'avec l'utilisation du serveur graphique Titan, le modèle de données est extrait de nous. – Rohit

+1

Salut @Rohit Vous pouvez avoir une idée de la façon dont titan persiste les données de [ici] (http://s3.thinkaurelius.com/docs/titan/0.5.4/data-model.html). Fondamentalement, ce que nous avons dû faire est de minimiser les sommets et les arêtes supprimés. –

1

Les variables que vous avez Tuned vous aident expirez pierres tombales, mais il est intéressant de noter que si les pierres tombales ne peuvent être purgés jusqu'à gc_grace_seconds, Cassandra ne garantit pas que pierres tombales être purgé à gc_grace_seconds. En effet, les pierres tombales ne sont pas compactées jusqu'à ce que le sstable contenant la pierre tombale soit compacté, et même alors, il ne sera pas éliminé s'il y a un autre sstable contenant une cellule qui est ombrée. Il en résulte que les pierres tombales peuvent persister très longtemps, en particulier si vous utilisez des sstables qui sont rarement compactés (par exemple, des sstables STCS très volumineux). Pour résoudre ce problème, des outils existent tels que le point de terminaison JMX à forceUserDefinedCompaction - si vous n'êtes pas habitué à utiliser des points de terminaison JMX, les outils pour le faire pour vous exister automatiquement existent comme http://www.encql.com/purge-cassandra-tombstones/

1

Donc tout le monde ici a raison. Si vous réparez et compactez fréquemment vous réduisez votre nombre de gc_grace_seconds.

Il peut également être utile de considérer qu'insérer des valeurs Null est équivalent à une suppression. Cela augmentera votre nombre de pierres tombales. Au lieu de cela, vous devrez insérer le UNSET_VALUE si vous utilisez des instructions préparées. Probablement trop tard pour vous, mais si quelqu'un d'autre vient ici.