程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql中 profiler性能運用小結

mysql中 profiler性能運用小結

編輯:關於MYSQL數據庫

MySQL從5.0.37起,提供了profile的功用,對功用調試極端有用. profile的功用首要用途是顯示 sql 執行的整個流程中各項資源的運用情況。剖析器可以更好的展現出不良 SQL 的功用疑問所在。

  下面咱們舉例簡介一下 MySQL SQL Profiler 的運用方法:

  最先,開啟 MySQL SQL Profiler

  MySQL> SELECT @@profiling;

  +――――-+

   @@profiling

  +――――-+

   0

  +――――-+

  1 row in set (0.00 sec)

  MySQL> SET profiling = 1;

  Query OK, 0 rows affected (0.00 sec)

  MySQL> SELECT @@profiling;

  +――――-+

   @@profiling

  +――――-+

   1

  +――――-+

  1 row in set (0.00 sec)

  默許情況下 profiling 的值為 0 表示 MySQL SQL Profiler 處於 OFF 形態,開啟 SQL 功用剖析器後 profiling 的值為 1.

  議決 sql 功用剖析器,咱們來比擬一下 下列語句前後 2 次執行流程的差異,對咱們明白 sql 的細致執行流程是十分有協助的。

  MySQL> create table t_engines select * from t_engines1;

  Query OK, 57344 rows affected (0.10 sec)

  Records: 57344 Duplicates: 0 Warnings: 0

  MySQL> select count(*) from t_engines;

  +―――-+

   count(*)

  +―――-+

   57344

  +―――-+

  1 row in set (0.00 sec)

  MySQL> select count(*) from t_engines;

  +―――-+

   count(*)

  +―――-+

   57344

  +―――-+

  1 row in set (0.00 sec)

  MySQL> SHOW PROFILES;

  +―――-+――――+――――――――――――――――-+

   Query_ID Duration Query

  +―――-+――――+――――――――――――――――-+

   26 0.10213775 create table t_engines select * from t_engines1

   27 0.00032775 select count(*) from t_engines

28 0.00003850 select count(*) from t_engines

  +―――-+――――+――――――――――――――――-+

  15 rows in set (0.01 sec)

  MySQL> SHOW PROFILE FOR QUERY 27;

  +――――――――――C+――――+

   Status Duration

  +――――――――――C+――――+

   (initialization) 0.00000425

   checking query cache for query 0.00004050

   checking permissions 0.00001050

   Opening tables 0.00018250

   System lock 0.00000450

   Table lock 0.00001775

   init 0.00001075

   optimizing 0.00000550

   executing 0.00002775

   end 0.00000450

   query end 0.00000325

   storing result in query cache 0.00000400

   freeing items 0.00000400

   closing tables 0.00000500

   logging slow query 0.00000300

  +――――――――――C+――――+

  15 rows in set (0.00 sec)

  MySQL> SHOW PROFILE FOR QUERY 28;

  +――――――――――――-+――――+

   Status Duration

  +――――――――――――-+――――+

   (initialization) 0.00000350

   checking query cache for query 0.00000750

   checking privileges on cached query 0.00000500

   checking permissions 0.00000525

   sending cached result to clIEnt 0.00001275

   logging slow query 0.00000450

  +――――――――――――-+――――+

  6 rows in set (0.00 sec)

  MySQL> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =27 ORDER BY SEQ;

  +―――-+

   DURATION

+―――-+

   0.000326

  +―――-+

  1 row in set (0.00 sec)

  MySQL> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =28 ORDER BY SEQ;

  +―――-+

   DURATION

  +―――-+

   0.000039

  +―――-+

  1 row in set (0.00 sec)

  MySQL>

  從上面的例子中咱們可以明晰的看出 2 次執行 count 語句的差異, SHOW PROFILE FOR QUERY 27 展現的是第一次 count 統計的執行流程,包括了 Opening tables 、 Table lock 等操作 。而 SHOW PROFILE FOR QUERY 28 展現了第二次 count 統計的執行流程 , 第二次 count 直接從查詢緩存中前往 count 統計後果,議決比擬 2 次統計的總執行時間覺察,緩存讀的速度接近物理讀的 10 倍。議決運用 SQL 功用剖析器可以協助咱們對一些比擬難以確定功用疑問的 SQL 執行診斷,找出疑問本源。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved