日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL 数据库规范--调优篇(终结篇)

發(fā)布時(shí)間:2025/4/14 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 数据库规范--调优篇(终结篇) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言


這篇是MySQL 數(shù)據(jù)庫(kù)規(guī)范的最后一篇--調(diào)優(yōu)篇,旨在提供我們發(fā)現(xiàn)系統(tǒng)性能變?nèi)酢ySQL系統(tǒng)參數(shù)調(diào)優(yōu),SQL腳本出現(xiàn)問(wèn)題的精準(zhǔn)定位與調(diào)優(yōu)方法。

目錄


1.MySQL 調(diào)優(yōu)金字塔理論
2.MySQL 慢查詢分析--mysqldumpslow、pt_query_digest工具的使用(SQL腳本層面)
3.選擇合適的數(shù)據(jù)類型
4.去除無(wú)用的索引--pt_duplicate_key_checker工具的使用(索引層面)
5.反范式化設(shè)計(jì)(表結(jié)構(gòu))
6.垂直水平分表
7.MySQL 重要參數(shù)調(diào)優(yōu)(系統(tǒng)配置)

1.MySQL 調(diào)優(yōu)金字塔理論


如下圖所示:

?

MySQL調(diào)優(yōu)金字塔理論.png
如上圖所示:

?

數(shù)據(jù)庫(kù)優(yōu)化維度有四個(gè):
硬件系統(tǒng)配置數(shù)據(jù)庫(kù)表結(jié)構(gòu)SQL及索引
優(yōu)化成本:
硬件>系統(tǒng)配置>數(shù)據(jù)庫(kù)表結(jié)構(gòu)>SQL及索引
優(yōu)化效果:
硬件<系統(tǒng)配置<數(shù)據(jù)庫(kù)表結(jié)構(gòu)<SQL及索引

2.MySQL 慢查詢分析


對(duì)于系統(tǒng)中慢查詢的分析,有助于我們更高效的定位問(wèn)題,分析問(wèn)題。
mysqldumpslow、pt_query_digest是進(jìn)行慢查詢分析的利器。

前置條件

1.查看本機(jī)MySQL Server 慢查詢是否打開

show variables like 'slow%';

慢查詢打開的情況如下所示:

慢查詢狀態(tài)

若慢查詢未打開則通過(guò)如下腳本設(shè)置慢查詢:

set global slow_query_log = on; 即 set global [上圖中選項(xiàng)] = [你要設(shè)置的參數(shù)值] 注意 slow_query_log_file 路徑要加單引號(hào),因?yàn)槁窂絭archar 類型的。

2.1 mysqldumpslow分析慢查詢

mysqldumpslow 是MySQL自帶的分析數(shù)據(jù)庫(kù)慢查詢的原生利器,使用方法如下:

mysqldumpslow -t 3 /data/mysql/log/mysql_slow_query.log | more \G; -t 3 顯示前3條慢查詢。

慢查詢信息及分析


慢查詢信息.png

但是 mysqldumpslow 顯示的信息比較少,比如說(shuō)此條sql執(zhí)行次數(shù)在整體的執(zhí)行次數(shù)中占用的百分比。類似于上述信息在 mysqldumpslow 的分析結(jié)果中是不存在的。

接下里我們介紹另一種工具 pt_query_digest

2.2 pt_query_digest分析慢查詢

之所以使用 pt_query_digest 工具對(duì)慢查詢?nèi)罩具M(jìn)行分析,主要原因是上述工具分析的內(nèi)容更佳豐富,更加方便我們分析慢查詢。
前置條件
安裝 pt_query_digest ,Google搜索應(yīng)該一大把。

確保 pt_query_digest 安裝成功 執(zhí)行如下操作:

pt-query-digest /data/mysql/log/mysql_slow_query.log > slow_log.report

上述命令表示分析本機(jī)慢查詢,并輸出報(bào)表(文件)
接下來(lái)分析生成的報(bào)表:

tail slow_log.report

按如下圖所示信息:

pt_query_digest報(bào)表分析.png

我們對(duì)以上紅色框圖標(biāo)記的報(bào)表信息進(jìn)行詳細(xì)描述,事實(shí)上這也是我們需要掌握的重點(diǎn):

1.pct :sql語(yǔ)句某執(zhí)行屬性占所有慢查詢語(yǔ)句某執(zhí)行屬性的百分比
1.total:sql語(yǔ)句某執(zhí)行屬性的所有屬性時(shí)間。
2.Count:sql語(yǔ)句執(zhí)行的次數(shù),對(duì)應(yīng)的pct 表示此sql 語(yǔ)句執(zhí)行次數(shù)占所有慢查詢語(yǔ)句執(zhí)行次數(shù)的%比。上圖為25%,total:表示總共執(zhí)行了1次。
3.Exec time:sql執(zhí)行時(shí)間
4.Lock time:sql執(zhí)行期間被鎖定的時(shí)間
5.Rows sent:傳輸?shù)挠行?shù)據(jù),在select 查詢語(yǔ)句中才有值
6.Rows examine:總共查詢的數(shù)據(jù),非目標(biāo)數(shù)據(jù)。
7.Query_time distribution:查詢時(shí)間分布
8.SQL 語(yǔ)句:上圖中為 select * from payment limit 10\G;

舉例說(shuō)明:加入某執(zhí)行次數(shù)(count) 占比較高的sql語(yǔ)句,執(zhí)行時(shí)間很長(zhǎng),Rows sent 數(shù)值很小,Rows examine 數(shù)值很大則表明(I/O較大)。那就表明有可能 sql 查詢語(yǔ)句走了全表掃描,或者全索引掃描。那么就要建立合適索引或者優(yōu)化sql語(yǔ)句了。
如下很好的展示了我們?cè)诜治雎樵儠r(shí)需要著重分析的三點(diǎn):

慢查詢分析的三個(gè)基準(zhǔn)點(diǎn).png

3.選擇合適的數(shù)據(jù)類型

可以參考MySQL開發(fā)規(guī)范--設(shè)計(jì)篇中的1.6 數(shù)據(jù)表設(shè)計(jì)與規(guī)劃

如下圖是常用字段類型的選擇建議:


選擇合適的數(shù)據(jù)類型

4.去除無(wú)用的索引--pt_duplicate_key_checker工具的使用(索引層面)

此工具可以分析選定的 database 中的所有表中建立的index 中可能重復(fù)的索引,并給出了刪除建議。

5.反范式化設(shè)計(jì)(表結(jié)構(gòu))

關(guān)于范式的理解,請(qǐng)參考--MySQL 數(shù)據(jù)庫(kù)規(guī)范--設(shè)計(jì)篇1.1 數(shù)據(jù)庫(kù)表的設(shè)計(jì)范式(三范式&反范式)
先看一個(gè)不滿足第三范式的數(shù)據(jù)表設(shè)計(jì):

不滿足第三范式的數(shù)據(jù)表設(shè)計(jì).png

?

不滿足第三范式產(chǎn)生的問(wèn)題:
假如將表中屬于飲料分類的數(shù)據(jù)全部刪除了,那么飲料分類也就不存在了,飲料的分類描述也就沒(méi)了,查詢不到了。這明顯是不合理的。

重點(diǎn):滿足第三范式要求非鍵屬性之間沒(méi)有任何依賴關(guān)系,上圖中分類與分類描述存在直接依賴關(guān)系。所以不符合第三范式的要求,那么要讓表符合第三范式需要怎樣做呢?

拆分后滿足第三范式的表:

滿足第三范式的表.png

我們采用一張 分類--商品名稱 中間表來(lái)充當(dāng)分表之后的中間橋梁。

當(dāng)然如果一直遵循范式化設(shè)計(jì),什么設(shè)計(jì)都向第三范式靠攏,當(dāng)查詢需要連接很多表的時(shí)候,建立索引已經(jīng)起不到什么作用了,因?yàn)樽侄味疾辉谕粡埍碇?#xff0c;所以建立索引是無(wú)用功,那么就要考慮反范式化的設(shè)計(jì)了。

6.垂直、水平分表

原則上當(dāng)表中數(shù)據(jù)記錄的數(shù)量超過(guò)3000萬(wàn)條,再好的索引也已經(jīng)不能提高數(shù)據(jù)查詢的速度了,這時(shí)候就需要將表拆分成更多的小表,來(lái)進(jìn)行查詢。
分表的機(jī)制有兩種:

垂直分表:也就是將一部分列割裂開將數(shù)據(jù)放置在新設(shè)置的表中,優(yōu)先選擇字段值長(zhǎng)度較長(zhǎng),類型較重的字段進(jìn)行垂直分離。
水平分表:將表中數(shù)據(jù)水平切分,可以按照范圍、取模運(yùn)算、hash運(yùn)算進(jìn)行數(shù)據(jù)切割,每張表的結(jié)構(gòu)信息都是一樣的。

7.MySQL 重要參數(shù)調(diào)優(yōu)(系統(tǒng)配置)

7.1 操作系統(tǒng)配置優(yōu)化

操作系統(tǒng)配置優(yōu)化 打開操作系統(tǒng)文件限制.png

簡(jiǎn)要介紹一下:

1.tcp連接配置,超時(shí)時(shí)間配置 2.linux上文件打開數(shù)量限制 3.除此之外,最好在MySQL 服務(wù)器上關(guān)閉iptables,selinux 等防火墻軟件。

7. 2 MySQL 配置文件優(yōu)化

MySQL 可以通過(guò)啟動(dòng)時(shí)制定配置參數(shù)和使用配置文件兩種方法進(jìn)行配置,在大多數(shù)情況下配置文件位于/etc/my.cnf或是/etc/mysql/my.cnf MySQL查找配置文件順序可以通過(guò)以下方法獲得:

$ /usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'

注意:如果多個(gè)位置存在配置文件,后面的會(huì)覆蓋前面的

7.2.1 innodb_buffer_pool_size

innodb_buffer_pool_size 是非常重要的一個(gè)參數(shù),用戶配置Innodb 的緩沖池大小。如果數(shù)據(jù)庫(kù)中只有Innodb表,則推薦配置量為總內(nèi)存的75%。
一般情況下運(yùn)行如下命令,即可獲得配置innodb_buffer_pool_size 參數(shù)的最佳值:

select engine round(sum(data_length+index_length)/1024/1024,1) as 'total MB' from information_schema.tables where table_schema not in ("information_schema","performance_schema") group by engine; Innodb_buffer_pool_size > Total MB;

7.2.2 innodb_buffer_pool_instance

MySQL 系統(tǒng)中有一些資源是需要獨(dú)占使用的,比如緩沖去就是這樣一種資源,因此如果系統(tǒng)中只有一個(gè)緩沖池,那么會(huì)增加阻塞的幾率。我們多分成多個(gè),則可以增加并發(fā)性能。

7.2.3 innodb_log_buffer_size

innodb log緩沖的大小,設(shè)置大小只能能容得下1s中產(chǎn)生的事務(wù)日志就可以。

7.2.4 innodb_flush_log_at_trx_commit

關(guān)鍵參數(shù),對(duì)innodb 的I/O影響很大。默認(rèn)值為1,可以去0,1,2三個(gè)值,一般建議為2,但如果數(shù)據(jù)安全性要求較高則默認(rèn)使用1。

  • 0:每隔1s中才將事務(wù)提交的變更記錄刷新到磁盤
  • 1:每一次事務(wù)提交都把變更日志刷新到磁盤(最安全的方式)
  • 2:每一次提交將日志刷新到緩沖區(qū),隔1s之后會(huì)將日志刷新到磁盤。

7.2.5 innodb_read_io_threads && innodb_write_io_threads

這兩個(gè)參數(shù)決定了Innodb讀寫的I/O進(jìn)程數(shù),默認(rèn)為4。
決定這兩個(gè)參數(shù)數(shù)值的因素也有兩個(gè):cpu核數(shù)、應(yīng)用場(chǎng)景中讀寫事務(wù)比例。

7.2.6 innodb_file_per_table

關(guān)鍵參數(shù),默認(rèn)情況下配置為off。
控制innodb每一個(gè)表使用獨(dú)立的表空間,默認(rèn)情況下,所有的表都會(huì)建立在共享表空間當(dāng)中。
使用共享表空間會(huì)帶來(lái)什么問(wèn)題:

1.多個(gè)表對(duì)共享表空間的操作,是順序進(jìn)行的,這樣的話操作效率在并發(fā)情況下回降低。 2.如果現(xiàn)在要?jiǎng)h除一張表,會(huì)導(dǎo)致共享表空間先要將數(shù)據(jù)導(dǎo)出來(lái),再重組。

7.2.7 innodb_stats_on_metadata

作用:決定了MySQL在什么情況下會(huì)刷新innodb表的統(tǒng)計(jì)信息。
保證數(shù)據(jù)庫(kù)優(yōu)化器能使用到最新的索引,但不能太頻繁,一般設(shè)置為off。



作者:fxliutao
鏈接:https://www.jianshu.com/p/55020afb5eba
來(lái)源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。

轉(zhuǎn)載于:https://www.cnblogs.com/wuchanming/p/9248374.html

總結(jié)

以上是生活随笔為你收集整理的MySQL 数据库规范--调优篇(终结篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久手机看片 | 91网页版 | 亚洲成人精品一区二区 | 日韩av一区二区在线播放 | 亚洲一区二区三区香蕉 | 午夜一区二区三区 | 97久久久久久久久久 | 国产一区91 | 加勒比精品在线 | 不卡中文 | 日韩色影院 | 色视av | 日日操狠狠干 | 色777| 怡春院欧美| 91本色| 久久久久无码精品国产 | 中文字幕日韩一级 | 久久鲁视频| 日本免费专区 | www.性欧美 | 美女网站黄页 | 快色在线观看 | 在线日韩中文字幕 | 免费日皮视频 | 日韩免费视频一区二区视频在线观看 | 思思久久99 | 色综合久久88色综合天天免费 | 艳妇臀荡乳欲伦交换在线播放 | 中文字幕视频在线播放 | 上原亚衣在线 | 香蕉视频一区二区三区 | 操操操网| 玖玖伊人 | 插插宗合网 | 久久精品aⅴ无码中文字字幕重口 | 午夜激情福利视频 | 欧美裸体女人 | 亚洲色欲色欲www | 国产欧美一区二区三区视频在线观看 | 久久青青 | 浪浪视频在线观看 | 毛片黄片免费看 | 国产精品高潮呻吟久久久久久 | 日日操日日操 | 亚洲一区无 | 色欲狠狠躁天天躁无码中文字幕 | 岛国免费视频 | 黄色大片av | 亚洲天堂国产精品 | 精品九九 | 亚洲a成人| 九色视频91 | 亚洲免费精品视频在线观看 | 活大器粗np高h一女多夫 | 男人和女人插插 | 中文字幕一二三 | 一久久久| 在线你懂得| 精品无码一区二区三区的天堂 | 国产美女无遮挡永久免费观看 | 51成人网 | 欧美日韩免费 | 一区国产视频 | 最新av网址在线观看 | 老司机精品导航 | 99热这里只有精品首页 | 不卡的免费av | 91在现看| 国产又爽又黄的视频 | 蜜臀久久99精品久久一区二区 | 国产精品一区二区av | 亚洲视频久久 | 中国精品久久久 | 国产成人精品久久 | 国产在线视频导航 | 精品亚洲成人 | 欧美成人片在线观看 | 国产群p视频 | 亚洲激情国产 | xxxxx在线视频 | www,超碰 | 王者后宫yin肉h文催眠 | 日本东京热一区二区三区 | av鲁丝一区鲁丝二区鲁丝 | 亚洲综合在线中文字幕 | 国产高清免费av | 在线观看视频日韩 | 亚洲欧美激情另类校园 | 日本在线视频观看 | 香蕉久久夜色精品 | 国产高潮久久 | 人人插人人| 中文字幕一区二区三区人妻不卡 | 日本va欧美va欧美va精品 | 日韩不卡一区二区三区 | 黄色三级网站在线观看 | 最好看的中文字幕国语电影mv | 日本精品视频在线观看 |