今天一個朋友向我諮詢怎麼去優化 MySQL,我按著思考整理了一下,大概粗的可以分成21個方向。 還有一些細節東西(table cache, 表設計,#索引#設計,程式端快取之類的)先不列了,對一個系統,初期能把下面做完也是一個不錯的系統。
1. 要確保有足夠的記憶體
資料庫能夠高效的運行,最關閉的因素需要記憶體足更大了,能快取住數據,更新也可以在記憶體先完成。但不同的業務對記憶體需要強度不一樣,一推薦記憶體要占到數據的15-25%的比例,特別的熱的數據,記憶體基本上要達到資料庫的80%大小。
2. 需要更多更快的CPU
MySQL 5.6可以利用到64個核,而MySQL每個query只能運行在一個CPU上,所以要求更多的CPU,更快的CPU會更有利於並發。
3. 要選擇合適的作業系統
在官方建議估計最推薦的是Solaris, 從實際生產中看CentOS, REHL都是不錯的選擇,推薦使用CentOS, REHL 版本為6以後的,當然Oracle Linux也是不錯的選擇。雖然從MySQL 5.5後對Windows做了最佳化,但也不建議在高並發環境中使用windows.
4. 合理的最佳化系統的參數
更改檔案句柄 ulimit -n 預設1024 太小
進程數限制 ulimit -u 不同版本不同
禁掉NUMA numctl -interleave=all
5. 選擇適當的記憶體分配演算法
# 預設的記憶體分配就是c的malloc 現在也出現許多最佳化的記憶體分配演算法:
jemalloc and tcmalloc
從MySQL 5.5後支援宣告內儲存方法。
[mysqld_safe]
malloc-lib = tcmalloc
或是直接指到so檔案
[mysqld_safe]
# [mysqld_#>#>項目
##項目##好的創造對於問題[3]#\>#>#-#-#-
-##項目#-#-#-#項目
##項目
#項目
#好的創造對於>#白]#>##>#>白>
#>#>
項目#-
項目項目##項目#好的[4>>#白> lib=/usr/local/lib/libtcmalloc_minimal.so 6. 使用更快的儲存裝置ssd或是固態卡 儲存媒體十分影響MySQL的隨機讀取,寫入更新速度。新一代儲存裝置固態ssd及固態卡片的出現也讓MySQL 大放異彩,也是淘寶在去IOE中乾出了一個漂亮仗。 7. 選擇良好的檔案系統 推薦XFS, Ext4,如果還在使用ext2,ext3的同學請盡快升級別。 推薦XFS,這個也是今後一段時間Linux會支援一個檔案系統。 檔案系統強烈建議: XFS 8. 最佳化掛載檔案系統的參數 掛載XFS參數: (rw, noatime,nodiratime ,nobarrier) 掛載ext4參數: ext4 (rw,noatime,nodiratime,nobarrier,data=ordered) 如果使用SSD或是固態磁碟需要考慮: • innodb_page_size = 4K • Innodb_flush_neighbors = 0# 9. 選擇適合的IO調度 請9.選擇適合的IO調度
」
# echo dealine >/sys/block/{DEV-NAME}/queue/scheduler###### 10. 選擇適當的Raid卡Cache策略###### 請使用帶電的Raid,啟用WriteBack, 對於加速redo log ,binary log, data file都有好處。 ###### 11. 停用Query Cache###### Query Cache在Innodb中有點雞肋,Innodb的資料本身可以在Innodb buffer pool中緩存,Query Cache屬於結果集緩存,如果開啟Query Cache更新寫入都要去檢查query cache反而增加了寫入的開銷。 ###### 在MySQL 5.6中Query cache是被禁掉了。 ###### 12. 使用Thread Pool###### 現在一個資料對應5個以上App場景比較,但MySQL有個特性隨著連線增多的情況下效能反而下降,所以對於連線超過200的以後場景請考慮使用thread pool. 這是一個偉大的發明。 ###### 13. 合理調整記憶體###### 13.1 減少連接的記憶體分配###### 連線可以用thread_cache_size緩存,觀查屬於比較屬不如thread pool給力。資料庫在連上被指派的記憶體如下:###### max_used_connections * (###### read_buffer_size +###### read_rnd_buffer_size +######### ###### binlog_cache_size +###### thread_stack +###### 2 * net_buffer_length …###### )###13.2 讓較大的buffer pool
要把60-80%的記憶體分給innodb_buffer_pool_size. 這個不要超過資料大小了,另外也不要分配超過80%不然會利用到swap.
14. 合理選擇LOG刷新機制
Redo Logs:
- innodb_flush_log_at_trx_commit = 1 // 最安全
# - inno_flushx
## - innodb_flush_log_at_trx_commit = 0 // 最好的情能 binlog : binlog_sync = 1 需要group commit來獲得這個功能可以考慮這個功能可以考慮佳性能。 資料檔: innodb_flush_method = O_DIRECT 15. 請使用Innodb表 操作可以利用更多資源,線上alter作業有所提升。 目前也支援非中文的full text, 同時支援Memcache API存取。目前也是MySQL最優秀的一個引擎。 如果你還在MyISAM請考慮快速轉換。 16. 設定較大的Redo log 以前Percona 5.5和官方MySQL 5.5比拼性能時,勝出的一個Tips就是分配了超過4G的Redo log ,而官方log不能超過4G. 從MySQL 5.6後可以超過4G了,通常建Redo log加起來要超過500M。 可以透過觀查redo log產生量,分配Redo log大於一小時的量即可。 17. 優化磁碟的IO innodb_io_capactiy 在sas 15000轉的下配置800就可以了,在ssd下面配置2000以上。 在MySQL 5.6: innodb_lru_scan_depth = innodb_io_capacity / innodb_buffer_pool_instances inn## 18. 使用獨立表空間
目前來看新的特性都是獨立表空間支援:
truncate table 表空間回收
表空間傳輸
較好的去優化碎片等管理效能的增加,
整體上來看使用獨立表空間是沒用的。
19. 配置合理的並發
innodb_thread_concurrency =並發這個參數在Innodb中變化也是最頻繁的一個參數。不同的版本,有可能不同的小版本也有變動。一般推薦:
在使用thread pool 的情況下:
# innodb_thread_concurrency = 0 就可以了。
如果在沒有thread pool的情況下:
5.5 推薦:innodb_thread_concurrency =16 – 32
5.6 推薦innodb_thread_concurrency = ## 5.6 推薦innodb_thread_concurrency = ## 5.6 推薦innodb_thread_concurrency#366.隔離等級
預設是Repeatable read
建議使用Read committed binlog格式使用mixed或是Row
較低的隔離等級= 較好的效能
21. 注重監控
任環境離不開監控,如果少了監控,有可能就會陷入盲人摸象。 推薦zabbix+mpm建置監控。
以上是21個優化MySQL的建議的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL數據庫升級的步驟包括:1.備份數據庫,2.停止當前MySQL服務,3.安裝新版本MySQL,4.啟動新版本MySQL服務,5.恢復數據庫。升級過程需注意兼容性問題,並可使用高級工具如PerconaToolkit進行測試和優化。

MySQL備份策略包括邏輯備份、物理備份、增量備份、基於復制的備份和雲備份。 1.邏輯備份使用mysqldump導出數據庫結構和數據,適合小型數據庫和版本遷移。 2.物理備份通過複製數據文件,速度快且全面,但需數據庫一致性。 3.增量備份利用二進制日誌記錄變化,適用於大型數據庫。 4.基於復制的備份通過從服務器備份,減少對生產系統的影響。 5.雲備份如AmazonRDS提供自動化解決方案,但成本和控制需考慮。選擇策略時應考慮數據庫大小、停機容忍度、恢復時間和恢復點目標。

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

在MySQL中優化數據庫模式設計可通過以下步驟提升性能:1.索引優化:在常用查詢列上創建索引,平衡查詢和插入更新的開銷。 2.表結構優化:通過規範化或反規範化減少數據冗餘,提高訪問效率。 3.數據類型選擇:使用合適的數據類型,如INT替代VARCHAR,減少存儲空間。 4.分區和分錶:對於大數據量,使用分區和分錶分散數據,提升查詢和維護效率。

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)

MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

MySQL批量插入数据的高效方法包括:1.使用INSERTINTO...VALUES语法,2.利用LOADDATAINFILE命令,3.使用事务处理,4.调整批量大小,5.禁用索引,6.使用INSERTIGNORE或INSERT...ONDUPLICATEKEYUPDATE,这些方法能显著提升数据库操作效率。

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,刪除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段時,需指定位置以優化查詢性能和數據結構;刪除字段前需確認操作不可逆;使用在線DDL、備份數據、測試環境和低負載時間段修改表結構是性能優化和最佳實踐。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

禪工作室 13.0.1
強大的PHP整合開發環境

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境