查看 MySQL 服务器运行的各种状态值:

mysql> show global status;

1. 慢查询

mysql> show variables like '%slow%';
+---------------------------+-------------------------------+
| Variable_name | Value |
+---------------------------+-------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /var/db/my3306/logs/slows.log |
+---------------------------+-------------------------------+
5 rows in set (0.00 sec) mysql> show global status like '%slow%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| Slow_launch_threads | 0 |
| Slow_queries | 18384 |
+---------------------+-------+

打开慢查询日志可能会对系统性能有一点儿影响,如果你的 MySQL 是主-从结构,可以考虑打开其中一条从服务器的慢查询日志,这样既可以监控慢查询,对系统性能的影响也会很小。

显示哪些线程正在运行:

mysql> show processlist;
+------------+-----------------+--------------------+------------+-------------+----------+-----------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------------+-----------------+--------------------+------------+-------------+----------+-----------------------------------------------------------------------+------------------+
| 1 | event_scheduler | localhost | NULL | Daemon | 42 | Waiting for next activation | NULL |
| 1060236184 | my_sync | 172.16.88.33:60726 | NULL | Binlog Dump | 21244918 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL |
| 4874532774 | athena | 172.16.88.12:46808 | NULL | Sleep | 6945 | | NULL |
| 4875812388 | california | 172.16.88.11:59687 | california | Sleep | 8 | | NULL |
| 4875812768 | california | 172.16.88.11:59698 | california | Sleep | 5 | | NULL |
| 4875813123 | athena | 172.16.88.12:45683 | NULL | Query | 0 | init | show processlist |
| 4875813758 | california | 172.16.88.11:59711 | california | Sleep | 1 | | NULL |
| 4875813759 | california | 172.16.88.11:59713 | california | Sleep | 1 | | NULL |
| 4875813760 | california | 172.16.88.11:59712 | california | Sleep | 1 | | NULL |
| 4875813915 | athena | 172.16.88.12:50003 | athena | Sleep | 0 | | NULL |
| 4875813916 | athena | 172.16.88.12:50004 | athena | Sleep | 0 | | NULL |
| 4875813917 | athena | 172.16.88.12:50005 | athena | Sleep | 0 | | NULL |
+------------+-----------------+--------------------+------------+-------------+----------+-----------------------------------------------------------------------+------------------+
12 rows in set (0.00 sec)

若发现大量的 unauthenticated user 连接,数据库每次肯定都要响应,索引速速越来越慢,在 mysql.conf 里添加 skip-name-resolve 即可,表示不启用 DNS 反应解析。

再看 State 这列,若长期处于 Sending data (正在处理SELECT查询的记录,同时正在把结果发送给客户端)状态,则可怀疑是磁盘 I/O 压力过大,可用 explain 来分析语句。

mysql> explain SELECT count(new_cheat_id) FROM new_cheat WHERE account_id='' AND offer_id=''\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: new_cheat
type: ALL
possible_keys: NULL
key:NULL
key_len: NULL
ref: NULL
rows: 2529529
Extra: Using where
1 row in set (0.00 sec)

从结果可看出来此表没建索引,导致一次查询扫描了2529529行记录。

建立好索引后,用 show index 查看表索引:

mysql> show index from xk_order_ready_5;
+-----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| new_cheat | 0 | PRIMARY | 1 | new_cheat_id| A | 2577704 | NULL | NULL | | BTREE | | |
| new_cheat | 1 | ip | 1 | ip | A | 1288852 | NULL | NULL | | BTREE | | |
| new_cheat | 1 | account_id| 1 | account_id | A | 1288852 | NULL | NULL | | BTREE | | |
+-----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)

再次查看 explain 结果:

mysql> explain SELECT count(new_cheat_id) FROM new_cheat WHERE account_id='' AND offer_id=''\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: new_cheat
type: ref
possible_keys: account_id
key: account_id
key_len: 4
ref: const
rows: 6
Extra: Using where
1 row in set (0.00 sec)

可以发现直接读取了6条记录就获取了查询结果。

根据 MySQL 状态优化 ---- 1. 慢查询的更多相关文章

  1. mysql索引优化比普通查询速度快多少

    mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...

  2. 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载

    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...

  3. MySQL 性能优化之慢查询

    性能优化的思路 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句 其次使用explain命令去查询由问题的SQL的执行计划(脑补链接:点我直达1,点我直达2) 最后可以使用show pro ...

  4. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...

  5. 根据 MySQL 状态优化 ---- 4. 临时表

    查看 MySQL 服务器运行的各种状态值: mysql> show global status: 4. 临时表 查看设置: mysql> show variables where Vari ...

  6. mysql数据库优化[千万级查询]

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. MySQL 如何优化大分页查询?

    一 背景 大部分开发和DBA同行都对分页查询非常非常了解,看帖子翻页需要分页查询,搜索商品也需要分页查询.那么问题来了,遇到上千万或者上亿的数据量怎么快速的拉取全量,比如大商家拉取每月千万级别的订单数 ...

  8. mysql SQL优化之嵌套查询-遁地龙卷风

    (-1) 写在前面 这篇随笔的数据使用的是http://blog.csdn.net/friendan/article/details/8072668#comments里的,里面有一些常见的select ...

  9. MySQL中优化sql语句查询常用的30种方法

      1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使 ...

随机推荐

  1. Android Studio插件推荐(PreIOC,GsonFormat)

    好的插件能加快项目的开发速度,尤其是一些针对重复性的代码的插件,所以在这里向大家推荐2款不错的插件,如果以后发现新的好的插件,还会继续推荐,同时欢迎大家推荐 GsonFormat GsonFormat ...

  2. Linux-Big-Endian和Little-Endian转换

    转自:http://blog.csdn.net/aklixiaoyao/article/details/7548860 在各种计算机体系结构中,对于字节.字等的存储机制有所不同,因而引发了计算机通信领 ...

  3. Linux摄像头驱动学习之:(四)UVC-摄像头驱动框架分析

    UVC: USB Video ClassUVC驱动:drivers\media\video\uvc\ uvc_driver.c分析:1. usb_register(&uvc_driver.dr ...

  4. nopcommerce 初学2

    好久没有接触nopcommerce了. 2016-9-5  现在最新的是3.8. 这段时间也稍微接触了下aspnet 的mvc. 所以就想到nop是一个开源的 很全得项目, 然后就拆了一些可以学习跟借 ...

  5. php函数的可变参数

    <?php function add() { $arr = func_get_args(); //func_num_args() $sum =0; for($i=0;$i<count($a ...

  6. RABBITMQ/JAVA (主题)

    上篇博文中,我们进一步改良了日志系统.即使用Direct类型的转换器,使得接受者有能力进行选择性的接收日志,而非fanout那样,只能够无脑的转发. 虽然使用Direct类型的转换器改进了日志系统.但 ...

  7. Unity3D 发布无边框exe

    关于:Unity3D 发布无边框exe,Unity3D Build exe无边框 Unity发布windows版本 总是带着边框,很想给它去掉,笔者在网上查了一番,常见的有3中. 1:通过unity3 ...

  8. ASP.NET编程模型之ASP.NET页面生命周期图解

    ASP.NET编程模型中ASP.NET页面生命周期是指什么呢?它包括什么呢?ASP.NET编程模型之ASP.NET页面生命周期具体的过程有哪些呢?下面就开始我们的讲解吧: ASP.NET 页运行时,此 ...

  9. C/C++ 网络库介绍

    C/C++ 网络库介绍 Aggregated List of Libraries(Source Link) Boost.Asio is really good. Asio is also availa ...

  10. IIS32位,64位模式下切换

    一.32位模式 1.cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/appPools/enable32bitappon ...