先說一下最常見基本的系統瓶頸:
1、硬盤搜索。現代磁盤的平均時間通常小于10ms,因此理論上我們每秒能夠大約搜索1000次,這樣我們在這樣一個磁盤上搜索一個數據,很難優化,一個辦法就是將數據分布在多個磁盤。
2、IO讀寫。就磁盤來講,一般傳輸10-20Mb/s,同樣的,優化可以從多個磁盤并行讀寫。
3、CPU周期。我們將數據讀入內存后,需要對它進行處理并獲取我們需要的結果。表相對于內存較小時常見的限制因素。但是對于小表,速度通常不成問題。
4、內存帶寬。當CPU需要的數據超出CPU緩存,主緩存帶寬就成為內存的一個瓶頸。
再說一下mysql設計上邊的瓶頸:(本人了解一下它的數據庫引擎,wiki上邊說的一些缺陷)
MyISAM是MySQL的默認數據庫引擎 (5.5版之前),由早期的ISAM所改良。雖然性能極佳,但卻有一個缺點:不支持code error!(transaction)。不過,在這幾年的發展下,MySQL也導入了InnoDB (另一種數據庫引擎),以強化code error!與并發違規處理機制,后來就逐漸取代MyISAM。
每個MyISAM數據表,皆由存儲在硬盤上的3個文件所組成,每個文件都以數據表名稱為主文件名,并搭配不同擴展名區分文件類型:
.frm--存儲數據表定義,此文件非MyISAM引擎的一部份。
.MYD--存放真正的數據。
.MYI--存儲索引信息。
1、InnoDB可借由交易記錄檔 (Transaction Log) 來恢復程序崩潰 (crash),或非預期退出所造成的數據錯誤;而MyISAM遇到錯誤,必須完整掃描后才能重建索引,或修正未寫入硬盤的錯誤。InnoDB的修復時間,大略都是固定的,但MyISAM的修復時間,則與數據量的多寡成正比。相對而言,隨著數據量的增加,InnoDB會有較佳的穩定性。
2、MyISAM必須依靠操作系統來管理讀取與寫入的高速緩存,而InnoDB則是有自己的讀寫高速緩存管理機制。(InnoDB不會將被修改的code error!立即交給操作系統) 因此在某些情況下,InnoDB的數據訪問會比MyISAM更有效率。
3、InnoDB目前并不支持MyISAM所提供的壓縮與 terse row formats,所以對硬盤與高速緩存的使用量較大。因此MySQL從5.0版開始,提供另一個負載較輕的格式,他可減少約略 20% 的系統負載,而壓縮功能已計劃于未來的新版中推出。
4、當操作完全兼容ACID (code error!) 時,雖然InnoDB會自動合并數筆連接,但每次有code error!產生時,仍至少須寫入硬盤一次,因此對于某些硬盤或磁盤陣列,會造成每秒200次的code error!處理上限。若希望達到更高的性能且保持code error!的完整性,就必使用軟盤高速緩存與電池備援。當然 InnoDB 也提供數種對性能沖擊較低的模式,但相對的也會降低code error!的完整性。而MyISAM則無此問題,但這并非因為它比較先進,這只是因為它不支持code error!。
(InnoDB,是MySQL的數據庫引擎之一,為MySQL AB發行binary的標準之一。InnoDB由Innobase Oy公司所開發,2006年五月時由甲骨文公司并購。與傳統的ISAM與MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事務(Transaction)功能,類似于PostgreSQL。)
關于MYSQL的優化全面詳解
2019-12-07 18:19mdxy-dxy Mysql
一直用了那么久的mysql,雖然了解了一些優化方法,但是都是比較簡單的一些應用,這次就系統的了解一下
延伸 · 閱讀
- 2022-03-11Android 優化之卡頓優化的實現
- 2022-03-11Android 優化之app啟動優化的實現
- 2022-03-11Android 優化之存儲優化的實現
- 2022-03-11Android優化之電量優化的實現
- 2022-03-11MySQL的索引你了解嗎
- 2022-03-10分布式數據庫排序及優化
- Mysql
解決重置Mysql root用戶賬號密碼問題
這篇文章主要介紹了解決重置Mysql root用戶賬號密碼問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下...
- Mysql
MySQL 查詢速度慢與性能差的原因與解決方法
隨著網站數據量與訪問量的增加,MySQL 查詢速度慢與性能差的問題就日漸明顯,這里為大家分享一下解決方法,需要的朋友可以參考下...
- Mysql
MySQL鎖的知識點總結
在本篇文章里小編給大家整理了關于MySQL鎖的知識點總結以及實例內容,需要的朋友們學習下。...
- Mysql
MySQL之Field‘***’doesn’t have a default value錯誤解決辦法
這篇文章主要介紹了MySQL之Field‘***’doesn’t have a default value錯誤解決辦法,需要的朋友可以參考下 ...
- Mysql
Centos7下使用yum安裝mysql數據庫的詳細教程(增強版)
這篇文章主要介紹了Centos7下使用yum安裝mysql數據庫的詳細教程(增強版),非常不錯,具有參考借鑒價值,需要的朋友可以參考下 ...
- Mysql
MySQL server has gone away錯誤提示解決方法
今天遇到類似的情景,MySQL只是冷冷的說:MySQL server has gone away。 ...
- Mysql
幾種MySQL中的聯接查詢操作方法總結
這篇文章主要介紹了幾種MySQL中的聯接查詢操作方法總結,文中包括一些代碼舉例講解,需要的朋友可以參考下 ...
- Mysql
MySQL全文索引、聯合索引、like查詢、json查詢速度哪個快
這篇文章主要介紹了MySQL全文索引、聯合索引、like查詢、json查詢速度大比拼,通過實例代碼截圖的形式給大家介紹的非常詳細,具有一定的參考借鑒價值...