mysql優化之影響mysql效能因素一
web伺服器可以進行橫向擴充套件,每台伺服器只要配置相同就可以進行橫向擴充套件,理論上可以無限制的增加web伺服器增加mysql的訪問效能。資料庫伺服器才是大資料量訪問時延遲高效率低的主要原因,沒有穩定的資料庫就沒有穩定的訪問。
影響資料庫因素主要因素主要有一下幾點:
1.sql查詢速度
2.網絡卡流量
3.伺服器硬體
4.磁碟io
以上因素並不是時時刻刻都會影響我們的資料庫效能,而就像木桶效應一樣:如果其中乙個因素嚴重影響效能,那麼整個資料庫效能就會嚴重受阻。另外,這些影響因素都是相對的,例如:當資料量並沒有達到百萬千萬這樣的級別,那麼sql查詢速度也許就不是個重要因素,換句話說,你的sql語句效率適當低下可能並不影響整個效率多少,反之,這種情況,無論如何怎麼優化sql語句,可能都沒有太明顯的效果。 因此,知道哪些影響因素會直接導致哪些現象產生,是至關重要的經驗,就像福爾摩斯一樣,通過現象看本質。接下來我們對不同的現象與影響因素做一一對應的總結。
一主多從伺服器集群的缺陷: 沒有任何主從複製的高可用元件,一旦出現問題就只能手動進行主從複製的切換。耗時又費力。
1.超高的qps和tps
什麼是qps:每秒鐘查詢量。如果每秒鐘能處理100條查詢sql語句,那麼qps就約等於100 。
什麼是tps:每秒鐘事務處理的數量。
造成的風險:效率低下的sql。
訪問量暴增的情況下,sql語句的優化顯得最直接最有效。由於現在的mysql不支援多cpu併發運算,即每條sql只能由一條cpu執行。這也就意味著,如果我們想提高單挑sql的執行速度,無法通過增加cpu的方式達到效果。
2.大量的併發
風險:大量的併發:同一時間處理請求的數量 大量的併發就會導致資料庫連線數佔滿 。對於資料庫而言,所能建立的連線數是有限的,mysql中max_connections引數預設值是100, 大量的併發就會導致資料庫連線數佔滿 。
3.超高的cpu使用率
風險:因cpu資源耗盡而出現宕機
4磁碟io
風險:磁碟io效能突然下降。
資料庫的主要瓶頸, fasionio高速磁碟, ssd固態硬碟比較好 。
其他大量消耗磁碟效能的計畫任務。
不要再主資料庫上進行資料庫備份 可能會導致資料庫效能急劇下降。
5.網絡卡流量
風險:網絡卡io被佔滿(100mb/8=100mb)
如何避免無法連線資料庫的情況:
減少從伺服器的數量。從伺服器都要從主伺服器上覆制日誌,所以,從伺服器越多,網路流量越大。
進行分級快取。前方大量快取突然失效會對資料庫造成嚴重的衝擊。
避免使用「select * 」進行查詢。
離業務網路和伺服器網路
6.大表
什麼樣的表可以稱為大表
1. innodb儲存引擎時的那個表的資料量超過千萬行
2. 表的資料檔案超過10g (資料是相對的)。
3. 表資料檔案巨大,表資料檔案超過10g
造成的影響主要就是
慢查詢:
很難在一定的時間內過濾出所需要的資料
ddl操作
ddl(資料定義操作) 修改表就會長時間鎖表,造成主從延遲,如建立索引 。
修改表的結構就會長時間的鎖表 造成主從延遲
(主庫完成=> 日誌=> 從庫完成)
風險:mysql版本<5.5建立索引會鎖表,>=5.5雖然不會鎖表但會引起主從延遲。
如何處理資料庫中的大表分庫分表:
1.把一張大表分成多個小表
分表主鍵的選擇。如訂單號,訂單地區等,好的分表主鍵選擇,會對後期的擴充套件更有利
分表後跨分割槽資料的查詢和統計。
分庫分表需要消耗大量的人力物力,而且要冒著影響業務的風險,所以要慎重。
2.歷史資料歸檔
大表的歷史資料歸檔,可以減少對前後端業務的影響。
歸檔時間點的選擇。例如訂單表,可以對一年前的資料進行歸檔;日誌類的資料,對乙個月前的資料歸檔即可。
如何進行歸檔操作。
7.大事務
事務是資料庫系統區別於其他一切檔案系統的重要特性之一
事務是一組具有原子性的sql語句
事務特性:原子性,一致性,隔離性,永續性
原子性:
乙個事務必須被視為乙個不可分割的最小工作單元。整個事務要麼全部提交成功,要麼全部失敗。
例如:銀行轉賬,我向你匯錢,要麼成功,我的賬戶減少1000元,你的賬戶增加1000元。要麼失敗,我不減,你也沒有增加。不能出現:我的賬戶減少1000,這時候斷電了,你沒收到。
一致性:
事務將資料庫從一種一致性狀態轉換到另一種一致性狀態,在事務開始之前和事務結束之後資料庫中的資料的完整性沒有被破壞例如:銀行轉賬,轉來轉去,總和應該保持不變。在我看開,一致性其實就是巨集觀上強調了一下原子性。只要原子性原則沒有被破壞,應該就總是一致的。
隔離性:
乙個事務對資料庫中的資料進行修改,在未提交完成前對其他事務是否可見的。
隔離性有四種級別:
未提交讀(read uncommited)事務可以讀取未提交的資料 =>髒讀。
已提交讀(read commited)事務只能讀取已提交的資料
可重複讀(repeatable read)同乙個事務中多次讀取的資料是一致的
序列化(serializable)讀取的每一行都加鎖
隔離性由低到高 併發性由高到低
檢視資料庫的隔離級別:show variables like 「%iso%」;
永續性一旦事務提交,則其所做的修改就會永久儲存到資料庫中。
什麼是大事務?
執行時間比較長,運算元據比較多的事務
風險:執行時間長 運算元據比較多的事務
鎖定大量的資料 造成大量的阻塞和鎖超時
回滾需要的時間比較長 回滾時資料也會被鎖定也會造成主從延遲
解決方法:避免一次性處理大量資料 可以分批處理資料
移除不必要的select操作
原文**
影響mysql查詢效率的優化點
資料庫管理系統實現了理論上的概念,但是這種在實際硬體裝置上的實現受到了實際物理條件的約束。其結果是,查詢需要花費一些時間 有時候需要很長的時間。本期專題的內容就是幫助你找到如何讓自己的等待時間最短的方法。1 使用索引 索引是提高查詢速度的最重要的工具。當然還有其它的一些技術可供使用,但是一般來說引起...
mysql的優化 MySQL優化
一 sql語句優化 1 使用limit對查詢結果的記錄進行限定 2 避免select 將需要查詢的字段列出來 3 使用連線 join 來代替子查詢 4 拆分大的delete或insert語句 二 選擇合適的資料型別 1 使用可存下資料的最小的資料型別,整型 date,time char,varcha...
mysql 隨機優化 mysql 優化
mysql優化包括兩方面,一方面是sql優化,另一方面是資料庫配置優化 一 sql優化 1.優化資料型別 盡量將字段設定為 not null,如果你要儲存null,手動去設定它,而不是把它設為預設值 盡量可能的使用更小的字段,但也不要太過執著減小資料型別,要為以後的程式拓展預留一定的空間 盡量少用v...