当前位置:网站首页>Tidb 6.0: rendre les GRT plus efficaces 丨 tidb Book Rush
Tidb 6.0: rendre les GRT plus efficaces 丨 tidb Book Rush
2022-06-30 03:20:00 【Tidb】
Auteur de cet article:h5n1,TiDBLes amoureux,Actuellement, il travaille à l'Institut de recherche sur les logiciels Unicom,asktug Page d'accueil
1. Préface
TiDB En tant que base de données distribuée,Noeuds de calcul tidb server Et les noeuds de stockage tikv/tiflash server Avec une extensibilité presque linéaire,Expansion directe en ligne lorsque les ressources sont insuffisantes.Mais en tant qu'ensemble du cerveau, PD Node parce que seulement leader Prestation de services,Impossible d'augmenter la puissance de traitement en étendant les noeuds comme les autres composants.
Pour l'instant TSO Principaux problèmes de distribution:
TSO Répartition par PD Leader Fourni par le noeud,Un grand nombre de demandes peuvent entraîner Leader Noeud CPU Utilisation accrue,Incidence sur les retards de transaction.
PD Follower Le noeud est essentiellement inactif,Faible utilisation des ressources du système.
TiDB Accès entre les centres de données PD Leader Heure,Les retards entre les centres de données augmentent les retards de transaction.
Pour la promotion TSO Performance de traitement pour certains scénarios TiDB Introduit TSO Follower Proxy、RC Read TSO Optimisation、Local TSO Caractéristiques équivalentes,Par extension PD Capacité de traitement et réduction TSO Comment demander,Augmenter le débit global,Réduire les délais de transaction.
2. TSO
TSO Est un horodatage monotone incrémental,Par PD leader Répartition.TiDB Obtenir au début de la transaction TSO En tant que start_ts、 Obtenir lors de la soumission TSO En tant que commit_ts,Dépendance TSO Mettre en œuvre la transaction MVCC.TSO Pour 64 Nombre entier de bits , Composé de parties physiques et logiques ,Élevé 48 La partie physique du BIT est unixtime Millisecondes ,Faible 18 La partie logique bitwise est un compteur numérique , En théorie, chaque seconde produit 262144000(C'est - à - dire: 2 ^ 18 * 1000)- Oui. TSO.

Pour garantir la performance PD Ne génère pas une demande à la fois TSO, Au lieu de cela, une fenêtre de temps assignable sera demandée à l'avance , La fenêtre de temps est l'heure actuelle et l'heure actuelle +3 Dans quelques secondes. TSO,Et sauvegardé dans etcd Intérieur, Vous pouvez ensuite assigner à partir de la fenêtre TSO. La fenêtre de mise à jour est déclenchée à intervalles réguliers .Quand PD Redémarrer ou leader Le commutateur passe de etcd Obtenir le maximum sauvegardé à l'intérieur TSO Début de la distribution,Pour garantir TSO Augmentation continue de .
3. Follower Proxy
Par défaut TSO Demande présentée par PD leader Traitement,TiDB Passage interne PD Client Vers PD leader Envoyer la demande obtenir TSO,PD client Les demandes reçues ne sont pas envoyées immédiatement à PD leader , Et emballer toutes les demandes reçues en même temps et les envoyer à PD leader,Puis par PD leader Retour d'un lot TSO.Parce qu'il n'y a que leader Prestation de services,tidb server ..Plus il y a de quantité, plus il y a de PD Client Et PD Leader Établir une connexion, Provoque un changement dans le traitement des demandes de connexion CPU Consommation élevée.En même temps follower Les noeuds ne passent que par raft Synchroniser les données et fournir des fonctions telles que les élections , Essentiellement inactif .
In 5.3.0 Introduction de la version TSO Follower Proxy Fonction,Après ouverture tidb De PD Client Il en choisira un au hasard PD Noeud(Y compris: leader Et follower )Envoyer TSO Demande,PD Follower Un lot de demandes sera reçu en tant que service mandataire par défaut PD Client Traitement TSO Mode package to send to leader Traitement,Pour réduire encore PD Client Et PD Leader Nombre d'interactions et PD leader Nombre de connexions pour,Pour réduire leader De CPU Charge.

En définissant des variables globales tidb_enable_tso_follower_proxy Pour true C'est prêt. PD follower De TSO Fonction d'agent,Cette fonction s'applique à tidb server Nombre élevé de demandes concurrentes ,PD leader Haute pression TSO Sur demande CPU Goulot d'étranglement,Cause TSO RPC Scénario de retard plus élevé demandé .
4. RC Read TSO Optimisation
Read-Commited Le niveau d'isolement doit être en mode de transaction pessimiste , Dans les affaires pessimistes, chaque SQL Il sera exécuté à partir de PD Accès TSO (for_update_ts) Pour une lecture cohérente 、 Détection des conflits, etc. ,Chaque SQL C'est l'équivalent d'un Snapshot-Isolation De’Petite affaire’, Une transaction pessimiste par rapport à un modèle de transaction optimiste TSO Plus de demandes , Si elle peut être réduite pendant toute la durée de la transaction sans compromettre la cohérence et l'isolement de la transaction tso Nombre de demandes, Peut réduire PD Charges et retards de transaction pour ,Pour améliorer la performance globale.
6.0 Dans la version RC Dans la transaction SELECT Déclarations TSO Demande optimisée , Utilisez une approche optimiste pour obtenir TSO , Obtenir la dernière version seulement après avoir rencontré la nouvelle version TSO Lire les données, En réduisant l'opération de lecture de PD Accès TSO Nombre de demandes reçues, Cela réduit le délai de requête , Promouvoir les conflits de lecture et d'écriture QPS.Cette propriété est définie par tidb_rc_read_check_ts Contrôle des variables,Par défaut off, Allumez la fonction et réglez - la à on C'est tout..
Après optimisation select La procédure de base pour le traitement des déclarations est la suivante :
Select L'instruction n'est pas exécutée à partir de PD Accès TSO En tant que for_update_ts, Au lieu de cela, utilisez la dernière TSO En tant que for_update_ts(C'est - à - dire: read_ts). Si la première déclaration d'une transaction est start_ts,Sinon, c'était le dernier SQL De for_update_ts.
Construire un plan d'exécution et exécuter ,Envoyé à tikv Demande de lecture de données pour (pointget、coprocessor)Je l'apporterai. RcReadCheckTS Le logo.
La demande de lecture de données utilise ce qui a été obtenu précédemment read_ts Faire une lecture cohérente,Et renvoie les données tidb server.
TiKV Les données retournées sont vérifiées pour une version plus récente , Retourner si une version plus récente est disponible WriteConflict Erreur, Sinon, l'exécution se termine normalement après le retour des données .
Si tidb Pas encore. client Envoyer des données à partir de PD Obtenir les derniers TSO En tant que for_update_ts Refaire toute la requête , Sinon, il se dirige vers client Erreur retournée.
La procédure ci - dessus montre qu'une nouvelle version peut causer tidb server Utiliser le processus normal pour récupérer TSO Et mise en œuvre SQL, En cas de conflit entre la lecture et l'écriture, le rendement est réduit, ce qui prolonge le temps d'exécution de la transaction . Si une partie des données a déjà été retournée client Si c'est le cas, il y aura une erreur. SQL Échec de l'exécution, Bien qu'en augmentant tidb_init_chunk_size Délai de taille variable tikv Temps de retour des données , Certaines des erreurs ci - dessus peuvent être réduites , Mais ce n'est toujours pas une solution radicale .
5. Local TSO
Dans un scénario Multi - Data Center PD leader Situé dans un centre de données , Les retards entre les centres de données peuvent causer TSO Demande d'augmentation du délai, Si cela peut être fait dans le Centre de données TSO Les demandes et les allocations peuvent être considérablement réduites TSO Délai de demande.Sur cette base tidb Introduit Local TSO (Fonction expérimentale),PD Conception moyenne 2 - Oui. TSO allocator Rôle:local tso allocator Et global tso allocator, Les transactions correspondantes sont également divisées en transactions locales local transaction Et transactions mondiales global transaction Deux..
- Local TSO
Quand on passe enable-local-tso Activer dans le Centre de données arrière PD Un noeud sera choisi comme local tso allocator Pour distribution TSO, Ce noeud est utilisé comme local tso Répartition leader Rôle( PD Le rôle est toujours follower ). Lorsque les données d'une opération ne concernent que les données de ce centre de données , Est considéré comme une transaction locale ,Au niveau local tso allocator Application local tso.
Chaque centre de données a son propre local tso, Ils sont indépendants les uns des autres , Afin d'éviter que les différents centres de données ne soient affectés au même TSO,PD Va mettre en place local tso Le temps logique inférieur dans le suffixe , Différents centres de données utilisent des valeurs différentes , En même temps, l'information est conservée dans PD Intérieur.
- Global TSO
Une transaction globale lorsque les données d'une opération de transaction se rapportent à un autre centre de données , Vous devez maintenant PD leader Application global tso, PD leader En tant que global tso allocator. Lorsque non activé local-tso Temps de fonctionnement, Toujours dans la logique originale de toutes les données TSO Demande présentée par PD leader Responsable du traitement.
Pour garantir local tso Et global tso Croissance linéaire de,global tso allocator Et local tso allocator On y va. max_tso Synchroniser:
Global tso allocator Recueillir tout local tso allocator Le plus grand local tso.
De tous local tso Choisissez l'un des plus grands local tso En tant que max_tso Envoyer à local allocator.
Si max_tso Plus grand que le sien est mis à jour TSO Pour max_tso, Sinon, le succès est retourné directement .
Local tso L'utilisation de différents centres de données doit tenir compte des différents processus opérationnels , En même temps, PlacementRules in SQL Répartition des tableaux par centre de données selon les règles de fonctionnement , Réglage simultané txn_scope La variable est local/global Pour l'acquisition contrôlée par l'homme global tso Toujours local tso.
Étapes de configuration de base (Actuellement non pris en charge Local TSO Retour à Global TSO Mode):
- PD、TiKV、TiDB server Tous doivent être configurés en fonction du déploiement réel label, Pour assurer une disponibilité élevée de chaque DC De PD Quantité >1.


- Ouvrir le niveau de la bibliothèque ou de la table Placement Rules in SQL, Répartition géographique et relations d'affaires .
CREATE PLACEMENT POLICY dc1_leader LEADER_CONSTRAINTS="DC1" FOLLOWER_CONSTRAINTS="DC1,DC2,DC3" FOLLOWERS=2; Alter table new_order PARTITION p0 PLACEMENT POLICY dc1_leaders;
- Paramètres PD Paramètres enable-local-tso=on Utiliser tiup reload Redémarrer PD Ouvert Local TSO Fonction. Une fois activé, il peut être utilisé pd-ctl -u pd_ip:pd_port member Moyenne tso_allocator_leaders Voir le contenu de chaque centre pour local tso allocator leader.

6. Tests
6.1 Environnement d'essai

6.2 TSO Follower Proxy
In 1024 Utilisation sous thread sysbench C'est exact. 6 Zhang. 1 La feuille d'enregistrement des milliards est ouverte TSO Follower Proxy Avant et arrière TPS Et les retards moyens sont les suivants: :

Période d'essai TSO Follower Proxy Fermé et ouvert CPU Taux d & apos; utilisation:

6.3 RC Read TSO
Utiliser tiup-bench Test ouvert sous différents Threads tidb_rc_read_check_ts Avant et arrière TPCC, Vous pouvez voir que lorsque cette fonction est activée, la paire TPCC Il y a une certaine amélioration, Mais à mesure que le nombre de fils augmente, les conflits augmentent TPCC Baisse .

Adoption TiDB –> PD Client –> PD Client CMD OPS La surveillance peut voir 256 On under thread tidb_rc_read_check_ts Après PD client Attente moyenne TSO Réduction significative du nombre .

6.4 Local TSO
Local TSO La fonction expérimentale doit encore être améliorée ,TPCC Un grand nombre d'erreurs répétées de la clé primaire se sont produites après l'activation de cette fonction dans le test .

7. Résumé
Pour la promotion TSO Extensibilité et efficacité ,TiDB Beaucoup de travail d'optimisation a été fait , Mais ces optimisations ont des scénarios précis , Nécessité d'intégrer les considérations opérationnelles et pratiques , Sinon, l'ouverture aveugle peut causer QPS Réduction、 Augmentation du retard :
Pour Follower TSO Proxy Convient pour PD Leader CPU Occupé TSO Obtenir des scénarios retardés ,En ouvrant Follower Proxy Réduction postérieure leader Pression.
RC Read TSO Optimisé pour les scénarios avec plus de lecture et moins d'écriture , Si le conflit de données est grave et entraîne une dégradation des performances .
Local TSO En tant que TiDB En théorie, le système de répartition du temps peut résoudre les problèmes causés par les retards entre les centres de données TSO Retard, Mais il y a encore quelques problèmes avec la fonction expérimentale .
边栏推荐
- 2. successfully solved bug:exception when publishing [Failed to connect and initialize SSH connection...
- 专升本高数(四)
- [live broadcast notes 0629] Concurrent Programming II: lock
- hudi记录
- Code for generating test and training sets
- Dripping backward (II)
- 如果辨别我现在交易的外盘股指期货交易平台是否正规安全?
- WPF Initialized事件在.cs中绑定不被触发的原因
- Personal PC installation software
- Tp6 framework integrates JWT for token authentication
猜你喜欢

Use of custom MVC

Federal learning: dividing non IID samples by Dirichlet distribution

自定义JvxeTable的按钮及备注下$set的用法

Uniapp address translation latitude and longitude

Compile a DLL without import table

Summary of PHP test sites encountered in CTF questions (I)

MySQL extracts strings from table fields

C # basic learning (XIII) | breakpoint debugging

Use compose to realize the effect of selecting movie seats by panning tickets

Use of Arthas
随机推荐
prompt learning 一个空格引发的血案
Customize the buttons of jvxetable and the usage of $set under notes
[oiclass] chess piece
How to realize remote collaborative office, keep this strategy!
golang bilibili直播彈幕姬
Global and Chinese markets for active transdermal drug delivery devices 2022-2028: Research Report on technology, participants, trends, market size and share
X书6.89版本shield-unidbg调用方式
Simple custom MVC optimization
问题记录:fel_lib.c:26:10: fatal error: libusb.h: 没有那个文件或目录
Interrupt operation: abortcontroller learning notes
What are the defaults for Binding. Mode=Default for WPF controls?
mysqldump原理
HOOK Native API
HOOK Native API
Wechat applet +php to realize authorized login operation
Reasons for MySQL master-slave database synchronization failure
Some technology sharing
Which is a good foreign exchange trading platform? Is it safe to have regulated funds?
*Write a program to initialize a string object with a vector < char> container*/
How do I enable assembly binding logging- How can I enable Assembly binding logging?