問題是:如何從一個大項目中,迅速的定位執(zhí)行速度慢的查詢語句?
1.首先我們了解mysql數據庫的一些允許狀況
show session | global status like ‘uptime’ //運行的時間 session當前回話 global所有的
show status like ‘com_select’ //select命名使用的次數,update,delete,等一樣
show status like connections //查詢多少個鏈接
-----------------------------------
netstats -anb // 查詢鏈接的詳細信息 ip,端口等 ;mysql服務端口為3306 客戶端隨機分配端口
------------------------------------
2.如何定位慢查詢
步驟:
i:構建一個大表(400萬以上數據)->用存儲過程構建,要去數據貼近真實
創(chuàng)建表
create table dept(/*部門表*/
deptno mediumint unsigned not null default 0,//編號 unsigned 無符號整數
dname varchar(20) not null default "", //名稱
loc varchar(13) not null default "",//地點
)engine=myisam default charset=utf8;
---------------
create table emp(/*員工表*/
empno mediumint unsigned not null default 0,//編號
ename varchar(20) not null default "",//名字
job varchar(9) not null default "",//工作
mgr mediumint unsigned not null default 0,//上級編號
hiredate date not null,//入職時間
sal decimal(7,2) not null,//薪水
comm decimal(7,2) not null,//紅利
deptno mediumint unsigend not null default 0,//部門編號
)engine=myisam default charset=utf8;
------------------
create table salgrade(/*工資級別表*/
grade mediumint unsigend not null default 0,
losal decimal(17,2) not null,
hisal decimal(17,2) not null,
)engine=myisam default charset=utf8;
-----------------
創(chuàng)建函數.php
-----------------------------
舉例:
<?php
$con=mysql_connect("localhost","root","root");
if(!$con){
die(“失敗”
}
mysql_select_db('temp');
$sql="select rand_string(6) from dual";//dual 亞元表
>
---------------------------
ii:show variables like ‘long_query’ //顯示慢查詢的時間是多少
set long_query_time=1 //修改慢查詢時間為1s ;然后打開數據庫運行一天,再查看慢查詢
iii:show status like ‘slow_queries’ //顯示慢查詢次數
iiii:把慢查詢的sql記錄到日志中,默認不會打開。需要在啟動mysql時候,指定慢查詢記錄