1 硬件層相關優化
1.1、CPU相關
在服務器的BIOS設置中,可調整下面的幾個配置,目的是發揮CPU最大性能,或者避免經典的NUMA問題:
1、選擇Performance Per Watt Optimized(DAPC)模式,發揮CPU最大性能,跑DB這種通常需要高運算量的服務就不要考慮節電力了;
2、關閉C1E和C States等選項,目的也是為了提升CPU效率;
3、Memory Frequency(記憶體頻率)選擇Maximum Performance(最佳效能);
4、記憶體設定選單中,啟用Node Interleaving,避免NUMA問題;
# 1.2、磁碟I/O相關
下面幾個是依照IOPS效能提升的幅度排序,對於磁碟I/O可最佳化的一些措施:
1、使用SSD或PCIe SSD設備,至少獲得數百倍甚至萬倍的IOPS提升;
2、購置陣列卡同時配備CACHE及BBU模組,可明顯提升IOPS(主要指機械盤,SSD或PCIe SSD除外。同時需定期檢查CACHE及BBU模組的健康狀況,確保意外時不至於遺失資料);
3 、有陣列卡片時,設定陣列寫策略為WB,甚至FORCE WB(若有雙電保護,或對資料安全性要求不是特別高的話),嚴禁使用WT策略。且閉陣列預讀策略,基本上是雞肋,用處不大;
4、盡可能選用RAID-10,而非RAID-5;
# 5、使用機械盤的話,盡可能選擇高轉速的,例如選用15KRPM,而不是7.2KRPM的盤,不差幾個錢的;
2 系統層相關最佳化
2.1、檔案系統層最佳化
在檔案系統層,下列可大幅提升IOPS效能:
1、使用deadline/noop這兩種I/O調度器,千萬別用cfq(它不適合跑DB類別服務);
# 2、使用xfs檔案系統,千萬別用ext3;ext4勉強可用,但業務量很大的話,則一定要用xfs;
3、檔案系統mount參數中增加:noatime, nodiratime, nobarrier幾個選項(nobarrier是xfs檔案系統特有的);
2.2、其他核心參數最佳化
2.2、其他核心參數最佳化
2.2、其他核心參數最佳化
針對關鍵核心參數設定合適的值,目的是為了減少swap的傾向,並且讓記憶體和磁碟I/O不會大幅波動,導致瞬間波峰負載:
1、將vm.swappiness設定為5-10左右即可,甚至設定為0(RHEL 7以上則慎重設定為0,除非你允許OOM kill發生),以降低使用SWAP的機會;
2、將vm.dirty_background_ratio設定為5-10,將vm.dirty_ratio設定為它的兩倍左右,以確保能持續將髒資料刷新到磁碟,避免瞬間I/O寫,產生嚴重等待(和MySQL中的innodb_max_dirty_pages_pct類似);
3 MySQL層相關最佳化
3.1、關於版本選擇
官方版本我們稱為ORACLE MySQL,這個沒什麼好說的,相信絕大多數人會說的,相信絕大多數人會選擇它。
我個人強烈建議選擇Percona分支版本,它是一個相對比較成熟的、優秀的MySQL分支版本,在性能提升、可靠性、管理型方面做了不少改善。它和官方ORACLE MySQL版本基本上完全相容,而且效能大約有20%以上的提升,因此我優先推薦它,我自己也從2008年一直以它為主。
另一個重要的分支版本是MariaDB,說MariaDB是分支版本其實已經不太適合了,因為它的目標是取代ORACLE MySQL。它主要在原來的MySQL Server層做了大量的源碼級改進,也是一個非常可靠的、優秀的分支版本。但也由此產生了以GTID為代表的和官方版本無法相容的新特性(MySQL 5.7開始,也支援GTID模式線上動態開啟或關閉了),也考慮到絕大多數人還是會跟著官方版本走,因此沒優先推薦MariaDB。
3.2、關於最重要的參數選項調整建議
建議調整下面幾個關鍵參數以獲得較好的效能(可使用本站提供的my. cnf生成器產生設定檔範本):
1、選擇Percona或MariaDB版本的話,強烈建議啟用thread pool特性,可使得在高並發的情況下,效能不會發生大幅下降。此外,還有extra_port功能,非常實用, 關鍵時刻能救命的。還有另一個重要特色是QUERY_RESPONSE_TIME 功能,也能讓我們對整體的SQL回應時間分佈有直覺感受;
2、設定default-storage-engine=InnoDB,也就是預設採用InnoDB引擎,強烈建議不要再使用MyISAM引擎了,InnoDB引擎絕對可以滿足99%以上的業務場景;
3、調整innodb_buffer_pool_size大小,如果是單一實例且絕大多數是InnoDB引擎表的話,可考慮設定為實體記憶體的50% ~ 70%左右;
4、依照實際需求設定innodb_flush_log_at_trx_commit、sync_binlog的值。如果要求資料不能遺失,那麼兩個都設為1。若允許遺失一點數據,則可分別設為2和10。而如果完全不用care資料是否遺失的話(例如在slave上,反正大不了重做一次),則可都設為0。這三種設定值導致資料庫的效能受到影響程度分別是:高、中、低,也就是第一個會另資料庫最慢,最後一個則相反;
5 、設定innodb_file_per_table = 1,使用獨立表空間,我實在是想不出來用共享表空間有什麼好處了;
6、設定innodb_data_file_path = ibdata1:1G:autoextend,千萬不要用預設的10M,否則有高並發交易時,會受到不小的影響;
7、設定innodb_log_file_size=256M,設定innodb_log_files_in_group=2,基本上可滿足90 %以上的場景;
8、設定long_query_time = 1,而在5.5版本以上,已經可以設定為小於1了,建議設定為0.05(50毫秒),記錄那些執行較慢的SQL,用於後續的分析排查;
9、根據業務實際需要,適當調整max_connection(最大連線數)、max_connection_error(最大錯誤數,建議設定為10萬以上,而open_files_limit、innodb_open_files、table_open_cache、table_definition_cache這幾個參數則可設為約10倍於max_connection的大小;
10、常見的誤區是把把把為把為把字_pize_smp_he_table_t的比較大,曾經看過設定為1G的,這2個選項是每個連線會話都會分配的,因此不要設定過大,否則容易導致OOM發生;其他的一些連線會話級選項例如:sort_buffer_size、join_buffer_size、 read_buffer_size、read_rnd_buffer_size等,也需要注意不能設定太大;
11、由於已經建議不再使用MyISAM引擎了,因此可以把key_buffer_size設定為32M左右,並且強烈建議關閉query cache功能;
3.3、關於Schema設計規格及SQL使用建議
以下列舉了幾個常見有助於提升MySQL效率的Schema設計規格及SQL使用建議:
1、所有的InnoDB表都設計一個無業務用途的自增列做主鍵,對於絕大多數場景都是如此,真正純只讀用InnoDB表的並不多,真如此的話還不如用TokuDB來得划算;
2、字段長度滿足需求前提下,盡可能選擇長度小的。此外,字段屬性盡量加上NOT NULL約束,可一定程度提高效能;
3、盡可能不使用TEXT/BLOB類型,確實需要的話,建議拆分到子表中,不要跟主表放在一起,避免SELECT * 的時候讀性能太差。
4、讀取資料時,只選取所需的列,不要每次都SELECT *,避免產生嚴重的隨機讀取問題,尤其是讀到一些TEXT/BLOB列;
5、對一個VARCHAR(N)欄位建立索引時,通常取其50%(甚至更小)左右長度建立前綴索引就足以滿足80%以上的查詢需求了,沒必要建立整列的全長度索引;
6、通常情況下,子查詢的效能比較差,建議改造成JOIN寫法;
# 7、多表聯接查詢時,關聯字段類型盡量一致,並且都要有索引;
8、多表連接查詢時,把結果集小的表(請注意,這裡是指過濾後的結果集,不一定是全表資料量小的)作為驅動表;
9、多表聯接並且有排序時,排序字段必須是驅動表裡的,否則排序列無法用到索引;
10、多用複合索引,少用多個獨立索引,尤其是一些基數(Cardinality)太小(比方說,該列的唯一值總數少於255)的欄位就不要建立獨立索引了;
11、類似分頁功能的SQL,建議先用主鍵關聯,然後再傳回結果集,效率會高很多;
3.4、其他建議
關於MySQL的管理維護的其他建議有:
# 1、通常地,單表物理大小不超過10GB,單表行數不超過1億條,行平均長度不超過8KB,如果機器性能足夠,這些數據量MySQL是完全能處理的過來的,不用擔心性能問題,這麼建議主要是考慮ONLINE DDL的代價較高;
2、不用太擔心mysqld進程佔用太多內存,只要不發生OOM kill和用到大量的SWAP都還好;
3、在以往,單機上跑多實例的目的是能最大化利用計算資源,如果單實例已經能耗盡大部分計算資源的話,就沒必要再跑多實例了;
4、定期使用pt-duplicate-key-checker檢查並刪除重複的索引。定期使用pt-index-usage工具檢查並刪除使用頻率很低的索引;
5、定期採集slow query log,用pt-query-digest工具進行分析,可結合Anemometer系統進行slow query管理以便分析slow query並進行後續優化工作;
6、可使用pt-kill殺掉超長時間的SQL請求,Percona版本中有個選項innodb_kill_idle_transaction 也可實作此功能;
7、使用pt-online-schema-change來完成大表的ONLINE DDL需求;
以上是如何優化mysql? mysql相關最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

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

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

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