mysql联查sql语句
sql语句:增删改查,其中 增、删、改只用于单表多表级联删除,级联更新有时候会出现(例如:删除父类别,子类别也会被删除)多表查询:多表联查、子查询建表语句: 一般不需要语句建表,语句了解认识即可,手动...
2024.11.15MySQL“慢SQL”定位
数据库调优我个人觉得必须要明白两件事1.定位问题(你得知道问题出在哪里,要不然从哪里调优呢)2.解决问题(这个没有基本的方法来处理,因为不同的问题处理的方式方法不一样,得从实践中不断的探索,如sql调优,配置优化,硬件升级等等)
步骤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 | /data/mysql/localhost-slow.log |+---------------------------+--------------------------------+5 rows in set (0.01 sec)mysql>复制代码以MySQL5.7为例
我这里是开启了,没有开启的,直接set global slow_query_log=on;就ok了。
mysql> set global slow_query_log=on;Query OK, 0 rows affected (0.05 sec)复制代码步骤2:设置慢查询的时间限制
mysql默认的慢查询时间是10秒,可以设置成其它的时间。
mysql> show variables like ‘long_query_time‘;+-----------------+-----------+| Variable_name | Value |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+1 row in set (0.03 sec)mysql> set long_query_time=1;Query OK, 0 rows affected (0.00 sec)mysql> show variables like ‘long_query_time‘;+-----------------+----------+| Variable_name | Value |+-----------------+----------+| long_query_time | 1.000000 |+-----------------+----------+1 row in set (0.00 sec)mysql>复制代码set global 只是全局session生效,重启后失效,如果需要以上配置永久生效,需要在mysql.ini(linux my.cnf)中配置
步骤3:查看慢查询
show status like ‘slow_queries’;复制代码它会显示慢查询sql的数目,具体的sql就在上面的Log file日志中可以看到。
mysql> show status like ‘slow_queries‘;+---------------+-------+| Variable_name | Value |+---------------+-------+| Slow_queries | 0 |+---------------+-------+1 row in set (0.01 sec)mysql>复制代码其它命令
show processlist:查看哪些线程在运行;show open tables:查看哪些表在使用。复制代码慢查询分析日志
改一下慢查询配置
mysql> set long_query_time=0.1;Query OK, 0 rows affected (0.05 sec)复制代码执行几条慢的SQL
mysql> select count(*) from users;+----------+| count(*) |+----------+| 100005 |+----------+1 row in set (0.28 sec)mysql> select * from users;......100005 rows in set (1.41 sec)mysql>复制代码mysql> select count(*) from user_address_copy;+----------+| count(*) |+----------+| 30006 |+----------+1 row in set (0.08 sec)mysql> select * from user_address_copy;......30006 rows in set (0.39 sec)mysql>复制代码vim 打开慢查询记录的文件slow_query_log_file | /data/mysql/localhost-slow.log
vim /data/mysql/localhost-slow.log
localhost-slow.log 内容如下:
/software/mysql/bin/mysqld, Version: 5.7.24 (MySQL Community Server (GPL)). started with:Tcp port: 3306 Unix socket: /software/mysql/mysql.sockTime Id Command Argument# Time: 2018-12-08T03:08:23.877322Z# User@Host: root[root] @ localhost [] Id: 24# Query_time: 0.551358 Lock_time: 0.000514 Rows_sent: 1 Rows_examined: 100005use test;SET timestamp=1544238503;select count(*) from users;# Time: 2018-12-08T03:09:06.038256Z# User@Host: root[root] @ localhost [] Id: 24# Query_time: 1.401716 Lock_time: 0.000220 Rows_sent: 100005 Rows_examined: 100005SET timestamp=1544238546;select * from users;# Time: 2018-12-08T03:12:03.207302Z# User@Host: root[root] @ localhost [] Id: 24# Query_time: 0.395499 Lock_time: 0.000378 Rows_sent: 30006 Rows_examined: 30006SET timestamp=1544238723;select * from user_address_copy;复制代码Time :日志记录的时间
User@Host:执行的用户及主机
Query_time:查询耗费时间 Lock_time 锁表时间Rows_sent 发送给请求方的记录条数 Rows_examined语句扫描的记录条数
SET timestamp 语句执行的时间点
select .... 执行的具体语句
慢查询日志分析工具
分析慢查询日志是性能调优中获取信息的主要方式之一。
如果slow log比较小,那么可以直接使用vi等文本编辑器或less、more命令打开。但如果slow log过大,载入慢查询日志将耗费大量时间,这个时候就要考虑使用其他工具来对慢查询进行分析了。
mysql的自带工具mysqldumpslow,可以有效的帮助我们对slow log进行筛选和分析。
官方文档5.7版本地址:dev.mysql.com/doc/refman/…
参看官方文档可以略去本文。
执行mysqldumpslow –h可以查看帮助信息。
主要介绍两个参数-s和-t
-s 这个是排序参数,可选的有:al: 平均锁定时间ar: 平均返回记录数at: 平均查询时间c: 计数l: 锁定时间r: 返回记录t: 查询时间-t n 显示头n条记录。复制代码实例:
mysqldumpslow -s c -t 20 host-slow.logmysqldumpslow -s r -t 20 host-slow.log复制代码上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。
用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。
sql语句:增删改查,其中 增、删、改只用于单表多表级联删除,级联更新有时候会出现(例如:删除父类别,子类别也会被删除)多表查询:多表联查、子查询建表语句: 一般不需要语句建表,语句了解认识即可,手动...
2024.11.15【地震高岗,一派西山千古秀】explain来了解SQL执行的状态explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。explain...
2024.11.12Prometheus 监控Mysql服务器及Grafana可视化1、安装mysql服务2、配置mysql主从服务3、安装mysql_exporter节点收集数据4、配置promethus采集mysql...
2024.11.15mysql的慢查询sql是通过日志记录慢SQL--(俗称慢查询日志)默认的情况下,MySQL数据库不开启慢查询日志(slow query log),需要手动把它打开开启慢查询日志SET GLOBAL ...
2024.11.15引言不啰嗦,直接入正题。问题是这样的。请问下面的sql语句,要想加快查询速度,该怎么创建索引?以下,以mysql数据库为准。select * from test where a=? and b>? o...
2024.11.15