1

Linux で実行する一連のリアルタイムの金融取引プログラムがあります。コードは C++ で記述されており、データベース集約型 (MySQL) です。重要な場所でメモリ テーブルを使用しようとしました。私は常にレイテンシーに気を配っていますが、1 日の特定の時間帯では生のスループットだけがボトルネックになります。

このシステムを適切にプロファイリングするにはどうすればよいですか? (a) アプリケーション コードの実行、つまりアプリ コードの CPU バウンド、(b) MySQL での実行、または (c) ネットワーク関連の呼び出しなどの OS システム コールでの実行に費やされた時間の割合を確認できるようにしたいと考えています。 . また、少なくともデータベースについては、ディスクでの待機に費やされた時間を確認したいと思います。

また、レイテンシーのプロファイリングと最適化は、スループットのプロファイリングと最適化とは大きく異なることも認識しています。スループットを最適化するには、上記を測定できる従来のプロファイラーが適切だと思います。レイテンシを最適化するには、マイクロ秒単位の正確なタイム スタンプをログに記録するだけで十分だと思いますが、異常値が表示されたときに、すべての時間が費やされた場所を特定することは依然として困難です。

私はこれについて正しい方法で考えていますか?私を助けるかもしれないツールは何ですか?

4

1 に答える 1

1

クエリの処理中にデータベースが何を行っているかを調べることは、非常に価値のあることです。たとえば、クエリ オプティマイザーがどのようにクエリを実行しているかを理解します。インデックスの使用を強制したり、インデックスを削除したり、クエリを再配置したりすると、大きな影響が生じることがあります。

https://dev.mysql.com/doc/refman/5.1/en/show-profile.html

また、他の RMDB が作業負荷を処理する方法を確認することもお勧めします。クエリの種類や複雑さを考慮しないと、mysql と PostgreSQL のどちらが適しているかを判断するのは困難です。いずれにせよ、科学的なアプローチでデータを測定することが第 1 段階です。

Vlad が言ったように、おそらく stap の使用を検討したいでしょうが、気弱な人向けではありません。まだパフォーマンスの問題が発生している場合は、それをお勧めします。

于 2013-10-14T05:40:09.707 に答える