0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

總結(jié)一下MySQL常用的調(diào)優(yōu)方法

阿銘linux ? 來(lái)源:阿銘linux ? 2023-02-08 17:14 ? 次閱讀

前言

作為一名運(yùn)維,工作中跟MySQL打交道一定少不了,那么當(dāng)面試官問(wèn),你是如何優(yōu)化MySQL的,想必你心中多多少少會(huì)有答案。今天我就總結(jié)一下常用的調(diào)優(yōu)方法。

架構(gòu)層面

俗話說(shuō),眾人拾柴火焰高。當(dāng)一臺(tái)MySQL頂不住時(shí),我們就增加一臺(tái)或者多臺(tái)唄。最簡(jiǎn)單的方法,就是做一個(gè)主從架構(gòu),然后給它加一層代理(如mysql-proxy),然后設(shè)置其讀寫分離,將讀和寫分開,當(dāng)讀操作時(shí),可以到所有MySQL服務(wù)器上去請(qǐng)求,從而實(shí)現(xiàn)負(fù)載均衡。 再高級(jí)一點(diǎn),將單臺(tái)MySQL做成MySQL Cluster模式,也會(huì)提升整體性能。

系統(tǒng)層面

增加內(nèi)存,MySQL服務(wù)是比較耗費(fèi)內(nèi)存的,將內(nèi)存加大,然后調(diào)整其參數(shù),從而使其處理更多請(qǐng)求;

給磁盤做raid10或者raid5以增加磁盤的讀寫速度;

可以重新掛載磁盤,并加上noatime參數(shù),這樣可以減少磁盤的i/o;

MySQL自身層面

如果未配置主從同步,可以把bin-log功能關(guān)閉,減少磁盤i/o;

在my.cnf中加上skip-name-resolve,這樣可以避免由于解析主機(jī)名延遲造成mysql執(zhí)行慢;

調(diào)整幾個(gè)關(guān)鍵的buffer和cache。調(diào)整的依據(jù),主要根據(jù)數(shù)據(jù)庫(kù)的狀態(tài)來(lái)調(diào)試;

針對(duì)某些數(shù)據(jù)量很大的庫(kù)或者表,進(jìn)行分開分表,從而使其查詢速度更快;

應(yīng)用層面

查看慢查詢?nèi)罩?,根?jù)慢查詢?nèi)罩緝?yōu)化程序中的SQL語(yǔ)句,比如增加索引。首先要保證慢查詢?nèi)罩疽呀?jīng)配置:

slow_query_log= ON #開啟慢查詢?nèi)罩?slow_query_log_file=/data/mysql/slow.log #慢查詢?nèi)罩韭窂?long_query_time=1#查詢超過(guò)多少秒就會(huì)記錄日志

buffer和cache

key_buffer_size 首先可以根據(jù)系統(tǒng)的內(nèi)存大小設(shè)定它,大概的一個(gè)參考值:1G以下內(nèi)存設(shè)定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M。這個(gè)值可以通過(guò)檢查狀態(tài)值Key_read_requests和Key_reads,可以知道key_buffer_size設(shè)置是否合理。比例key_reads / key_read_requests應(yīng)該盡可能的低,至少是1:100,1:1000更好(上述狀態(tài)值可以使用SHOW STATUS LIKE 'key_read%'獲得)。注意:該參數(shù)值設(shè)置的過(guò)大反而會(huì)使服務(wù)器整體效率降低!

table_open_cache 打開一個(gè)表的時(shí)候,會(huì)臨時(shí)把表里面的數(shù)據(jù)放到這部分內(nèi)存中,一般設(shè)置成1024就夠了,它的大小我們可以通過(guò)這樣的方法來(lái)衡量:如果你發(fā)現(xiàn) open_tables等于table_cache,并且opened_tables在不斷增長(zhǎng),那么你就需要增加table_cache的值了(上述狀態(tài)值可以使用SHOW STATUS LIKE 'Open%tables'獲得)。注意,不能盲目地把table_cache設(shè)置成很大的值。如果設(shè)置得太高,可能會(huì)造成文件描述符不足,從而造成性能不穩(wěn)定或者連接失敗。

sort_buffer_size 查詢排序時(shí)所能使用的緩沖區(qū)大小,該參數(shù)對(duì)應(yīng)的分配內(nèi)存是每連接獨(dú)占!如果有100個(gè)連接,那么實(shí)際分配的總共排序緩沖區(qū)大小為100 × 4 = 400MB。所以,對(duì)于內(nèi)存在4GB左右的服務(wù)器推薦設(shè)置為4-8M。

read_buffer_size 讀查詢操作所能使用的緩沖區(qū)大小。和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!

join_buffer_size 聯(lián)合查詢操作所能使用的緩沖區(qū)大小,和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!

myisam_sort_buffer_size 這個(gè)緩沖區(qū)主要用于修復(fù)表過(guò)程中排序索引使用的內(nèi)存或者是建立索引時(shí)排序索引用到的內(nèi)存大小,一般4G內(nèi)存給64M即可。

query_cache_size MySQL查詢操作緩沖區(qū)的大小,通過(guò)以下做法調(diào)整:SHOW STATUS LIKE 'Qcache%'; 如果Qcache_lowmem_prunes該參數(shù)記錄有多少條查詢因?yàn)閮?nèi)存不足而被移除出查詢緩存。通過(guò)這個(gè)值,用戶可以適當(dāng)?shù)卣{(diào)整緩存大小。如果該值非常大,則表明經(jīng)常出現(xiàn)緩沖不夠的情況,需要增加緩存大??;Qcache_free_memory:查詢緩存的內(nèi)存大小,通過(guò)這個(gè)參數(shù)可以很清晰的知道當(dāng)前系統(tǒng)的查詢內(nèi)存是否夠用,是多了,還是不夠用,我們可以根據(jù)實(shí)際情況做出調(diào)整。一般情況下4G內(nèi)存設(shè)置64M足夠了。

thread_cache_size 表示可以重新利用保存在緩存中線程的數(shù),參考如下值:1G —> 8 2G —> 16 3G —> 32 3G —> 64。

除此之外,還有幾個(gè)比較關(guān)鍵的參數(shù):

thread_concurrency 這個(gè)值設(shè)置為cpu核數(shù)的2倍即可。

wait_timeout 表示空閑的連接超時(shí)時(shí)間,默認(rèn)是28800s,這個(gè)參數(shù)是和interactive_timeout一起使用的,也就是說(shuō)要想讓wait_timeout 生效,必須同時(shí)設(shè)置interactive_timeout,建議他們兩個(gè)都設(shè)置為10。

max_connect_errors 是一個(gè)MySQL中與安全有關(guān)的計(jì)數(shù)器值,它負(fù)責(zé)阻止過(guò)多嘗試失敗的客戶端以防止暴力破解密碼的情況。與性能并無(wú)太大關(guān)系。為了避免一些錯(cuò)誤我們一般都設(shè)置比較大,比如說(shuō)10000。

max_connections 最大的連接數(shù),根據(jù)業(yè)務(wù)請(qǐng)求量適當(dāng)調(diào)整,設(shè)置500足夠

max_user_connections 是指同一個(gè)賬號(hào)能夠同時(shí)連接到mysql服務(wù)的最大連接數(shù)。設(shè)置為0表示不限制。通常我們?cè)O(shè)置為100足夠。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    789

    瀏覽量

    26283
  • cache技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    1033

原文標(biāo)題:你是如何優(yōu)化MySQL的

文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    史上最全性能調(diào)優(yōu)總結(jié)

    在說(shuō)什么是性能調(diào)優(yōu)之前,我們先來(lái)說(shuō)一下,計(jì)算機(jī)的體系結(jié)構(gòu)。
    的頭像 發(fā)表于 05-13 08:57 ?6188次閱讀
    史上最全性能<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b><b class='flag-5'>總結(jié)</b>

    功耗調(diào)優(yōu)時(shí)經(jīng)常用到的幾個(gè)方法

    動(dòng)手實(shí)際操作,這個(gè)階段做的深入,不僅對(duì)整個(gè)系統(tǒng)功耗摸底清楚,對(duì)接下來(lái)的功耗管理,提供了很大的幫助。以下為功耗調(diào)優(yōu)時(shí)經(jīng)常用到的幾個(gè)方法:【整機(jī)功耗測(cè)量】如果產(chǎn)品是電池供電,需要使用【假電
    發(fā)表于 12-21 06:31

    基于全HDD aarch64服務(wù)器的Ceph性能調(diào)優(yōu)實(shí)踐總結(jié)

    如ISA-L也都在arm平臺(tái)上進(jìn)行了優(yōu)化。- 對(duì)于SPDK,也是從軟件層面在arm平臺(tái)上進(jìn)行了優(yōu)化。4.3 操作系統(tǒng)調(diào)優(yōu)從Linux內(nèi)核來(lái)調(diào)優(yōu)Ceph性能,這是
    發(fā)表于 07-05 14:26

    AutoCAD中輸入Φ的的常用方法

    AutoCAD中輸入Φ的的常用方法 總結(jié)一下,在AutoCAD中Φ的的常用輸入法大致有以下幾種:
    發(fā)表于 11-08 10:24 ?1382次閱讀

    如何對(duì)電機(jī)進(jìn)行調(diào)優(yōu)?調(diào)優(yōu)的好處是什么?

    如何自動(dòng)對(duì)電機(jī)進(jìn)行調(diào)優(yōu)
    的頭像 發(fā)表于 08-22 00:03 ?3002次閱讀

    DWIN屏使用方法總結(jié)

    DWIN屏使用方法總結(jié))DWIN屏使用方法總結(jié))數(shù)據(jù)幀
    發(fā)表于 12-31 18:56 ?10次下載
    DWIN屏使用<b class='flag-5'>方法</b><b class='flag-5'>總結(jié)</b>(<b class='flag-5'>下</b>)

    總結(jié)幾種常用的單片機(jī)加密方法

    總結(jié)前人的經(jīng)驗(yàn),摸索著寫點(diǎn)實(shí)用的方法,供大家參考:在這里不講加密算法,只討論結(jié)合軟硬件的加密方法,總結(jié)
    發(fā)表于 02-09 11:23 ?0次下載
    <b class='flag-5'>總結(jié)</b>幾種<b class='flag-5'>常用</b>的單片機(jī)加密<b class='flag-5'>方法</b>

    Linux用電功耗調(diào)優(yōu)的筆記分享

    整理些Linux用電功耗調(diào)優(yōu)的筆記,分享給小伙伴,關(guān)于用電調(diào)優(yōu)個(gè)人覺(jué)得
    的頭像 發(fā)表于 06-23 15:19 ?3865次閱讀

    總結(jié)一下OpenCV遍歷圖像的幾種方法

    在圖形處理中,遍歷每個(gè)像素點(diǎn)是最基本的功能,是做算法的基礎(chǔ),這篇文章來(lái)總結(jié)一下OpenCV遍歷圖像的幾種方法。
    的頭像 發(fā)表于 01-18 15:08 ?1591次閱讀

    常用的遠(yuǎn)程控制方法總結(jié)

    開個(gè)新系列,寫一下在調(diào)試工作中,常用的遠(yuǎn)程控制方法。
    的頭像 發(fā)表于 09-06 15:32 ?1903次閱讀
    <b class='flag-5'>常用</b>的遠(yuǎn)程控制<b class='flag-5'>方法</b><b class='flag-5'>總結(jié)</b>

    javajvm調(diào)優(yōu)有幾種方法

    JVM調(diào)優(yōu)是Java應(yīng)用程序性能優(yōu)化過(guò)程中的重要步驟,它通過(guò)針對(duì)JVM進(jìn)行優(yōu)化來(lái)提高應(yīng)用程序的性能和可靠性。JVM調(diào)優(yōu)可以根據(jù)具體的場(chǎng)景和需求,采用不同的
    的頭像 發(fā)表于 12-05 11:11 ?1843次閱讀

    jvm調(diào)優(yōu)主要是調(diào)哪里

    ,棧內(nèi)存存儲(chǔ)方法調(diào)用和局部變量,非堆內(nèi)存用于存儲(chǔ)加載的類信息以及些靜態(tài)變量等。 1.1 堆內(nèi)存調(diào)優(yōu) 堆內(nèi)存是JVM中最主要的內(nèi)存區(qū)域,常見的調(diào)
    的頭像 發(fā)表于 12-05 11:37 ?1321次閱讀

    jvm調(diào)優(yōu)常用命令

    JVM調(diào)優(yōu)是提升Java應(yīng)用性能的個(gè)重要方面,通過(guò)合理設(shè)置JVM參數(shù)可以達(dá)到優(yōu)化應(yīng)用性能、提高系統(tǒng)穩(wěn)定性的目的。本文將為你詳細(xì)介紹JVM調(diào)優(yōu)
    的頭像 發(fā)表于 12-05 11:43 ?575次閱讀

    jvm調(diào)優(yōu)工具有哪些

    JVM調(diào)優(yōu)是提高Java應(yīng)用程序性能的重要手段,而JVM調(diào)優(yōu)工具則是輔助開發(fā)人員進(jìn)行調(diào)優(yōu)工作的利
    的頭像 發(fā)表于 12-05 11:44 ?913次閱讀

    鴻蒙開發(fā)實(shí)戰(zhàn):【性能調(diào)優(yōu)組件】

    性能調(diào)優(yōu)組件包含系統(tǒng)和應(yīng)用調(diào)優(yōu)框架,旨在為開發(fā)者提供套性能調(diào)
    的頭像 發(fā)表于 03-13 15:12 ?306次閱讀
    鴻蒙開發(fā)實(shí)戰(zhàn):【性能<b class='flag-5'>調(diào)</b><b class='flag-5'>優(yōu)</b>組件】