[MySQL优化] 如何定位效率较低的SQL
[MySQL优化] -- 如何定位效率较低的SQL
时间:2010-2-28来源:HaCMS开源社区 作者:zhenpao
一般通过以下两种方式定位执行效率较低的 SQL 语句。 慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查 ...
一般通过以下两种方式定位执行效率较低的 SQL 语句。
慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的 执行情况,同时对一些锁表操作进行优化。
下面我们举例说明一下,如何通过慢查询日志定位执行效率底的 SQL 语句:
开启慢查询日志 , 配置样例:
[mysqld]
log-slow-queries
在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效。慢查询 日志将写入参数 DATADIR (数据目录)指定的路径下,默认文件名是 host_name-slow.log 。
和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。下例中演示了慢查询日志的设置和读取过程。
( 1 )首先查询一下 long_query_time 的值 。
mysql> show variables like 'long%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)
( 2 )为了方便测试,将修改慢查询时间为 5 秒。
mysql> set long_query_time=5;
Query OK, 0 rows affected (0.02 sec)
( 3 )依次执行下面两个查询语句。
第一个查询因为查询时间低于 5 秒而不会出现在慢查询日志中:
mysql> select count(*) from order2008;
+----------+
| count(*) |
+----------+
| 208 |
+----------+
1 row in set (0.00 sec)
第二个查询因为查询时间大于 5 秒而应该出现在慢查询日志中:
mysql> select count(*) from t_user;
+----------+
| count(*) |
+----------+
| 655296
相关文档:
1.查看档案
mysql> show binary logs;
+----------------+-----------+
| Log_name | File_size |
+----------------+-----------+
| ablelee.000001 | 150462942 |
| ablelee.000002 | 125 |
| ablelee.000003 | 106 |
+----------------+-----------+
2.删除bin-log(删除ablelee.000003之前的而没有包含ablel ......
1: ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) mysql> select ASCII('2'); -> 50 mysql> select ASCII(2); -> 50 mysql> select ASCII('dete'); -> 100
2:ORD(str) 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。 如果是一个多字节字符,以格式返 ......
mysql 5.0存储过程学习总结
一.创建存储过程
1.基本语法:
create procedure sp_name()
begin
………
end
2.参数传递
二.调用存储过程
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
三.删除存储过程
1.基本语法:
drop procedure sp_na ......
比如:
insert into User values(x1,x2,x3,x4),(x1,x2,x3,x4),(x1,x2,x3,x4)
这种写法,列数量必须和表中所有列保持一致,也就是说列都要列出来。
这个user表里面的一个字段x1是个自增长字段,则应该填null占位
insert into User values(null,x2,x3,x4),(null,x2,x3,x4),(null,x2,x3,x4)
否则会报错。 ......
1,将6.0版本的mysql集群软件上传到Linux或是Solaris上,解压
1>,为了方便调用将其改名为mysql,并且放于/usr/local/下
2>,创建连接文件,进入/usr/local/下
ln -s ..../mysql mysql
2,创建组,添加用户
groupadd mysql
useradd -g mysq ......