1.影響Mysql性能的因素
- 數據庫服務器的硬件
- 服務器所使用的操作系統
- 數據存儲引擎(MyISAM不支持事務,表級鎖。InnoDB支持事務,行級鎖)
- 數據庫參數配置(影響比前三個大)
- 數據庫表結構的涉及和SQL語句(比前面四個都大很多)所以重點就是這個
2.數據庫服務器硬件
- CPU資源
如何選擇CPU?最理想的當然是最高的頻率和最大的核心數,但是成本太TM高了。
所以從應用服務入手,看看我們的應用是不是CPU密集型的應用,如果是那麼我們將選擇更好的CPU而不是更多的CPU。 並且SQL不支持多個CPU進行併發的處理,所以多個CPU對於提高sql的效率沒有多大的幫助。接下來還要了解我們的系統的並 髮量如何,併發量大那麼一個CPU處理一個SQL,多個CPU處理多個SQL,此時CPU的數量就比頻率顯得更加的重要。 MYSQL5.6以上對多核CPU比較好的支持。系統要選64位的。
- 可用內存大小
內存對讀寫讀寫都有影響,尤其是對讀的影響明顯,雖然寫入不可避免要操作磁盤,但是緩存可以把多次數據寫入合併爲一次的數據寫入,不同數據庫的存儲引擎在緩存中存的數據也是不一樣的。這裏如何選擇內存呢,內存的主頻和CPU的主頻是類似的,最好選擇服務器主板所支持頻率最高的內存。大小就考慮比熱數據大很多的內存。還要考慮業務數據增長。
- 磁盤的選擇
磁盤都有哪些?
1.如何選擇傳統機器硬盤?傳統機器硬盤容量大,訪問慢。
2.RAID技術增加傳統機械硬盤的性能。
3.固態存儲(SSD和PCI-E)
相比於傳統機械硬盤有更好的隨機讀寫性能,第二就是能支持更好的併發,固態磁盤更容易損壞。
數據庫中常用的是SSD(固態硬盤),使用SATA接口,可以直接替換傳統的磁盤,而不需要特殊的驅動接口,這是他的速度受制於SATA接口,所以替換的時候要對着接口來,其次SSD也支持RAID技術。因爲接口還是SATA。
PCI-E(Fusion-IO一種使用閃存技術的PCI-E卡設備),無法使用SATA接口,需要特殊的驅動和接口,這個不受SATA的接口限制,相比於SSD有更好的性能。PCI-E設備還需要服務器的大量的內存,這個也不建議使用RAID
固態存儲的使用場景,適合使用存在大量隨機IO的場景,適合適用於單線程負載的IO瓶頸,例如如果只有一塊固態存儲設備應該把它放到Mysql主從設備的從節點上,因爲數據的複製時單線程的。
4.使用網絡存儲
網絡儲存所適合的一些場景,因爲順序儲存的性能好,但是隨機的性能不好,所以他不適合Mysql的存儲。適合數據庫的備份文件,最大的性能時帶寬。
3.操作系統的影響
win的大小寫不敏感,linux對大小寫敏感,CentsOS的參數優化。
4.MySQL的存儲引擎對性能的影響
- MySql的體系架構 插件式存儲引擎
MyISAM:
Innodb:
設置爲off後:
1.TPS和QPS
TPS 即 Transactions Per Second 的縮寫,每秒處理的事務數目。一個事務是指一個客戶機向服務器發送請求然後服務器做出反應的過程。
QPS:全名 Queries Per Second,意思是“每秒查詢率”,是一臺服務器每秒能夠響應的查詢次數,是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準。
2.什麼影響SQL的性能?
- 超高的qps和tps
- 大量的併發和超高的CPU使用率(導致數據庫連接池佔滿和CPU資源耗盡宕機)
- 磁盤IO,磁盤IO的性能突然下降(可能有其他影響磁盤性能的計劃任務)
- 網卡流量,可以減從服務器的數量,和緩存分級,避免前端大量緩存的失效,避免select * ,不需要的字段消耗網絡流量,分離業務網絡和管理網絡
3.大表帶來的影響
一個表的數據超過千萬行,就會對數據庫的性能造成影響。
解決辦法:
大表導致慢查詢,大表建裏索引很慢
百分之八十可以優化SQL
4.大事務帶來的影響
解決辦法: