【问题标题】:Why is MYSQL slow_query_log not enabled?为什么未启用 MYSQL slow_query_log?
【发布时间】:2016-01-31 18:10:41
【问题描述】:

我在 .my.cnf 中有以下内容

# LOGGING #
slow_query_log                  = ON
slow_query_log_file             = /var/log/mariadb/slow_query.log
log-queries-not-using-indexes   = 1

当我运行 tune-primer.sh 时,我得到了这个:

SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 10.000000 sec.
You have 0 out of 36 that take longer than 10.000000 sec. to complete
Your long_query_time seems to be fine

谁能解释一下这怎么可能?

【问题讨论】:

  • 将 long_query_time 降低到 1(或其他一些小值)。
  • 这些设置是否在.my.cnf[mysqld] 部分中? .my.cnf 真的被读取了吗? (在其中更改 long_query_time 显然会提供这样的线索。)
  • +-----------------+----------+ |变量名 |价值 | +-----------------+----------+ | long_query_time | 1.000000 | +-----------------+----------+
  • 是的,设置在 [mysqld] 中,我用什么命令来查看当前正在使用的配置?
  • SHOW GLOBAL VARIABLES; (来自 mysql 命令行工具;UI 有一些地方可以执行任意命令。)看起来你这样做了。

标签: mysql mysql-slow-query-log


【解决方案1】:

显然慢日志正在工作。你知道是什么解决了这个问题吗?

与此同时,这已演变为查询调优...

#1 有什么用?为什么运行这么频繁?它平均返回检查的 156K 行(整个表?),但只返回 665 行。 665 是很多行;你真的需要它们吗?是否可以在 SQL 中进行更多过滤?

听起来好像没有INDEX(autoload) -- 添加它;它应该会大大加快查询速度。

#1
SELECT  option_name, option_value
    FROM  wp_options
    WHERE  autoload = 'S'

你对下面的数千行做了什么?而你正在对它们进行数千次预演?

#2
SELECT  st.value AS tra, s.value AS org, s.domain_name_context_md5 AS ctx
    FROM  wp_icl_strings s
    LEFT JOIN  wp_icl_string_translations st ON s.id=st.string_id
      AND  st.status=N
      AND  st.language='S'
      AND  s.language!='S'
#3
SELECT  slug, taxonomy
    FROM  wp_posts
    INNER JOIN  wp_term_relationships  ON (wp_posts.ID = wp_term_relationships.object_id)
    INNER JOIN  wp_term_taxonomy  ON (wp_term_relationships.term_taxonomy_id =
                                           wp_term_taxonomy.term_taxonomy_id )
    INNER JOIN  wp_terms ON (wp_term_taxonomy.term_id = wp_terms.term_id )
    WHERE  wp_posts.ID IN ("S","S","S","S","S","S","S","S","S",...)
    ORDER BY  wp_terms.name ASC 
#4
SELECT  t.element_id, tax.term_id, tax.taxonomy
    FROM  wp_icl_translations t
    JOIN  wp_term_taxonomy tax ON t.element_id = tax.term_taxonomy_id
      AND  t.element_type = CONCAT('S', tax.taxonomy)
    JOIN  wp_terms terms ON terms.term_id = tax.term_id
    WHERE  tax.term_id != tax.term_taxonomy_id 

为什么在#2 中使用LEFT?这可能会阻止从st 开始,而INDEX(language, status) 可能更具选择性。

在 #3 中:wp_terms 可能受益于INDEX(name)

在 #4 中:架构设计导致了笨拙的 CONCAT('S', tax.taxonomy);可以纠正吗?也就是说,t.element_typetax.taxonomy 看起来是否相同——要么都带有前缀,要么都没有前缀?或者前缀是单独的列?

如果您想进一步讨论这些,请提供SHOW CREATE TABLEEXPLAIN SELECT ...

【讨论】:

  • 如何运行 SHOW CREATE TABLE 和 EXPLAIN SELECT?它们是否需要在特定数据库上运行?另外我如何添加索引(自动加载)。谢谢
  • 熟悉其中之一:phpmyadminMySQL Workbench 或 mysql 命令行工具。 WP 做了一些不错的事情,但它并不妨碍你学习大量关于底层 MySQL 的知识。
  • 能否告诉我 MySQL Workbench 是否可以帮助我启用 INDEX,autoload?
  • "autoload" 不是 MySQL 术语;请解释它的来源和作用。
  • INDEX(autoload) 您在上面的答案中提到了这一点。
猜你喜欢
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多