Posts Tagged ‘profiling’
一个最好的剖析服务器的方法是,用SHOW STATUS来查看什么占用了它大量的处理时间。SHOW STATUS显示了很多的信息,我们仅仅关心其中的一小部分。 为了查看最近服务器的表现。你可以周期性的抽取SHOW STATUS并且把它和先前的结果进行比较。命令如下: mysqladmin extended -r -i 10(注:要连接服务器所以要加 -u -p 参数:mysqladmin -u root -p extended -r -i 10) 这些变量并不是一直增长的。因此你可能看到一些奇怪的输出,比如Threads_running有的时候是负数。不必担心这个,意思就是相对于上一 个例子,这个计数在减少。 因为这个输出是非常大的。我们可以使用grep(windows 强烈推荐cygwin)来查取一些想要的变量。也可以使用Innotop或其他的一些工具来查看这些结果。这个将在以后章节说明。下面就说一下比较有用的 变量。 Bytes_received ,Bytes_sent:服务器进出的流量。 Com_*:服务器执行的命令。 Created_*:在语句执行的时候,临时表和文件的创建。 Handler_*:存储引擎的操作。 Select_*:多种类连接的执行安排。 Sort_*:多种类排序的信息。 你可以使用这个方法来监控MySQL内部的操作。比如Key(键)的访问次数,对于MyISAM,从硬盘的Key(键)的读取,数据访问的频率 以及等等。这样才能帮助你知道在系统中哪些是潜在的瓶颈。而不用去查看一个单独的语句。你也可以使用单独的工具去分析SHOW STATUS,如mysqlreport.这样是为了得到一个总的服务器”健康”信息. 我们不会详细解释每个状态变量(status variables)的意思,但是当我们在例子中使用它们的时候,会详细说明。因此现在没必要担心我们对这些变量一无所知。 另一个剖析服务器的方法是使用SHOW PROCESSLIST.使用它不仅仅能看到什么类型的语句正在执行,也能知道你连接的状态。一些如在锁的状态下,连接数过高,是显而易见的瓶颈。与 SHOW STATUS一样,SHOW PROCESSLIST的信息量很大,我们也需要工具取代用手工查看结果的方法,比如INNOTOP。 via:http://xiayuanfeng.javaeye.com/blog/411453
结合FLUSH STATUS和SHOW SESSION STATUS对于查看语句执行和批量语句来说是非常有用的。这是优化语句的最佳方法。 让我们来看一个例子,首先,执行FLUSH STATUS把当前会话状态变量清零,因此你可以知道MySQL执行这个语句做了多少的工作。 mysql> FLUSH STATUS; 接下来,执行语句,我们添加了一个参数叫SQL_NO_CACHE。所以MySQL执行的语句并不是缓存所提供的。 mysql> SELECT SQL_NO_CACHE film_actor.actor_id, COUNT(*) -> FROM sakila.film_actor -> INNER JOIN sakila.actor USING(actor_id) -> GROUP BY film_actor.actor_id -> ORDER BY COUNT(*) DESC; … 200 rows in set (0.18 sec) 这个查询语句返回了200行。但是它真正的做了什么?SHOW STATUS可以更深入的查看。首先,让我们看看服务器所提供查询计划(query plan)的类型. mysql> SHOW SESSION STATUS LIKE ‘Select%’; +————————+——-+ | Variable_name | Value | +————————+——-+ [...]
非常棒的一篇Mysql相关文章 MySQL程序剖析 (Profiling) 我们将要详细的讲到MySQL的剖析(Profiling),因为它很少依赖于你的应用。应用和服务器 级别的剖析有的时候都是有必要的。虽然应用级别的剖析可以给你整个应用性能的总揽。,但是对MySQL的剖析提供了信息是服务器级别所提供不了的。比如, 对PHP代码进行剖析不会显示MySQL有多少行语句执行了。 与应用剖析一样,目标是找出MySQL哪部分消耗过多的时间。我们不会剖析MySQL源码的,虽然有的 时候定制化MySQL安装很有用,但是这是另一本书的主题了。所替代的是,我们将教你一些可以技术来获取和分析不同种类的MySQL执行语句的信息。 你可以用在任意的颗粒级别以满足你的需求:你可能对整个服务器进行剖析或者单独检查一个语句或者一组语 句。下列信息你可以一点点的收集: MySQL经常访问的那些数据 MySQL经常执行语句的类型 MySQL线程大部分时间的状态 MySQL经常执行语句的子系统 MySQL执行语句所访问的数据类型 不同活动的类型,比如扫描索引。 我们先从范围最广的剖析开始,那就是服务器剖析,将教你更多细节。 记录执行的语句 MySQL有两种记录语句的类型:general log和slow log。他们都是记录执行语句,但是却在语句执行进程的两端。general log记录了每个服务器收到的语句,因此它的语句可能包含了那些没有执行导致错误的语句。general Log记录了所有的语句,包括了一些非执行语句的事件,比如连接和断开连接。你可以用一个指令来启用它。 log = <file_name> 根据设计,general log不会包括执行时间和其他一些仅仅在语句执行完毕的信息。相比较而言,slow log记录执行完毕的语句。尤其是,它记录那些超过指定时间执行的语句。这两种日志都对程序剖析很有用,但是slow log是获取问题语句的主要工具。我们常常推荐把它开启。 下面列出的配置会开启这个日志。获取所有执行时间超过2s的语句,以及记录那些不使用索引的语句。它也 会记录一些执行慢的管理语句,比如OPTIMIZE TABLE: log-slow-queries = <file_name> long_query_time = 2 log-queries-not-using-indexes log-slow-admin-statements 你可以自定义这些配置,然后把它们放到my.conf文件中。更多的服务器配置将在以后的章节详细讲 [...]
profiling 基础 http://www.xaprb.com/blog/2006/10/12/how-to-profile-a-query-in-mysql/ http://www.xaprb.com/blog/2006/10/15/a-case-study-in-profiling-queries-in-mysql/ http://www.xaprb.com/blog/2006/10/17/mysql-profiling-case-study-part-2/ profiling 进阶 http://www.mysqlperformanceblog.com/2009/01/19/profiling-mysql-stored-routines/ http://www.mysqlperformanceblog.com/2008/05/18/wanted-better-memory-profiling-for-mysql/ maatkit–perldoc mk-query-profiler profiling高级 http://dev.mysql.com/tech-resources/articles/pro-mysql-ch6.html http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html profiling 骨灰级 http://www.scribd.com/doc/2669413/DTrace-and-MySQL-Presentation http://forge.mysql.com/wiki/Using_DTrace_with_MySQL http://wikis.sun.com/display/BluePrints/Optimizing+MySQL+Database+Application+Performance+with+Solaris+Dynamic+Tracing via:http://www.muduo.net/index.php?uid-8974-action-viewspace-itemid-330618
1)设置 set profiling = 1 ; 2)执行一些SQL语句 3) 显示执行的语句及序号 show profiles; 4)显示某SQL执行情况 show profile [ ALL | BLOCK IO, CONTEXT SWITCHES, CPU, IPC, MEMORY, PAGE FAULTS, SOURCE, SWAPS] [for query n] ; 3315-bbs>show profile all for query 1\G; *************************** 1. row *************************** Status: starting Duration: 0.000032 CPU_user: 0.000000 CPU_system: 0.000000 Context_voluntary: 0 Context_involuntary: 0 Block_ops_in: 0 Block_ops_out: 0 Messages_sent: [...]

