|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对免费版的用户也具有充足的支持服务。在dev.mysql.com上,一个大型的MySQL学习教程强大社区用户和开发者可以讨论所有关于MySQL的事情。这个站点拥有博客、指南、视频、技术交流会、白皮书和论坛等方式的交流。启动MySQL时加参数--log-slow-queries来纪录实行工夫凌驾long_query_time秒的sql:<Pstyle="TEXT-INDENT:2em">- /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
复制代码 <Pstyle="TEXT-INDENT:2em">explain来懂得SQL实行的形态。<Pstyle="TEXT-INDENT:2em">explainselect*fromwp_postsG;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">利用showstatuslike"Handler_read%";来懂得索引的效果。<Pstyle="TEXT-INDENT:2em">Handler_read_key值高暗示索引效果好,Handler_read_rnd_next值高暗示索引低效。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">用showPRocesslist检察以后运转形态。<Pstyle="TEXT-INDENT:2em">mysql>showprocesslist;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">+-----+-------------+--------------------+<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">|Id|User|Host|db|Command|Time|State|Info<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">+-----+-------------+--------------------+<Pstyle="TEXT-INDENT:2em">|207|root|192.168.0.20:51718|mytest|Sleep|5||NULL<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">|208|root|192.168.0.20:51719|mytest|Sleep|5||NULL<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">|220|root|192.168.0.20:51731|mytest|Query|84|Locked|<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">selectbookname,culture,value,typefrombookwhereid=001<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">先复杂说一下各列的寄义和用处,第一列,id,不必说了吧,一个标识,你要kill一个语句的时分很有效。user列,显现单前用户,假如不是root,这个命令就只显现你权限局限内的sql语句。host列,显现这个语句是从哪一个ip的哪一个端口上收回的。呵呵,能够用来追踪出成绩语句的用户。db列,显现这个历程今朝毗连的是哪一个数据库。command列,显现以后毗连的实行的命令,一样平常就是休眠(sleep),查询(query),毗连(connect)。time列,此这个形态延续的工夫,单元是秒。state列,显现利用以后毗连的sql语句的形态,很主要的列,后续会有一切的形态的形貌,请注重,state只是语句实行中的某一个形态,一个sql语句,已查询为例,大概必要经由copyingtotmptable,Sortingresult,Sendingdata等形态才能够完成,info列,显现这个sql语句,由于长度无限,以是长的sql语句就显现不全,可是一个判别成绩语句的主要根据。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">这个命令中最关头的就是state列,mysql列出的形态次要有以下几种:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">Checkingtable<Pstyle="TEXT-INDENT:2em">正在反省数据表(这是主动的)。<Pstyle="TEXT-INDENT:2em">Closingtables<Pstyle="TEXT-INDENT:2em">正在将表中修正的数据革新到磁盘中,同时正在封闭已用完的表。这是一个很快的操纵,假如不是如许的话,就应当确认磁盘空间是不是已满了大概磁盘是不是正处于重负中。<Pstyle="TEXT-INDENT:2em">ConnectOut<Pstyle="TEXT-INDENT:2em">复制从服务器正在毗连主服务器。<Pstyle="TEXT-INDENT:2em">Copyingtotmptableondisk<Pstyle="TEXT-INDENT:2em">因为一时了局集年夜于tmp_table_size,正在将一时表从内存存储转为磁盘存储以此节俭内存。<Pstyle="TEXT-INDENT:2em">Creatingtmptable<Pstyle="TEXT-INDENT:2em">正在创立一时表以寄存部分查询了局。<Pstyle="TEXT-INDENT:2em">deletingfrommaintable<Pstyle="TEXT-INDENT:2em">服务器正在实行多表删除中的第一部分,刚删除第一个表。<Pstyle="TEXT-INDENT:2em">deletingfromreferencetables<Pstyle="TEXT-INDENT:2em">服务器正在实行多表删除中的第二部分,正在删除其他表的纪录。<Pstyle="TEXT-INDENT:2em">Flushingtables<Pstyle="TEXT-INDENT:2em">正在实行FLUSHTABLES,守候其他线程封闭数据表。<Pstyle="TEXT-INDENT:2em">Killed<Pstyle="TEXT-INDENT:2em">发送了一个kill哀求给某线程,那末这个线程将会反省kill标记位,同时会保持下一个kill哀求。MySQL会在每次的主轮回中反省kill标记位,不外有些情形下该线程大概会过一小段才干逝世失落。假如该线程程被其他线程锁住了,那末kill哀求会在锁开释时即刻失效。<Pstyle="TEXT-INDENT:2em">Locked<Pstyle="TEXT-INDENT:2em">被其他查询锁住了。<Pstyle="TEXT-INDENT:2em">Sendingdata<Pstyle="TEXT-INDENT:2em">正在处置SELECT查询的纪录,同时正在把了局发送给客户端。<Pstyle="TEXT-INDENT:2em">Sortingforgroup<Pstyle="TEXT-INDENT:2em">正在为GROUPBY做排序。<Pstyle="TEXT-INDENT:2em">Sortingfororder<Pstyle="TEXT-INDENT:2em">正在为ORDERBY做排序。<Pstyle="TEXT-INDENT:2em">Openingtables<Pstyle="TEXT-INDENT:2em">这个历程应当会很快,除非遭到其他要素的搅扰。比方,在执ALTERTABLE或LOCKTABLE语句行完之前,数据表没法被其他线程翻开。正实验翻开一个表。<Pstyle="TEXT-INDENT:2em">Removingduplicates<Pstyle="TEXT-INDENT:2em">正在实行一个SELECTDISTINCT体例的查询,可是MySQL没法在前一个阶段优化失落那些反复的纪录。因而,MySQL必要再次往失落反复的纪录,然后再把了局发送给客户端。<Pstyle="TEXT-INDENT:2em">Reopentable<Pstyle="TEXT-INDENT:2em">取得了对一个表的锁,可是必需在表布局修正以后才干取得这个锁。已开释锁,封闭数据表,正实验从头翻开数据表。<Pstyle="TEXT-INDENT:2em">Repairbysorting<Pstyle="TEXT-INDENT:2em">修复指令阃在排序以创立索引。<Pstyle="TEXT-INDENT:2em">Repairwithkeycache<Pstyle="TEXT-INDENT:2em">修复指令阃在使用索引缓存一个一个地创立新索引。它会比Repairbysorting慢些。<Pstyle="TEXT-INDENT:2em">Searchingrowsforupdate<Pstyle="TEXT-INDENT:2em">正在讲切合前提的纪录找出来以备更新。它必需在UPDATE要修正相干的纪录之前就完成了。<Pstyle="TEXT-INDENT:2em">Sleeping<Pstyle="TEXT-INDENT:2em">正在守候客户端发送新哀求.<Pstyle="TEXT-INDENT:2em">Systemlock<Pstyle="TEXT-INDENT:2em">正在守候获得一个内部的体系锁。假如以后没有运转多个mysqld服务器同时哀求统一个表,那末能够经由过程增添--skip-external-locking参数来克制内部体系锁。<Pstyle="TEXT-INDENT:2em">Upgradinglock<Pstyle="TEXT-INDENT:2em">INSERTDELAYED正在实验获得一个锁表以拔出新纪录。<Pstyle="TEXT-INDENT:2em">Updating<Pstyle="TEXT-INDENT:2em">正在搜刮婚配的纪录,而且修正它们。<Pstyle="TEXT-INDENT:2em">UserLock<Pstyle="TEXT-INDENT:2em">正在守候GET_LOCK()。<Pstyle="TEXT-INDENT:2em">Waitingfortables<Pstyle="TEXT-INDENT:2em">该线程失掉关照,数据表布局已被修正了,必要从头翻开数据表以获得新的布局。然后,为了能的从头翻开数据表,必需比及一切其他线程封闭这个表。以下几种情形下会发生这个关照:FLUSHTABLEStbl_name,ALTERTABLE,RENAMETABLE,REPAIRTABLE,ANALYZETABLE,或OPTIMIZETABLE。<Pstyle="TEXT-INDENT:2em">waitingforhandlerinsert<Pstyle="TEXT-INDENT:2em">INSERTDELAYED已处置完了一切待处置的拔出操纵,正在守候新的哀求。<Pstyle="TEXT-INDENT:2em">年夜部分形态对应很快的操纵,只需有一个线程坚持统一个形态好几秒钟,那末多是有成绩产生了,必要反省一下。另有别的的形态没在下面中列出来,不外它们年夜部分只是在检察服务器是不是有存在毛病是才用得着。
人力成本上的节省,MySQL的用户Spacemonkey实验室的首席执行官MitchPirtle如此表示:“维护MySQL使得你不需要一个年薪15万美元的DBA。 |
|