优化案例:缺少整体规划导致DB性能问题
最近几天对客户的一个核心数据库进行了优化,将资源消耗较高的SQL优化完成之后,物理读和逻辑读总量得到了降低。客户反馈优化后性能有提升,但仍然在某些工作日的业务高峰时段存在性能问题。 我们通过将性能不佳的业务高峰时段(即问题时段)与性能正常的业务
最近几天对客户的一个核心数据库进行了优化,将资源消耗较高的SQL优化完成之后,物理读和逻辑读总量得到了降低。客户反馈优化后性能有提升,但仍然在某些工作日的业务高峰时段存在性能问题。我们通过将性能不佳的业务高峰时段(即问题时段)与性能正常的业务高峰时段(即基线时段)的性能数据进行了对比,发现了一些问题:
基线时段为2014-1-15日上午8:00-上午9:00,此时段TPS(每秒事务量)为:46T/s,该时段的总DB Time为:626.2 (mins)
问题时段为2014-1-20日上午8:00-上午9:00,此时段TPS为:47T/s(仅比基线时段多1T/s,可认为两者业务量相当),该时段的总DB Time为2361.4 (mins)
同样均为1小时的取样时间段,问题段的总DB Time是基线的近4倍,而通过对比两者的性能视图,发现问题时段的单次IO延迟非常高,如下:
Event Waits Time(s) Avg wait (ms) % DB time Wait Class
DB CPU 2,082 55.42
db file sequential read 62,140 774 12 20.61 User I/O
direct path read 177,440 575 3 15.31 User I/O
log file sync 17,486 145 8 3.86 Commit
gc cr block 2-way 98,519 30 0 0.80 Cluster
基线时段单次序列读延时为12ms,单次直接读延时为3ms,单次redolog写延时为8ms,
Event Waits Time(s) Avg wait (ms) % DB time Wait Class
direct path read 180,200 4,643 26 32.77 User I/O
db file sequential read 55,483 2,286 41 16.13 User I/O
DB CPU 1,917 13.53
gc buffer busy acquire 5,513 1,474 267 10.40 Cluster
log file sync 17,541 1,298 74 9.16 Commit
而问题时段单次序列读延时为41ms,单次直接读延时为26ms,单次redolog写延时为74ms
(Oracle文档中建议的单次IO正常延时应为0-20ms,否则需升级硬件),
即相比基线时段,在业务量不变的情况下,问题时段的IO效率下降非常明显,怀疑是存储层面的同一个RAID组中有其他业务系统有可能恰好在问题时段有大量的IO操作,
导致我们正在优化的系统的IO延迟较大。跟客户的存储人员确认发现确实如此,存储人员并没有结合数据库对存储做出合理规划,仅仅从容量管理上对自己工作的方便性出发,划分并分配LUN。由此导致性能问题,我想这种问题在很多企业都是存在的,跨部门之间的沟通不畅导致没有从整体上的规划出现,最终出现问题由DB买单。
因此建议客户进行存储改善:
1.将这种关键系统在存储层面与其他系统隔离,避免互相影响IO;
2.有预算的情况下升级存储。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La comparaison des performances des méthodes de retournement des valeurs de clé de tableau PHP montre que la fonction array_flip() fonctionne mieux que la boucle for dans les grands tableaux (plus d'un million d'éléments) et prend moins de temps. La méthode de la boucle for consistant à retourner manuellement les valeurs clés prend un temps relativement long.

Comparaison des performances de différents frameworks Java : Traitement des requêtes API REST : Vert.x est le meilleur, avec un taux de requêtes de 2 fois SpringBoot et 3 fois Dropwizard. Requête de base de données : HibernateORM de SpringBoot est meilleur que l'ORM de Vert.x et Dropwizard. Opérations de mise en cache : le client Hazelcast de Vert.x est supérieur aux mécanismes de mise en cache de SpringBoot et Dropwizard. Cadre approprié : choisissez en fonction des exigences de l'application. Vert.x convient aux services Web hautes performances, SpringBoot convient aux applications gourmandes en données et Dropwizard convient à l'architecture de microservices.

La complexité temporelle mesure le temps d'exécution d'un algorithme par rapport à la taille de l'entrée. Les conseils pour réduire la complexité temporelle des programmes C++ incluent : le choix des conteneurs appropriés (tels que vecteur, liste) pour optimiser le stockage et la gestion des données. Utilisez des algorithmes efficaces tels que le tri rapide pour réduire le temps de calcul. Éliminez les opérations multiples pour réduire le double comptage. Utilisez des branches conditionnelles pour éviter les calculs inutiles. Optimisez la recherche linéaire en utilisant des algorithmes plus rapides tels que la recherche binaire.

Les techniques efficaces pour optimiser les performances multithread C++ incluent la limitation du nombre de threads pour éviter les conflits de ressources. Utilisez des verrous mutex légers pour réduire les conflits. Optimisez la portée du verrou et minimisez le temps d’attente. Utilisez des structures de données sans verrouillage pour améliorer la simultanéité. Évitez les attentes occupées et informez les threads de la disponibilité des ressources via des événements.

En PHP, la conversion de tableaux en objets aura un impact sur les performances, principalement affecté par des facteurs tels que la taille du tableau, la complexité, la classe d'objet, etc. Pour optimiser les performances, envisagez d'utiliser des itérateurs personnalisés, en évitant les conversions inutiles, les tableaux de conversion par lots et d'autres techniques.

Lors du développement d'applications hautes performances, le C++ surpasse les autres langages, notamment dans les micro-benchmarks. Dans les benchmarks macro, les mécanismes de commodité et d'optimisation d'autres langages tels que Java et C# peuvent mieux fonctionner. Dans des cas pratiques, C++ fonctionne bien dans le traitement d'images, les calculs numériques et le développement de jeux, et son contrôle direct de la gestion de la mémoire et de l'accès au matériel apporte des avantages évidents en termes de performances.

Selon les benchmarks, pour les petites applications hautes performances, Quarkus (démarrage rapide, mémoire faible) ou Micronaut (TechEmpower excellent) sont des choix idéaux. SpringBoot convient aux grandes applications full-stack, mais a des temps de démarrage et une utilisation de la mémoire légèrement plus lents.

La meilleure façon de générer des nombres aléatoires dans Go dépend du niveau de sécurité requis par votre application. Faible sécurité : utilisez le package math/rand pour générer des nombres pseudo-aléatoires, adaptés à la plupart des applications. Haute sécurité : utilisez le package crypto/rand pour générer des octets aléatoires cryptographiquement sécurisés, adaptés aux applications qui nécessitent un caractère aléatoire plus élevé.
