如何在Mysql中使用性能模式查找哪些查询会导致cpu%增加多少?

时间:2018-03-17 22:06:06

标签: mysql cpu-usage amazon-rds

我一直在尝试获取更多信息,关于如何归因于我们的mysql上运行的任何查询占用多少cpu%,但没有用。我启用了

  1. General Log
  2. 慢日志
  3. 效果架构
  4. 但是我从这些数据源获得的数据给了我可以优化的查询,我这样做但没有可靠的方法来确定任何查询占用多少cpu%。任何正确方向的指针都会非常有用。

    示例数据

    常规日志

    *************************** 1。排***************** **********

      event_time: 2018-03-17 13:17:52
       user_host: YYYYY[YYYYY] @  [XXX.XX.XX.XX]
       thread_id: 16850427
       server_id: 122252267
    command_type: Query
        argument: UPDATE inventory_details AS did1 INNER JOIN ( SELECT MAX(id) max_id FROM daily_inventory_details WHERE shop_id = '1160' AND inventory_item_id = 3461 GROUP BY shop_id, inventory_item_id) did2 ON did1.id = did2.max_id SET ideal = ideal + 0.071, updated_at = NOW()
    

    慢速记录

    *************************** 21。排***************** **********

    2018-03-17 21:03:39
    00:00:01
    SELECT did1.id, smii.price, did1.count_unit, did1.count_order, did1.portion_unit, did1.portion_count, did1.beginning, did1.ist, did1.deliveries_local, did1.deliveries_own, did1.ending, did1.ideal, did1.waste FROM inventory_details did1 INNER JOIN( SELECT MAX(id) max_id FROM inventory_details WHERE shop_id = '1199' GROUP BY shop_id, inventory_item_id) did2 ...
    

    效果架构

    *************************** 1。排***************** **********

        SCHEMA_NAME: faasos_platform
                         DIGEST: ae1de22d8ed625ed3e9547cbaa89c5d3
                    DIGEST_TEXT: SET `time_zone` = ? 
                     COUNT_STAR: 3885851
                 SUM_TIMER_WAIT: 161144275036000
                 MIN_TIMER_WAIT: 14549000
                 AVG_TIMER_WAIT: 41469000
                 MAX_TIMER_WAIT: 19984412000
                  SUM_LOCK_TIME: 9833622000000
                     SUM_ERRORS: 0
                   SUM_WARNINGS: 0
              SUM_ROWS_AFFECTED: 0
                  SUM_ROWS_SENT: 0
              SUM_ROWS_EXAMINED: 0
    SUM_CREATED_TMP_DISK_TABLES: 0
         SUM_CREATED_TMP_TABLES: 0
           SUM_SELECT_FULL_JOIN: 0
     SUM_SELECT_FULL_RANGE_JOIN: 0
               SUM_SELECT_RANGE: 0
         SUM_SELECT_RANGE_CHECK: 0
                SUM_SELECT_SCAN: 0
          SUM_SORT_MERGE_PASSES: 0
                 SUM_SORT_RANGE: 0
                  SUM_SORT_ROWS: 0
                  SUM_SORT_SCAN: 0
              SUM_NO_INDEX_USED: 0
         SUM_NO_GOOD_INDEX_USED: 0
                     FIRST_SEEN: 2017-10-25 02:11:32
                      LAST_SEEN: 2018-03-17 22:04:36
    

    额外注意

    能够将CPU%的减少增加归因于查询的用法之一是在早上2:15将RCA增加此cpu%。

    enter image description here

1 个答案:

答案 0 :(得分:2)

以下是一些可以帮助您的事情:

1)查询分析

Digital Ocean有一篇关于为查询配置文件创建日志的文章。  这会将您在上面列出的日志与您请求的查询时间的其他信息相结合。  https://www.digitalocean.com/community/tutorials/how-to-use-mysql-query-profiling

它不会为您提供明确的CPU使用率,但查询时间将帮助您了解需要花费很长时间才能运行的内容。但是,不要欺骗自己,只是查看查询时间本身并不是查询性能的唯一重要因素。仅仅因为查询需要很长时间并不一定意味着它没有做到它应该做的事情。这就是为什么你还应该检查查询本身的结构。

2)使用EXPLAIN

使用explain将向您展示mysql用于生成查询输出的基础关系。例如,在将表关联在一起时,您几乎从不想要进行全表扫描,而应该使用指标(希望这显然是为什么)。

https://www.sitepoint.com/using-explain-to-write-better-mysql-queries/

还有一个工作台工具可以在这里使用说明:

https://dev.mysql.com/doc/workbench/en/wb-tutorial-visual-explain-dbt3.html

3)应用程序问题

最后,除了查询本身之外,不要忘记查看您的应用程序。在某些情况下,您可能实际上不必要地运行查询。我记得一段时间以来,由于代码结构的原因,查询被不必要地运行成千上万次。捕获查询运行的次数将要求您解析日志并自行计算查询运行的次数和频率 - 因此没有明确的工具可用于此。

其他工具

如果你想要实时信息,还有像MyTop这样的工具非常方便。

这篇文章涵盖了很多关于它的信息:

https://blog.serverdensity.com/how-to-monitor-mysql/