Mysql慢查詢日志的使用 和 Mysql的優化

一、生成實驗數據

原理:sql 蠕蟲復制(這種生成數據方式同樣適用于數據表中有主鍵的情況)。

insert into comic (name,pen_name,cover) select name,pen_name,cover from comic

?

二、慢查詢日志設置

當語句執行時間較長時,通過日志的方式進行記錄,這種方式就是慢查詢的日志。

1、臨時開啟慢查詢日志(如果需要長時間開啟,則需要更改mysql配置文件,第6點有介紹)

set global slow_query_log = on;?

注:如果想關閉慢查詢日志,只需要執行 set global slow_query_log = off; 即可

?

2、臨時設置慢查詢時間臨界點??查詢時間高于這個臨界點的都會被記錄到慢查詢日志中(如果需要長時間開啟,則需要更改mysql配置文件,第6點有介紹)。

set long_query_time = 1;

現在起,所有執行時間超過1秒的sql都將被記錄到慢查詢文件中(我這里就是 /data/mysql/mysql-slow.log)。

?

3、設置慢查詢存儲的方式

set globle log_output = file;

說明: 可以看到,我這里設置為了file,就是說我的慢查詢日志是通過file體現的,默認是none,我們可以設置為table或者file,如果是table則慢查詢信息會保存到mysql庫下的slow_log表中

?

4、查詢慢查詢日志的開啟狀態和慢查詢日志儲存的位置

show variables like '%quer%';

參數說明:

slow_query_log : 是否已經開啟慢查詢

slow_query_log_file :?慢查詢日志文件路徑

long_query_time : ?超過多少秒的查詢就寫入日志?

log_queries_not_using_indexes 如果值設置為ON,則會記錄所有沒有利用索引的查詢(性能優化時開啟此項,平時不要開啟)

?

5、使用慢查詢日志示例

cat -n? /data/mysql/mysql-slow.log

從慢查詢日志中,我們可以看到每一條查詢時間高于1s鐘的sql語句,并可以看到執行的時間是多少。

比如上面,就表示 sql語句??select * from comic where comic_id < 1952000;? 執行時間為3.902864秒,超出了我們設置的慢查詢時間臨界點1s,所以被記錄下來了。

?

6、永久設置慢查詢日志開啟,以及設置慢查詢日志時間臨界點

linux中,mysql配置文件一般默認在 /etc/my.cnf

更改對應參數即可。

?

?

三、對慢查詢日志進行分析

我們通過查看慢查詢日志可以發現,很亂,數據量大的時候,可能一天會產生幾個G的日志,根本沒有辦法去清晰明了的分析。所以,這里,我們采用工具進行分析。

1、使用mysqldumpslow進行分析第一種方式

mysqldumpslow -t 10 ?/data/mysql/mysql-slow.log? #顯示出慢查詢日志中最慢的10條sql

注:mysqldumpslow工具還有其他參數,以提供其他功能,這里,只以最基本的-t做了介紹。

?

2、使用pt-query-digest工具進行分析

mysqldumpslow是mysql安裝后就自帶的工具,用于分析慢查詢日志,但是pt-query-digest卻不是mysql自帶的,如果想使用pt-query-digest進行慢查詢日志的分析,則需要自己安裝pt-query-digest。pt-query-digest工具相較于mysqldumpslow功能多一點。

(1)安裝

yum install perl-DBI

yum install perl-DBD-MySQL

yum install perl-Time-HiRes

yum install perl-IO-Socket-SSL

wget percona.com/get/pt-query-digest

chmod u+x pt-query-digest?

mv pt-query-digest ?/usr/bin/??

?

(2)查看具體參數作用

pt-query-digest --help

?

(3)使用

pt-query-digest ?/data/mysql/mysql-slow.log

查詢出來的結果分為三部分

?第一部分:

顯示出了日志的時間范圍,以及總的sql數量和不同的sql數量。

第二部分:

顯示出統計信息。

第三部分:

每一個sql具體的分析

pct是percent的簡寫,表示占的百分比

cout是占總sql個數的百分比,exec time 是占總執行時間的百分比,lock time 表示占總的鎖表時間的百分比。

?

(4)如何通過pt-query-digest 慢查詢日志發現有問題的sql

1)查詢次數多且每次查詢占用時間長的sql

通常為pt-query-digest分析的前幾個查詢

2)IO消耗大的sql

注意pt-query-digest分析中的Rows examine項

3)為命中索引的sql

注意pt-query-digest分析中Rows examine(掃描行數) 和?Rows sent (發送行數)的對比?,如果掃描行數遠遠大于發送行數,則說明索引命中率并不高。

?

四、對sql進行優化

1、使用explain查詢sql的執行計劃

explain select comic_id,name,pen_name,cover,last_verify_time from comic;

參數分析:

table:表示屬于哪張數據表

type:最重要的參數,表示連接使用了何種類型。從最好到最差的連接類型為const,eq_reg,ref,range,index和ALL。

possible_keys:顯示可能應用在這張表中的索引。如果為null,則表示沒有可能的索引。

key:實際使用的索引。如果為null,則表示沒有使用索引。

key_len:使用的索引的長度,在不損失精確性的情況下,長度越短越好。

ref:表示索引的哪一列被使用了,如果可能的話,是一個常數。

rows:Mysql認為必須檢查的用來返回請求數據的行數。?

?

2、count() 和 Max() 的優化方法

(1)優化前,是沒有為last_update_time字段建立索引的情況,查詢最大的時間戳

?

(2)優化后,是為last_update_time字段建立索引的情況,查詢最大的時間戳

create index update_time on comic(last_update_time);

對比,可以看到,在沒有為字段建立索引的情況下,查詢時間是11秒多,建立索引之后,查詢時間變成0秒了。

所以總結就是,如果經常用于count和max操作的字段,可以為其添加索引。

還有,值得注意的地方是:count() 計算時,count(*)會將這一列中的null值但也算進去,而count(comic_id)則不會將null算進去。

?

3、子查詢的優化

通常情況下,需要把子查詢優化為join查詢,但在優化時要注意關聯鍵是否有一對多的關系,如果有,是可能會出現重復數據的。所以如果存在一對多關系,則應該使用distinct進行限制。

例如:

select t.id?from t where t.id in (select k.kid from k);

優化成:

select distinct t.id from t join k on t.id = k.kid;

?

4、group by?的優化

#待補

5、limit的優化

?

五、對索引進行優化

1、選擇合適的列建立索引

2、索引優化sql的方法

3、索引維護的方法

?

六、數據庫結構優化

1、選擇合適的數據類型

2、數據庫表的范式化優化

3、數據庫表的反范式優化

4、數據庫表的垂直拆分

5、數據庫表的水平拆分

?

七、系統配置優化

1、數據庫系統配置優化

2、Mysql配置文件優化

3、第三方配置工具使用

?

八、服務器硬件優化

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282594.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282594.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282594.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle 12C CDB、PDB常用管理命令

--查看PDB信息&#xff08;在CDB模式下&#xff09; show pdbs --查看所有pdb select name,open_mode from v$pdbs; --v$pdbs為PDB信息視圖 select con_id, dbid, guid, name , open_mode from v$pdbs; --切換容器 alter session set containerorcl1 --切換到PDBorcl1容器…

指定時間的月初和月末一天的寫法

DateTime dt Convert.ToDateTime("2017-2");DateTime FirstDay new DateTime(dt.Year, dt.Month, 1);//本月初1號DateTime LastDay new DateTime(dt.AddMonths(1).Year, dt.AddMonths(1).Month, 1).AddDays(-1);//下月初1號減一天本月底 轉載于:https://www.cnblo…

mysql數據表設計要點以及快門

一個sql表的設計首先要考慮的是字段 然后去考慮這個字段應該具有哪些特性, 最后,考慮哪些字段經常用于查詢,設置為索引 下面是一個比較簡單的例子,大概說明了怎么樣去構造sql語句創建一個sql表 create table user_message( id int UNSIGNED not null auto_increment COMMEN…

分享實錄|區塊鏈技術與智能合約入門(開發實例)

1 什么是區塊鏈 1.1白話講解區塊鏈 現在區塊鏈特別火&#xff0c;可能大家都聽說過區塊鏈&#xff0c;聽說過比特幣&#xff0c;那到底什么是區塊鏈&#xff1f; 前幾天和一個朋友擼串&#xff0c;我給他安利區塊鏈和比特幣以及一些數字貨幣的知識&#xff0c;這個朋友也是一個…

大型網站技術架構:核心原理與案例分析筆記

1.大型網站軟件系統的特點&#xff1a; 高并發&#xff0c;大流量  高可用 海量數據  用戶分布廣泛&#xff0c;網絡情況復雜  安全環境惡劣  需求快速變更&#xff0c;發布頻繁  漸進式發展  2.大型網站演變架構 1)初步應用&#xff1a;數據&#xff08;數據…

1777:文件結構“圖”

1777:文件結構“圖” 查看提交統計提問總時間限制: 1000ms內存限制: 65536kB描述在計算機上看到文件系統的結構通常很有用。Microsoft Windows上面的"explorer"程序就是這樣的一個例子。但是在有圖形界面之前&#xff0c;沒有圖形化的表示方法的&#xff0c;那時候最…

thinkphp出現Call to undefined function Think\C() in ... online 313

造成這個問題的原因很多,在這里我只說明我自己遇到之后解決的辦法 我將functions.php改成了function.php之后,修改了一些其他無關緊要的東西出現了這個問題,來回排查,各種嘗試,最后,將function.php改回functions.php,可以正常運行

Oracle數據庫IP訪問限制(IP白名單黑名單)

1、編輯sqlnet.ora內容為&#xff1a;#允許訪問的IP&#xff08;白名單&#xff09;TCP.INVITED_NODES(127.0.0.1,192.168.56.109,ip2,ip3,..,..本地IP..)若使用白名單&#xff0c;必須有本地IP&#xff0c;否則監聽會起不來#不允許訪問的IP&#xff08;黑名單&#xff09;#TCP…

WPF效果第一百九十九篇之Gamma曲線

前面效果中分享了模塊對比;今天大周末那就再來分享一下最近實現的效果;基于YX^n公式根據不同的系數繪制Gamma曲線效果如下圖:1、曲線的話,咱就用最簡單的方式繪制一堆點:PathFigure pathFigure new PathFigure(){StartPoint new Point(0, count),};for(double x 0; x < 1…

圖片序列化和反序列化成圖片文件(代碼)

// // ViewController.m // 圖片序列化和反序列化 // // Created by Qlinchao on 17/3/14. // Copyright © 2017年 QLC. All rights reserved. //#import "ViewController.h"interface ViewController () property (weak, nonatomic) IBOutlet UIImageView …

windows 下 MyEclipse 逆向工程生成hiberate 對應配置文件以及 javaBean。

步驟1&#xff1a; 右邊工具欄 -> 右擊你的項目 -> 選中 MyEclipse -> Project Facets -> install Hibernate Facet -> 選擇對應的版本&#xff08;以及一些你想要的配置&#xff09; 步驟2&#xff1a; 導航欄 -> window -》 show View -> Other 。 然…

php加解密

一 對稱加密 1.mycyrpt的對稱加密: /*** param $key //數據加密密鑰 由自己定義,長度有限制 string* param $string //需要進行加解密的字符串 string* param $decrypt //加密還是解密 (最簡單的,0代表加密,1代表解密)* return string*/ function encryptDecrypt($key, $st…

深入理解Spring Boot數據源與連接池原理

? Create by ysterfoxmail.com 2018-8-2一&#xff1a;開始 在使用Spring Boot數據源之前&#xff0c;我們一般會導入相關依賴。其中數據源核心依賴就是spring‐boot‐starter‐jdbc 如下 <dependency><groupId>org.springframework.boot</groupId> …

Dapr 集成 Open Policy Agent 實現 接口的訪問控制

大型項目中基本都包含有復雜的訪問控制策略&#xff0c;特別是在一些多租戶場景中&#xff0c;例如Kubernetes中就支持RBAC&#xff0c;ABAC等多種授權類型。Dapr 的 中間件 Open Policy Agent 將Rego/OPA策略應用到傳入的Dapr HTTP請求中。Open Policy AgentOpen Policy Agent…

【Java】BigDecimal

一、前言 在使用Java&#xff0c;double 進行運算時&#xff0c;經常出現精度丟失的問題&#xff0c;總是在一個正確的結果左右偏0.0000**1。 特別在實際項目中&#xff0c;通過一個公式校驗該值是否大于0&#xff0c;如果大于0我們會做一件事情&#xff0c;小于0我們又處理其他…

PHP獲取當前頁面URL

//獲取頁面url function curPageURL() {$pageURL http;if (!empty($_SERVER[HTTPS])) {$pageURL . "s";}$pageURL . "://";if ($_SERVER["SERVER_PORT"] ! "80") {$pageURL . $_SERVER["SERVER_NAME"].":".$_SER…

【招聘(大連)】北森云計算 .NET 專場招聘

為了更好的實現戰略布局&#xff0c;逐步形成以三個產品研發中心&#xff08;北京、成都、大連&#xff09;為主&#xff0c;青島和南京為輔的產品研發團隊配置。北森云第三研發中心&#xff08;大連&#xff09;正式成立&#xff0c;目前大連的人選招聘正式開啟&#xff0c;歡…

PHP強制下載文件

//有時我們不想讓瀏覽器直接打開文件&#xff0c;如PDF文件&#xff0c;而是要直接下載文件&#xff0c;那么以下函數可以強制下載文件 //函數中使用了application/octet-stream頭類型。 function downloads($filename,$dir./) {$filepath $dir.$filename;if (!file_exists($f…

F5基于證書認證的客戶端登錄

1.生成密鑰RSA類型&#xff0c;密碼&#xff1a;123456保存為Openssl格式2.上傳客戶機SecureCRT生成的公鑰 Identity.pub到用戶home目錄下.ssh文件夾中cd .sshmv Identity.pub authorized_keys ##cat .ssh/id_rsa.pub >> ~/.ssh/authorized_keys3.更改F5 ssh配置文件tmsh…

C#多線程編程-必知必會

“發現問題的能力&#xff0c;運用技術解決問題的能力&#xff0c;是一個技術人成長的關鍵”圖片故事&#xff1a;洋姜的花&#xff0c;拍攝于2022年7月23日&#xff0c;地點&#xff1a;北京奧林匹克森林公園 &#xff0c;攝影師&#xff1a;劉先生概要&#xff1a;使用C#發起…