1

我有一套在 Linux 上运行的实时金融交易程序。该代码是用 C++ 编写的,并且是数据库密集型 (MySQL)。我们尝试在重要的地方使用内存表。虽然我总是关心延迟,但在一天中的某些时候,只有原始吞吐量才是瓶颈。

我怎样才能正确地分析这个系统?我希望能够查看(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 是否更适合您。但无论如何,采取科学的方法来衡量数据是第一步。

就像 Vlad 说的那样,您可能想看看使用 stap ,但它不适合胆小的人,如果您仍然看到性能问题,我会推荐它。

于 2013-10-14T05:40:09.707 回答