MySQL優化調優有沒有做過_MySQL 調優/優化的 100 個建議

MySQL是一個強大的開源數據庫。隨著MySQL上的應用越來越多,MySQL逐漸遇到了瓶頸。這里提供 101 條優化 MySQL 的建議。有些技巧適合特定的安裝環境,但是思路是相通的。我已經將它們分成了幾類以幫助你理解。MySQL監控MySQL服務器硬件和OS(操作系統)調優:1、有足夠的物理內存,能將整個InnoDB文件加載到內存里 —— 如果訪問的文件在內存里,而不是在磁盤上,InnoDB會快很多。2、全力避免 Swap 操作 — 交換(swapping)是從磁盤讀取數據,所以會很慢。3、使用電池供電的RAM(Battery-Backed RAM)。4、使用一個高級磁盤陣列 — 最好是 RAID10 或者更高。5、避免使用RAID5 — 和校驗需要確保完整性,開銷很高。6、將你的操作系統和數據分開,不僅僅是邏輯上要分開,物理上也要分開 — 操作系統的讀寫開銷會影響數據庫的性能。7、將臨時文件和復制日志與數據文件分開 — 后臺的寫操作影響數據庫從磁盤文件的讀寫操作。8、更多的磁盤空間等于更高的速度。9、磁盤速度越快越好。10、SAS優于SATA。11、小磁盤的速度比大磁盤的更快,尤其是在 RAID 中。12、使用電池供電的緩存 RAID(Battery-Backed Cache RAID)控制器。13、避免使用軟磁盤陣列。14. 考慮使用固態IO卡(不是磁盤)來作為數據分區 — 幾乎對所有量級數據,這種卡能夠支持 2 GBps 的寫操作。15、在 Linux 系統上,設置 swappiness 的值為0 — 沒有理由在數據庫服務器上緩存文件,這種方式在Web服務器或桌面應用中用的更多。16、盡可能使用 noatime 和 nodirtime 來掛載文件系統 — 沒有必要為每次訪問來更新文件的修改時間。17、使用 XFS 文件系統 — 一個比ext3更快的、更小的文件系統,擁有更多的日志選項,同時,MySQL在ext3上存在雙緩沖區的問題。18、優化你的 XFS 文件系統日志和緩沖區參數 – -為了獲取最大的性能基準。19、在Linux系統中,使用 NOOP 或 DEADLINE IO 調度器 — CFQ 和 ANTICIPATORY 調度器已經被證明比 NOOP 和 DEADLINE 慢。20、使用 64 位操作系統 — 有更多的內存能用于尋址和 MySQL 使用。21、將不用的包和后臺程序從服務器上刪除 — 減少資源占用。22、將使用 MySQL 的 host 和 MySQL自身的 host 都配置在一個 host 文件中 — 這樣沒有 DNS 查找。23、永遠不要強制殺死一個MySQL進程 — 你將損壞數據庫,并運行備份。24、讓你的服務器只服務于MySQL — 后臺處理程序和其他服務會占用數據庫的 CPU 時間。MySQL 配置:25、使用 innodb_flush_method=O_DIRECT 來避免寫的時候出現雙緩沖區。26、避免使用 O_DIRECT 和 EXT3 文件系統 — 這會把所有寫入的東西序列化。27、分配足夠 innodb_buffer_pool_size ,來將整個InnoDB 文件加載到內存 — 減少從磁盤上讀。28、不要讓 innodb_log_file_size 太大,這樣能夠更快,也有更多的磁盤空間 — 經常刷新有利降低發生故障時的恢復時間。29、不要同時使用 innodb_thread_concurrency 和 thread_concurrency 變量 — 這兩個值不能兼容。30、為 max_connections 指定一個小的值 — 太多的連接將耗盡你的RAM,導致整個MySQL服務器被鎖定。31、保持 thread_cache 在一個相對較高的數值,大約是 16 — 防止打開連接時候速度下降。32、使用 skip-name-resolve — 移除 DNS 查找。33、如果你的查詢重復率比較高,并且你的數據不是經常改變,請使用查詢緩存 — 但是,在經常改變的數據上使用查詢緩存會對性能有負面影響。34、增加 temp_table_size — 防止磁盤寫。35、增加 max_heap_table_size — 防止磁盤寫。36、不要將 sort_buffer_size 的值設置的太高 — 可能導致連接很快耗盡所有內存。37、監控 key_read_requests 和 key_reads,以便確定 key_buffer 的值 — key 的讀需求應該比 key_reads 的值更高,否則使用 key_buffer 就沒有效率了。38、設置 innodb_flush_log_at_trx_commit = 0 可以提高性能,但是保持默認值(1)的話,能保證數據的完整性,也能保證復制不會滯后。39、有一個測試環境,便于測試你的配置,可以經常重啟,不會影響生產環境。MySQL Schema 優化:40、保證你的數據庫的整潔性。41、歸檔老數據 — 刪除查詢中檢索或返回的多余的行42、在數據上加上索引。43、不要過度使用索引,評估你的查詢。44、壓縮 text 和 blob 數據類型 — 為了節省空間,減少從磁盤讀數據。45、UTF 8 和 UTF16 比 latin1 慢。46、有節制的使用觸發器。47、保持數據最小量的冗余 — 不要復制沒必要的數據.48、使用鏈接表,而不是擴展行。49、注意你的數據類型,盡可能的使用最小的。50、如果其他數據需要經常需要查詢,而 blob/text 不需要,則將 blob/text 數據域其他數據分離。51、經常檢查和優化表。52、經常做重寫 InnoDB 表的優化。53、有時,增加列時,先刪除索引,之后在加上索引會更快。54、為不同的需求選擇不同的存儲引擎。55、日志表或審計表使用ARCHIVE存儲引擎 — 寫的效率更高。56、將 session 數據存儲在 memcache 中,而不是 MySQL 中 — memcache 可以設置自動過期,防止MySQL對臨時數據高成本的讀寫操作。57、如果字符串的長度是可變的,則使用VARCHAR代替CHAR — 節約空間,因為CHAR是固定長度,而VARCHAR不是(utf8 不受這個影響)。58、逐步對 schema 做修改 — 一個小的變化將產生的巨大的影響。59、在開發環境測試所有 schema 變動,而不是在生產環境的鏡像上去做。60、不要隨意改變你的配置文件,這可能產生非常大的影響。61、有時候,少量的配置會更好。62、質疑使用通用的MySQL配置文件。

185332iavaazueppig6m4i.jpg?查詢優化:63、使用慢查詢日志,找出執行慢的查詢。64、使用 EXPLAIN 來決定查詢功能是否合適。65、經常測試你的查詢,看是否需要做性能優化 — 性能可能會隨著時間的變化而變化。66、避免在整個表上使用count(*) ,它可能會將整個表鎖住。67、保持查詢一致,這樣后續類似的查詢就能使用查詢緩存了。68、如果合適,用 GROUP BY 代替 DISTINCT。69、在 WHERE、GROUP BY 和 ORDER BY 的列上加上索引。70、保證索引簡單,不要在同一列上加多個索引。71、有時,MySQL 會選擇錯誤的索引,這種情況使用 USE INDEX。72、使用 SQL_MODE=STRICT 來檢查問題。73、索引字段少于5個時,UNION 操作用 LIMIT,而不是 OR。74、使用 INSERT ON DUPLICATE KEY 或 INSERT IGNORE 來代替 UPDATE,避免 UPDATE 前需要先 SELECT。75、使用索引字段和 ORDER BY 來代替 MAX。76、避免使用 ORDER BY RAND()。77、LIMIT M,N 在特定場景下會降低查詢效率,有節制使用。78、使用 UNION 來代替 WHERE 子句中的子查詢。79、對 UPDATE 來說,使用 SHARE MODE 來防止排他鎖。80、重啟 MySQL 時,記得預熱數據庫,確保將數據加載到內存,提高查詢效率。81、使用 DROP TABLE ,然后再 CREATE TABLE ,而不是 DELETE FROM ,以刪除表中所有數據。82、最小化你要查詢的數據,只獲取你需要的數據,通常來說不要使用 *。83、考慮持久連接,而不是多次建立連接,已減少資源的消耗。84、基準查詢,包括服務器的負載,有時一個簡單的查詢會影響其他的查詢。85、當服務器的負載增加時,使用SHOW PROCESSLIST來查看慢的/有問題的查詢。86、在存有生產環境數據副本的開發環境中,測試所有可疑的查詢。MySQL備份過程:87、在二級復制服務器上進行備份。88、備份過程中停止數據的復制,以防止出現數據依賴和外鍵約束的不一致。89、徹底停止MySQL之后,再從數據文件進行備份。90、如果使用MySQL dump進行備份,請同時備份二進制日志 — 確保復制過程不被中斷。91、不要信任 LVM 快照的備份 — 可能會創建不一致的數據,將來會因此產生問題。92、為每個表做一個備份,這樣更容易實現單表的恢復 — 如果數據與其他表是相互獨立的。93、使用 mysqldump 時,指定 -opt 參數。94、備份前檢測和優化表。95、臨時禁用外鍵約束,來提高導入的速度。96、臨時禁用唯一性檢查,來提高導入的速度。97、每次備份完后,計算數據庫/表數據和索引的大小,監控其增長。98、使用定時任務(cron)腳本,來監控從庫復制的錯誤和延遲。99、定期備份數據。100、定期測試備份的數據。

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

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

相關文章

python語句print(type([1、2、3、4))_Python 學習第一天

一、學習內容1.print:表示輸出print (“hello world”)單行注釋:#多行注釋:“““ ”””2.運算符注意:才表示等于,!表示不等于3.位運算符~按位取反:~104.變量和賦值teacher“老馬的…

mysql核心參數_MySQL技術體系之核心參數

本文主要基于MySQL 5.7版本的數據庫環境,總結my.cnf文件中核心參數的配置使用,讓更多的人對MySQL技術體系有更全面、更專業的深度了解。一、客戶端核心參數1、port端口號,默認33062、socketSocket文件地址,默認以.sock為文件名稱后…

svd降維 python案例_SVD(奇異值分解)Python實現

注: 在《SVD(異值分解)小結 》中分享了SVD原理,但其中只是利用了numpy.linalg.svd函數應用了它,并沒有提到如何自己編寫代碼實現它,在這里,我再分享一下如何自已寫一個SVD函數。但是這里會利用到SVD的原理,…

salt 啟動mysql_saltsack自動化配置day03:服務部署mysql部署

一、MySQL集群需求分享1、抽象:功能模塊把基礎的寫成通用服務部署也要抽象出來模塊redis內存有的多,有的少,可以config set在線更改redis 安裝、配置、啟動mysql 安裝、配置(my.cnf可以統一 目錄默認配置可以統一)master: server_id 1111slav…

jtag引腳定義_從逆向分析的角度學習硬件調試技巧JTAG,SSD和固件提取

我想從逆向的角度做了深入了解JTAG,JTAG是許多嵌入式CPU使用的硬件級別調試機制,我希望通過這篇文章從逆向工程師的角度解釋如何使用JTAG,并在此過程中提供一些實際示例。0x01 研究目標通過這篇文章,我希望做到以下幾點&#xff1…

python virtualenv conda_在vscode中啟動conda虛擬環境的思路詳解

問題:cudatoolkit cudnn 通過conda 虛擬環境安裝,先前已經使用virtualenv安裝tf,需要在conda虛擬環境中啟動外部python虛擬環境思路:conda prompt即將 [虛擬環境位置] 以參數形式傳入 [activate.bat]VSOCDE中的設置添加以下語句{&…

python如何導入圖片imread_OpenCV 使用imread()函數讀取圖片的六種正確姿勢

經常看到有人在網上詢問關于imread()函數讀取圖片失敗的問題。今天心血來潮,經過實驗,總結出imread()調用的四種正確姿勢。通常我要獲取一張圖片的絕對路徑是這樣做的:在圖片上右鍵——屬性——安全——對象名稱。然后復制對象名稱就得到了圖…

python2.7與3.7腳本轉換_python 2.7 - python 3.7 升級記錄

更換的模塊python 3.7 模塊名python 2.7 模塊名python 3.7 包python 2.7包pymysqlMySQLdbPyMySQLMySQL-pythonpdfminerpdfminerpdfminer.sixpdfminerurllib.parseurlparse自帶自帶htmlHTMLParser自帶HTMLparser語法變化1. print 修改為 print()2. except Exception, e 修改為 e…

遠程過程調用失敗_Java開發大型互聯網RPC遠程調用服務實現之問題處理方案

引言RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡…

chrome 新的session 設置_為什么還是由這么多人搞不懂Cookie、Session、Token?

作者:不學無數的程序員鏈接:https://urlify.cn/Yfm6Vr# Cookie洛:大爺,樓上322住的是馬冬梅家吧? 大爺:馬都什么? 夏洛:馬冬梅。 7大爺:什么都沒啊? 夏洛…

mysql for update用處_for update的作用和用法

一、for update定義for update是一種行級鎖,又叫排它鎖,一旦用戶對某個行施加了行級加鎖,則該用戶可以查詢也可以更新被加鎖的數據行,其它用戶只能查詢但不能更新被加鎖的數據行.如果其它用戶想更新該表中的數據行&…

python大數據零基礎_零基礎學習大數據人工智能,學習路線篇!

大數據處理技術怎么學習呢?首先我們要學習Python語言和Linux操作系統,這兩個是學習大數據的基礎,學習的順序不分前后。Python:Python 的排名從去年開始就借助人工智能持續上升,現在它已經成為了語言排行第一名。從學習難易度來看…

python刪除文件和linux刪除文件區別_使用Python批量刪除文件列表

使用Python批量刪除文件列表環境:已知要刪除的文件列表,即確定哪些文件要刪除。代碼如下:#!/usr/bin/env python#codingutf-8#目的:本程序主要為刪除給定的文件列表import osimport shutil#引入模塊,os為包含普遍的操作…

華為python有必要學嗎_【華為云技術分享】這個 Python 庫有必要好好學學

這里看一個最基本的例子,這里給到一個 User 的 Class 定義,再給到一個 data 數據,像這樣:1 class User(object):2 def __init__(self, name, age):3 self.name name4 self.age age56 data [{7 name: Germey,8 age: 239 }, {10 nam…

python求平行四邊形面積_python 已知平行四邊形三個點,求第四個點的案例

我就廢話不多說了,大家還是直接看代碼吧!import numpy as np#已知平行四邊形三個點,求第四個點#計算兩點之間的距離def CalcEuclideanDistance(point1,point2):vec1 np.array(point1)vec2 np.array(point2)distance np.linalg.norm(vec1 -…

eview面板數據之混合回歸模型_【視頻教程】Eviews系列25|面板數據回歸分析之Hausman檢驗及本章常見問題解答...

點擊上方關注我們!本期我們學習Eviews統計建模最后一部分--面板數據回歸分析Hausman檢驗及本章常見問題解答。實操:Hausman檢驗判斷是固定效應模型還是隨機效應模型上期我們講到模型判斷若選擇模型2,需進一步通過Hausman檢驗判斷固定效應還是隨機效應,接…

python打出由邊框包圍的_python opencv 圖像邊框(填充)添加及圖像混合的實現方法(末尾實現類似幻燈片漸變的效果)...

圖像邊框的實現圖像邊框設計的主要函數cv.copyMakeBorder()——實現邊框填充主要參數如下:參數一:源圖像——如:讀取的img參數二——參數五分別是:上下左右邊的寬度——單位:像素參數六:邊框類型&#xff1…

mysql5.7.21備份腳本_Shell腳本使用匯總整理——mysql數據庫5.7.8以后備份腳本

#!/bin/sh#db_backups_conf.txt文件路徑db_backups_conf"/wocloud/shell/db_backups_conf.txt"#判斷文件是否存在if [ -f "${db_backups_conf}" ];thenecho $(date %Y-%m-%d %H:%M:%S)" 數據庫配置信息文件存在,開始進行數據備份"#獲…

python嵌套列表操作_python基礎(list列表的操作,公共方法,列表嵌套,元祖)...

list 列表索引,切片與str相同。列表的操作(增刪改查)1,增加.append()  追加,增加到最后li [alex,wusir,egon,女神,taibai]li.append(ppp)print(li).insert()  中間插入,通過索引li [alex,wusir,egon,女神,taibai]li.insert(…

mybatis mysql selectkey_Mybatis示例之SelectKey的應用

SelectKey在Mybatis中是為了解決Insert數據時不支持主鍵自動生成的問題,他可以很隨意的設置生成主鍵的方式。不管SelectKey有多好,盡量不要遇到這種情況吧,畢竟很麻煩。SelectKey需要注意order屬性,像Mysql一類支持自動增長類型的…