仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1055|回复: 9
打印 上一主题 下一主题

[学习教程] 公布MySQL数据库中查找实行效力慢的SQL语句

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对免费版的用户也具有充足的支持服务。在dev.mysql.com上,一个大型的MySQL学习教程强大社区用户和开发者可以讨论所有关于MySQL的事情。这个站点拥有博客、指南、视频、技术交流会、白皮书和论坛等方式的交流。启动MySQL时加参数--log-slow-queries来纪录实行工夫凌驾long_query_time秒的sql:<Pstyle="TEXT-INDENT:2em">
  1. /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。
admin 该用户已被删除
沙发
发表于 2015-1-18 18:53:01 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
山那边是海 该用户已被删除
板凳
发表于 2015-1-18 18:53:02 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
飘灵儿 该用户已被删除
地板
发表于 2015-1-27 18:09:15 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
若相依 该用户已被删除
5#
发表于 2015-2-5 14:31:43 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-12 07:00:17 | 只看该作者
无法深入到数据库系统层面去了解和探究
小妖女 该用户已被删除
7#
发表于 2015-3-3 00:17:33 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-11 08:14:29 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
谁可相欹 该用户已被删除
9#
发表于 2015-3-18 02:18:26 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
变相怪杰 该用户已被删除
10#
发表于 2015-3-25 09:41:11 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 07:05

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表