来历:赛迪网 作者:Alizze
启动Mysql时加参数--log-slow-queries来记载执行时间跨越long_query_time秒的sql:
/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock --log-slow- queries=/var/log/mysql/slow.log
explain来年夜白SQL执行的形状。
explain select * from wp_posts\G;
运用show status like "Handler_read%"; 来年夜白索引的了局。
Handler_read_key 值高示意索引了局好,Handler_read_rnd_next值高示意索引低效。
用show processlist 审查今后运转形状。
mysql> show processlist;
----- ------------- --------------------
| Id | User | Host | db | Command | Time| State | Info
----- ------------- --------------------
|207|root |192.168.0.20:51718 |mytest | Sleep | 5 | | NULL
|208|root |192.168.0.20:51719 |mytest | Sleep | 5 | | NULL
|220|root |192.168.0.20:51731 |mytest |Query | 84 | Locked |
select bookname,culture,value,type from book where id=001
先重年夜说一下各列的寄义和用处,第一列,id,不必说了吧,一个标识,你要kill一个语句的时分很有效。user列,显示单前用户,如果不是root,这个号令就只显示你权限范围内的sql语句。host列,显示这个语句是从哪个ip的哪个端口上发出的。呵呵,可以用来追踪出成果语句的用户。db列,显示这个历程目前跟尾的是哪个数据库。command列,显示今后跟尾的执行的号令,一样往常即是休眠(sleep),盘诘(query),跟尾(connect)。time列,此这个形状继续的时间,单位是秒。state列,显示运用今后跟尾的sql语句的形状,很主要的列,后续会有一切的形状的描摹,请当心,state只是语句执行中的某一个形状,一个sql语句,已盘诘为例,能够需求经过copying to tmp table,Sorting result,Sending data等形状才可以完成,info列,显示这个sql语句,由于长度无限,以是长的sql语句就显示不全,可是一个鉴定成果语句的主要按照。
这个号令中最要害的即是state列,mysql列出的形状主要有以下几种:
Checking table
正在搜检数据表(这是主动的)。
Closing tables
正在将表中修正的数据改革到磁盘中,同时正在封闭曾经用完的表。这是一个很快的操作,如果不是如许的话,就应该确认磁盘空间可否曾经满了梗概磁盘可否正处于重负中。
Connect Out
复制从效力器正在跟尾主效力器。
Copying to tmp table on disk
由于且自了局集年夜于 tmp_table_size,正在将且自表从内存存储转为磁盘存储以此糜掷内存。
Creating tmp table
正在竖立且自表以存放部分盘诘了局。
deleting from main table
效力器正在执行多表删除中的第一部分,刚删除第一个表。
deleting from reference tables
效力器正在执行多表删除中的第二部分,正在删除其他表的记载。
Flushing tables
正在执行 FLUSH TABLES,期待其他线程封闭数据表。
Killed
发送了一个kill哀告给某线程,那么这个线程将会搜检kill标记位,同时会抛却下一个kill哀告。MySQL会在每次的主循环中搜检kill标记位,不过有些情形下该线程能够会过一小段才调归天失。如果该线程程被其他线程锁住了,那么kill哀告会在锁释放时立即生效。
Locked
被其他盘诘锁住了。
Sending data
正在处置责罚 SELECT 盘诘的记载,同时正在把了局发送给客户端。
Sorting for group
正在为 GROUP BY 做排序。
Sorting for order
正在为 ORDER BY 做排序。
Opening tables
这个历程应该会很快,除非遭到其他成分的滋扰。比方,在执 ALTER TABLE 或 LOCK TABLE 语句行完早年,数据表无法被其他线程掀开。 正测验测验掀开一个表。
Removing duplicates
正在执行一个 SELECT DISTINCT 方式的盘诘,可是MySQL无法在前一个阶段优化失那些几次的记载。因此,MySQL需求再次去失几次的记载,然后再把了局发送给客户端。
Reopen table
取得了对一个表的锁,可是必需在表布局修正之后才调取得这个锁。曾经释放锁,封闭数据表,正测验测验从新掀开数据表。
Repair by sorting
修复指令阃在排序以竖立索引。
Repair with keycache
修复指令阃在行使索引缓存一个一个地竖立新索引。它会比 Repair by sorting 慢些。
Searching rows for update
正在讲切合条件的记载找出来以备更新。它必需在 UPDATE 要修正相干的记载之前就完成了。
Sleeping
正在期待客户端发送新哀告.
System lock
正在期待取得一个内部的系统锁。若因今后没有运转多个 mysqld 效力器同时哀告统一个表,那么可以经由增长 --skip-external-locking参数来停止内部系统锁。
Upgrading lock
INSERT DELAYED 正在测验测验取得一个锁表以拔出新记载。
Updating
正在搜索婚配的记载,并且修正它们。
User Lock
正在期待 GET_LOCK()。
Waiting for tables
该线程得到报告,数据表布局曾经被修正了,需求从新掀开数据表以取得新的布局。然后,为了能的从新掀开数据表,必需比及一切其他线程封闭这个表。以下几种情形下会产生这个报告:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, 或 OPTIMIZE TABLE。
waiting for handler insert
INSERT DELAYED 曾经处置责罚完了一切待处置责罚的拔出操作,正在期待新的哀告。
年夜部分形状对应很快的操作,只需有一个线程对峙统一个形状好几秒钟,那么能够是有成果发生了,需求搜检一下。
另有别的的形状没在上面中列出来,不过它们年夜部分只是在审查效力器可否有存在错误是才用得着。
版权声明:
原创作品,许愿转载,转载时请务必以超链接方式标明文章 原始出处 、作者信息和本声明。否则将深究法律责任。