MySQL慢查询不规律地飙升

标签 mysql performance

我正在使用 MySQL 运行移动服务。

通常会有一些慢日志。 (小于 0.5/秒) 但有时它会在短时间内变得如此之高。 (超过 6 次/秒)

enter image description here

我检查了慢查询日志,它们不是特定的查询,而是我的所有查询。所以我猜这可能是锁定问题,但在慢查询日志中只有“query_time”,“lock_time”始终为0。

我检查了服务器状态,但没有什么特别的。

现在我连头绪都没有了。我应该先看什么?

最佳答案

尝试查看标记为慢的查询。使用联接、where 和组语句中的列在查询中相关的所有表中创建索引。

示例

Select 
  a.name, 
  count(*) as trans_count, 
  sum(b.trans_value) as trans_tot_value
From 
   tbl_customer a inner join 
   tbl_orders b 
      on a.customer_id = b.customer_id 
 Where 
     a.city ='jakarta' 
     and b.date = today()
  Group by a.name

那么你应该创建索引

  1. tbl_customer 上的 Idx_customer_id 由 customer_id 列组成。
  2. tbl_orders 上的 Idx_customer_id 由 customer_id 列组成。
  3. tbl_customer 上的 Idx_city 由城市列组成。
  4. tbl_orders 上的 Idx_trans_date 由日期列组成。
  5. tbl_customer 上的 Idx_customer_name 由客户名​​称列组成。

分析表上使用的查询和索引有助于提高性能。

关于MySQL慢查询不规律地飙升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34869489/

相关文章:

php - 如何在文件系统中存储私有(private)用户图像而不妨碍他们的隐私?

php - WordPress 搞乱了我在 WordPress 页面上的数据库调用?

php - 三次 INNER JOIN SELECT

c - 提高读取 volatile 存储器的性能

python - 提高 10 至 8 位转换性能

php - MYSQL - 对列表进行排序,最后如何总是有一个结果?

mysql - 如何使用 node.js 上的 mysql2 包使用准备好的查询

javascript - `Promise.all` 和大量异步操作的性能考虑

python - 以列表为元素对 pandas 列进行分组和聚合,并在列表中获取唯一值

android - 一个 View 内的多个回收 View (gridlayout 和水平线性布局)