久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql之調(diào)優(yōu)概論的案例分析

174次閱讀
沒有評論

共計 3009 個字符,預計需要花費 8 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

丸趣 TV 小編給大家分享一下 mysql 之調(diào)優(yōu)概論的案例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一   簡介

咱們先不說 cpu 的頻率,內(nèi)存的大小(這個和索引一樣重要,但不是本文討論的內(nèi)容),硬盤的尋道時間。想起 mysql 的調(diào)優(yōu),最起碼的必須知道 explain 執(zhí)行計劃,慢 sql 日志,老舊的 profile 命令,新的 performance_schema 性能視圖和 information_schema 中當前事務和內(nèi)存占用信息的相關表,還有 show engine innodb status 的診斷信息,以及某些 metrix 中的 tps,qps,iops 的指標。(相關推薦:《MySQL 教程》)

以上是為調(diào)優(yōu)準備的一些工具,而數(shù)據(jù)庫都會為高可用提供很多大大小小的功能,大的有:復制,組復制,分區(qū),文件鏈接:即 log 日志與數(shù)據(jù)文件等可分別放置不同硬盤。小的有:計算列,為列計算 hash,索引合并,索引下推,MRR,BKA,Loose Index 等算法,以及填充因子等。

當然,沒有視圖索引和分布式分區(qū)視圖,以及 join 僅僅只支持 nested 這是 mysql 的不足,而 sql server join 的算法支持三種,loop while hash,極大的改善 join 的速度。mysql 自帶提升性能的功能并不多,其他的就是經(jīng)驗之談,比如靜態(tài)表,不要在子查詢中使用函數(shù),盡量將子查詢變?yōu)?join 查詢,非字符串和 blob 列永遠比其他的數(shù)字或者時間列要慢,join |order by|group 一定不要讓其在硬盤生成臨時表,當然這個和內(nèi)存有關,窄表和寬表設計等,當然最后還是取決你的業(yè)務類型。

優(yōu)化入手有兩種方法,一種是運行時的,即在運行的服務器上優(yōu)化,一種是開發(fā)過程中。而無論哪種,performance_schema 都會需要。

二 performance_schema 講解

性能視圖是每個數(shù)據(jù)庫中都會有的,sql server 是 dm_* 開頭的一系列內(nèi)存表。而 mysql 就是 performance_schema 庫中的各種表,先看入口的幾個表:

SELECT * FROM setup_timers; --  計時定義表
select * from setup_actors; --  那些用戶需要收集信息
select * from Setup_objects; --  那些對象需要收集信息,比如 mysql 表,select * from setup_consumers; --  那些儀器的分類需要收集
select * from setup_instruments; --  收集儀器,每一個功能點都會有儀器的事件,開始和結(jié)束,然后開啟那個儀器,就會收集那個儀器的數(shù)據(jù) 

首先我們看開啟 performance_schema 的開關:

show variables like  performance_schema  --  這是一個 read only 變量 

mysql 之調(diào)優(yōu)概論的案例分析

如果為 OFF,則需要在配置文件中開啟。

那么下面就一個一個介紹這幾個入口表。

1,setup_actors 表

mysql 之調(diào)優(yōu)概論的案例分析

全部用戶都可收集。

2,Setup_objects

mysql 之調(diào)優(yōu)概論的案例分析

那些對象可以收集,是 table 還是 trigger 等。至于關閉兩個列控制,enabled 和 timed 字段設置為 No,這幾個表都是如此。

3  setup_consumers

mysql 之調(diào)優(yōu)概論的案例分析

事件的分類,stages 是步驟,一個語句在服務器執(zhí)行的過程步驟,結(jié)果和 profile 一樣,profile 方式不推薦,因為后面會去掉。transaction 是事務的事件收集等。

4 setup_instruments

這個就是主要的事件監(jiān)控儀器,如下:

mysql 之調(diào)優(yōu)概論的案例分析

5 最后就是 setup_timers,配合 performance_timers 定義那些儀器分類是的時間類型,如下:

mysql 之調(diào)優(yōu)概論的案例分析mysql 之調(diào)優(yōu)概論的案例分析

CYCLE:cpu 時鐘,TIMER_FREQUENCY 是一秒有多少,TIMER_RESOLUTION 是每次增加多少,最后是多久獲取一次這個時間。

三 利用 performance_schema 獲取 priofile 數(shù)據(jù)

開啟相關的 instrument:

我們看上面 instrument 分類表 setup_consumers 中的信息,關于 stage 的行都是 NO,那么我們需要改為 YES,同時一會需要拿 statements 監(jiān)控表中的信息,所以也需要開啟 statements:

UPDATE setup_consumers SET ENABLED =  YES 
 WHERE NAME LIKE  %stage% 
UPDATE setup_consumers SET ENABLED =  YES 
WHERE NAME LIKE  %statements%

然后把 stage 的 instrument 開啟

UPDATE performance_schema.setup_instruments SET ENABLED =  YES , TIMED =  YES 
 WHERE NAME LIKE  %stage/%  --  開啟所有執(zhí)行步驟的監(jiān)控
UPDATE performance_schema.setup_instruments SET ENABLED =  YES , TIMED =  YES 
WHERE NAME LIKE  %statement/%

執(zhí)行依據(jù) sql

 select * from quartz.TestOne

查詢這條語句的 queryid:

SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
 FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like  %quartz%

mysql 之調(diào)優(yōu)概論的案例分析

那么 id 就是 509

然后執(zhí)行性能監(jiān)控表:

SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
 FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=509

mysql 之調(diào)優(yōu)概論的案例分析

內(nèi)容和老版本的 profile 結(jié)果一樣。

主要看下 stage/sql/Sending data 這一行,這一行是主要 io 相關的事件,一般情況下,sql 慢了,而這一行數(shù)值比較大,那肯定硬盤讀數(shù)據(jù)慢了或者有鎖沖突。

那么就是用 error log,有死鎖,mysql 會將死鎖信息打入 error 日志,show engine innodb status 只是全局的一些信息,如果要想看詳細的再去監(jiān)控對應的 instrument。

而且目前 mysql8 多支持 NOWAIT 和 skiplocked 兩個語句,用法還是 select.. from 表明 for update/for nowait 等,非常靈活的解決了死鎖的處理方式,當然你也可以讓其事務隔離級別為臟讀級別,但是并不能解決更多的業(yè)務類型,設置死鎖超時也是一個可行的辦法。

以上是“mysql 之調(diào)優(yōu)概論的案例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業(yè)資訊頻道!

向 AI 問一下細節(jié)

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-18發(fā)表,共計3009字。
轉(zhuǎn)載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 化德县| 白山市| 沈阳市| 且末县| 苍山县| 刚察县| 澎湖县| 台东市| 凤凰县| 丹巴县| 绿春县| 英德市| 永城市| 吉首市| 大冶市| 宜宾县| 汪清县| 仁寿县| 抚松县| 汶川县| 大足县| 建德市| 抚松县| 旬阳县| 麻城市| 福州市| 娱乐| 虞城县| 五华县| 农安县| 奉化市| 罗城| 临漳县| 滨海县| 道孚县| 宜宾市| 夏河县| 三河市| 汉源县| 垣曲县| 彭山县|