c++ - 在 Linux 上分析数据库密集型代码

标签 c++ mysql linux profiling

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

我怎样才能正确地分析这个系统?我希望能够看到(a)运行我的应用程序代码所花费的时间百分比,即我的应用程序代码受 CPU 限制,(b)在 MySQL 中运行,或(c)在操作系统系统调用中运行,例如与网络相关的调用.我还想知道,至少对于数据库来说,等待磁盘所花费的时间。

我还意识到,针对延迟的分析和优化与针对吞吐量的分析和优化截然不同。为了优化吞吐量,我认为可以测量上述内容的传统分析器是合适的。为了优化延迟,我认为只记录微秒级的准确时间戳就足够了,但是当我看到异常值时仍然很难确定所有时间都花在了哪里。

我的思考方式是否正确?有哪些工具可以帮到我?

最佳答案

在处理查询时尝试检查数据库正在做什么可能是值得的。例如,了解查询优化器如何执行查询。有时强制使用索引、删除索引或重新排列查询会产生巨大的影响。

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

此外,还建议查看其他 RMDB 如何处理您的工作负载。在不考虑查询类型或复杂性的情况下,很难说 mysql 或 PostgreSQL 哪个更适合您。但无论如何,采取科学方法测量数据是第一步。

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

关于c++ - 在 Linux 上分析数据库密集型代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19352164/

相关文章:

c++ - 使用 STL 堆栈作为 C++ 类的成员

C++ 不能在结构中存储指针

c++ - 让任务运行固定数量的指令?

android - Flutter 运行(同步文件)未完成

linux - libevent 的实现细节是什么?轮询机制的封装?

C++ 连接 LPCTSTR

c++ - visual c++ 强制发布构建使用调试构建代码

php - 如何确定哪个查询执行时间最长

php - 如果我想检查 PDOstmt->execute() 返回什么,我是否在 if 语句中再次调用它?

mysql - Knex 不返回插入 ID