电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解MySQL 慢查詢

瀏覽:4日期:2023-10-13 17:19:05

查詢mysql的操作信息

show status -- 顯示全部mysql操作信息show status like 'com_insert%'; -- 獲得mysql的插入次數;show status like 'com_delete%'; -- 獲得mysql的刪除次數;show status like 'com_select%'; -- 獲得mysql的查詢次數;show status like 'uptime'; -- 獲得mysql服務器運行時間show status like ’connections’; -- 獲得mysql連接次數

查詢mysql的操作信息show [session|global] status like .... 如果你不寫 [session|global] 默認是session 會話,只取出當前窗口的執行,如果你想看所有(從mysql 啟動到現在,則應該 global)

通過查詢mysql的讀寫比例,可以做相應的配置優化;

慢查詢

當Mysql性能下降時,通過開啟慢查詢來獲得哪條SQL語句造成的響應過慢,進行分析處理。當然開啟慢查詢會帶來CPU損耗與日志記錄的IO開銷,所以我們要間斷性的打開慢查詢日志來查看Mysql運行狀態。

慢查詢能記錄下所有執行超過long_query_time時間的SQL語句, 用于找到執行慢的SQL, 方便我們對這些SQL進行優化.

show variables like '%slow%';-- 是否開啟慢查詢;show status like '%slow%'; -- 查詢慢查詢SQL狀況;show variables like 'long_query_time'; -- 慢查詢時間

慢查詢開啟設置

mysql> show variables like ’long_query_time’; -- 默認情況下,mysql認為10秒才是一個慢查詢+-----------------+-----------+| Variable_name | Value |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+mysql> set long_query_time=1; -- 修改慢查詢時間,只能當前會話有效;mysql> set global slow_query_log=’ON’;-- 啟用慢查詢 ,加上global,不然會報錯的;

也可以在配置文件中更改修改mysql配置文件my.ini[windows]/my.cnf[Linux]加入,注意必須在[mysqld]后面加入

slow_query_log = on -- 開啟日志;slow_query_log_file = /data/f/mysql_slow_cw.log -- 記錄日志的log文件; 注意:window上必須寫絕對路徑,比如 D:/wamp/bin/mysql/mysql5.5.16/data/show-slow.log long_query_time = 2 -- 最長查詢的秒數;log-queries-not-using-indexes -- 表示記錄沒有使用索引的查詢

使用慢查詢

Example1:

mysql> select sleep(3);mysql> show status like ’%slow%’;+---------------------+-------+| Variable_name | Value |+---------------------+-------+| Slow_launch_threads | 0 || Slow_queries | 1 |+---------------------+-------+-- Slow_queries 一共有一條慢查詢

Example2:

利用存儲過程構建一個大的數據庫來進行測試;

數據準備

CREATE TABLE dept(deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 comment ’編號’, dname VARCHAR(20) NOT NULL DEFAULT '' comment ’名稱’, loc VARCHAR(13) NOT NULL DEFAULT '' comment ’地點’) ENGINE=MyISAM DEFAULT CHARSET=utf8 comment ’部門表’ ;CREATE TABLE emp(empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, ename VARCHAR(20) NOT NULL DEFAULT '' comment ’名字’, job VARCHAR(9) NOT NULL DEFAULT '' comment ’工作’,mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 comment ’上級編號’,hiredate DATE NOT NULL comment ’入職時間’,sal DECIMAL(7,2) NOT NULL comment ’薪水’,comm DECIMAL(7,2) NOT NULL comment ’紅利’,deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 comment ’部門編號’ )ENGINE=MyISAM DEFAULT CHARSET=utf8 comment ’雇員表’;CREATE TABLE salgrade(grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 comment ’等級’,losal DECIMAL(17,2) NOT NULL comment ’最低工資’,hisal DECIMAL(17,2) NOT NULL comment ’最高工資’)ENGINE=MyISAM DEFAULT CHARSET=utf8 comment ’工資級別表’;INSERT INTO salgrade VALUES (1,700,1200);INSERT INTO salgrade VALUES (2,1201,1400);INSERT INTO salgrade VALUES (3,1401,2000);INSERT INTO salgrade VALUES (4,2001,3000);INSERT INTO salgrade VALUES (5,3001,9999);delimiter $create function rand_num() returns tinyint(6) READS SQL DATA begin declare return_num tinyint(6) default 0; set return_num = floor(1+rand()*30); return return_num;end $delimiter $create function rand_string(n INT) returns varchar(255) READS SQL DATA begin declare chars_str varchar(100) default ’abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ’; declare return_str varchar(255) default ’’; declare i int default 0; while i < n do set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1)); set i = i + 1; end while; return return_str;end $delimiter $create procedure insert_emp(in start int(10),in max_num int(10))begin declare i int default 0; #set autocommit =0 把autocommit設置成0,關閉自動提交; set autocommit = 0; repeat set i = i + 1; insert into emp values ((start+i) ,rand_string(6),’SALESMAN’,0001,curdate(),2000,400,rand_num()); until i = max_num end repeat; commit;end $call insert_emp(1,4000000);SELECT * FROM `emp` where ename like ’%mQspyv%’; -- 1.163s# Time: 150530 15:30:58 -- 該查詢發生在2015-5-30 15:30:58# User@Host: root[root] @ localhost [127.0.0.1] -- 是誰,在什么主機上發生的查詢# Query_time: 1.134065 Lock_time: 0.000000 Rows_sent: 8 Rows_examined: 4000000 -- Query_time: 查詢總共用了多少時間,Lock_time: 在查詢時鎖定表的時間,Rows_sent: 返回多少rows數據,Rows_examined: 表掃描了400W行數據才得到的結果;SET timestamp=1432971058; -- 發生慢查詢時的時間戳;SELECT * FROM `emp` where ename like ’%mQspyv%’;

開啟慢查詢后每天都有可能有好幾G的慢查詢日志,這個時候去人工的分析明顯是不實際的;

慢查詢分析工具:

mysqldumpslow

該工具是慢查詢自帶的分析慢查詢工具,一般只要安裝了mysql,就會有該工具;

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ] -- 后跟參數以及log文件的絕對地址; -s what to sort by (al, at, ar, c, l, r, t), ’at’ is default al: average lock time ar: average rows sentat: average query timec: count l: lock timer: rows sentt: query time -r reverse the sort order (largest last instead of first) -t NUM just show the top n queries -a don’t abstract all numbers to N and strings to ’S’ -n NUM abstract numbers with at least n digits within names -g PATTERN grep: only consider stmts that include this string -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),default is ’*’, i.e. match all -i NAME name of server instance (if using mysql.server startup script) -l don’t subtract lock time from total time

常見用法

mysqldumpslow -s c -t 10 /var/run/mysqld/mysqld-slow.log # 取出使用最多的10條慢查詢 mysqldumpslow -s t -t 3 /var/run/mysqld/mysqld-slow.log # 取出查詢時間最慢的3條慢查詢mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log # 得到按照時間排序的前10條里面含有左連接的查詢語句 mysqldumpslow -s r -t 10 -g ’left join’ /var/run/mysqld/mysqld-slow.log # 按照掃描行數最多的

注意: 使用mysqldumpslow的分析結果不會顯示具體完整的sql語句,只會顯示sql的組成結構;

假如: SELECT * FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000;mysqldumpslow來顯示

Count: 1 Time=1.91s (1s) Lock=0.00s (0s) Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]SELECT * FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N;

pt-query-digest

說明

pt-query-digest是用于分析mysql慢查詢的一個工具,它可以分析binlog、General log、slowlog,也可以通過SHOWPROCESSLIST或者通過tcpdump抓取的MySQL協議數據來進行分析??梢园逊治鼋Y果輸出到文件中,分析過程是先對查詢語句的條件進行參數化,然后對參數化以后的查詢進行分組統計,統計出各查詢的執行時間、次數、占比等,可以借助分析結果找出問題進行優化。pt-query-digest是一個perl腳本,只需下載并賦權即可執行。

安裝

wget http://www.percona.com/get/pt-query-digest chmod +x pt-query-digest# 注意這是一個Linux腳本,要指明絕對或相對路徑來使用--或者下載整套工具wget percona.com/get/percona-toolkit.rpmrpm -ivh percona-toolkit-2.2.13-1.noarch.rpmwget percona.com/get/percona-toolkit.tar.gztar -zxvf percona-toolkit-2.2.13.tar.gz cd percona-toolkit-2.2.13perl Makefile.PLmake && make install

語法及重要選項

pt-query-digest [OPTIONS] [FILES] [DSN]--create-review-table 當使用--review參數把分析結果輸出到表中時,如果沒有表就自動創建。--create-history-table 當使用--history參數把分析結果輸出到表中時,如果沒有表就自動創建。--filter 對輸入的慢查詢按指定的字符串進行匹配過濾后再進行分析--limit限制輸出結果百分比或數量,默認值是20,即將最慢的20條語句輸出,如果是50%則按總響應時間占比從大到小排序,輸出到總和達到50%位置截止。--host mysql服務器地址--user mysql用戶名--password mysql用戶密碼--history 將分析結果保存到表中,分析結果比較詳細,下次再使用--history時,如果存在相同的語句,且查詢所在的時間區間和歷史表中的不同,則會記錄到數據表中,可以通過查詢同一CHECKSUM來比較某類型查詢的歷史變化。--review 將分析結果保存到表中,這個分析只是對查詢條件進行參數化,一個類型的查詢一條記錄,比較簡單。當下次使用--review時,如果存在相同的語句分析,就不會記錄到數據表中。--output 分析結果輸出類型,值可以是report(標準分析報告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于閱讀。--since 從什么時間開始分析,值為字符串,可以是指定的某個”yyyy-mm-dd [hh:mm:ss]”格式的時間點,也可以是簡單的一個時間值:s(秒)、h(小時)、m(分鐘)、d(天),如12h就表示從12小時前開始統計。--until 截止時間,配合—since可以分析一段時間內的慢查詢。

第一部分:總體統計結果:

標準分析報告解釋

詳解MySQL 慢查詢

Overall: 總共有多少條查詢,上例為總共266個查詢。Time range: 查詢執行的時間范圍。unique: 唯一查詢數量,即對查詢條件進行參數化以后,總共有多少個不同的查詢,該例為4。total: 總計 min:最小 max: 最大 avg:平均95%: 把所有值從小到大排列,位置位于95%的那個數,這個數一般最具有參考價值。median: 中位數,把所有值從小到大排列,位置位于中間那個數。

第二部分: 查詢分組統計結果:

詳解MySQL 慢查詢

這部分對查詢進行參數化并分組,然后對各類查詢的執行情況進行分析,結果按總執行時長,從大到小排序。Response: 總的響應時間。time: 該查詢在本次分析中總的時間占比。calls: 執行次數,即本次分析總共有多少條這種類型的查詢語句。R/Call: 平均每次執行的響應時間。Item : 查詢對象

第三部分:每一種查詢的詳細統計結果:

詳解MySQL 慢查詢

由上圖可見,1號查詢的詳細統計結果,最上面的表格列出了執行次數、最大、最小、平均、95%等各項目的統計。Databases: 庫名Users: 各個用戶執行的次數(占比)Query_time distribution : 查詢時間分布, 長短體現區間占比,本例中1s-10s之間查詢數量沒有,全部集中在10S里面。Tables: 查詢中涉及到的表Explain: 該條查詢的示例

用法示例

(1)直接分析慢查詢文件:

pt-query-digest slow.log > slow_report.log

(2)分析最近12小時內的查詢:

pt-query-digest --since=12h slow.log > slow_report2.log

(3)分析指定時間范圍內的查詢:

pt-query-digest slow.log --since ’2014-05-17 09:30:00’ --until ’2014-06-17 10:00:00’> > slow_report3.log

(4)分析只含有select語句的慢查詢

pt-query-digest --filter ’$event->{fingerprint} =~ m/^select/i’ slow.log> slow_report4.log

(5) 針對某個用戶的慢查詢

pt-query-digest --filter ’($event->{user} || '') =~ m/^root/i’ slow.log> slow_report5.log

(6) 查詢所有所有的全表掃描或full join的慢查詢

pt-query-digest --filter ’(($event->{Full_scan} || '') eq 'yes') ||(($event->{Full_join} || '') eq 'yes')’ slow.log> slow_report6.log

(7)把查詢保存到test數據庫的query_review表,如果沒有的話會自動創建;

pt-query-digest --user=root ?password=abc123 --review h=localhost,D=test,t=query_review --create-review-table slow.log

(8)把查詢保存到query_history表

pt-query-digest --user=root ?password=abc123 --review h=localhost,D=test,t=query_ history --create-review-table slow.log_20140401

(9)通過tcpdump抓取mysql的tcp協議數據,然后再分析

tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txtpt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log

(10)分析binlog

mysqlbinlog mysql-bin.000093 > mysql-bin000093.sqlpt-query-digest --type=binlog mysql-bin000093.sql > slow_report10.log

(11)分析general log

pt-query-digest --type=genlog localhost.log > slow_report11.log

以上就是詳解MySQL 慢查詢的詳細內容,更多關于MySQL 慢查詢的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 上海赞永| 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 环氧树脂地坪漆_济宁市新天地漆业有限公司 | 立式_复合式_壁挂式智能化电伴热洗眼器-上海达傲洗眼器生产厂家 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 复合肥,化肥厂,复合肥批发,化肥代理,复合肥品牌-红四方 | 媒介云-全网整合营销_成都新闻媒体发稿_软文发布平台 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 引领中高档酒店加盟_含舍·美素酒店品牌官网 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 杭州代理记账多少钱-注册公司代办-公司注销流程及费用-杭州福道财务管理咨询有限公司 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 挤出熔体泵_高温熔体泵_熔体出料泵_郑州海科熔体泵有限公司 |