數據庫的優(yōu)化,要從這幾方面著手!
目前在人工智能、大數據、電商等領域,幾乎所有平臺都免不了與數據庫打交道。隨著業(yè)務的發(fā)展和數據量的不斷增加,用戶對于系統(tǒng)的響應速度的要求越來越高,于是性能問題逐漸成為了數據庫中最重要,也是最迫切要解決的問題之一。
隨著云時代的到來,以及自動化智能化運維的發(fā)展,我們應該從哪幾方面入手,來優(yōu)化數據庫的性能呢?
數據庫的優(yōu)化通常分三個方面:
- 數據庫的硬件載體優(yōu)化
- 數據庫語句的優(yōu)化
- 數據庫架構設計的優(yōu)化
數據庫的硬件載體優(yōu)化
以前的數據庫常運行在不同物理服務器的不同平臺上,且設備普遍比較老舊。此外各數據庫之間往往版本不統(tǒng)一,且普遍版本過舊、漏洞多、性能低下、維護成本較高。
隨著硬件技術的進步,使數據庫的硬件載體成為優(yōu)化的選擇之一。所有數據庫可共用同一套服務器、數據庫系統(tǒng)和存儲設備,高性能的服務器能夠處理更多的工作負載,在安全方面也使得所有的安全防護設備能被統(tǒng)一部署。
例如,無論數據庫是否已被載入內存,都需要使用快速存儲來處理寫入操作,并且避免在數據庫啟動后(重啟之后)出現性能問題,這里的快速存儲就是指固態(tài)硬盤。因此,我們可以用SSD固態(tài)硬盤代替SAS機械硬盤,將RAID級別調整為RAID1+0,其相對于RAID1和RAID5有著更好的讀寫性能,畢竟數據庫的壓力主要來自磁盤I/O方面。
此外,物理備份是對數據庫的物理文件(數據文件、控制文件、參數文件、歸檔日志文件)進行轉儲,一旦數據庫發(fā)生故障,可以利用這些文件恢復到數據庫的失效點。在相應的服務器數量和存儲空間擴展后,就能實現數據庫的防災備份。
數據庫語句的優(yōu)化
1、為數據字段選擇合適類型
在創(chuàng)建庫和數據表時,就應該考慮每張表的數據類型大小。為每個表的數據字段選擇合適的類型會減少數據表每一行的存儲大小。
2、創(chuàng)建正確的索引
程序對數據庫的操作,絕大部分來自查詢,因此查詢的優(yōu)化至關重要,而大部分情況下,查詢的優(yōu)化在于索引***率。索引基本上是一個數據結構,正確的索引有助于加快整個數據檢索過程。
3、僅檢索相關數據
當數據源非常龐大時,指定所需要用的數據集將節(jié)省大量檢索時間。
4、擺脫相關的子查詢
相關子查詢基本上取決于父查詢或外部查詢。這種搜索是逐行完成的,這意味著它會降低整個過程的速度。所以子查詢完全可以拆分出來,先生成臨時表,再做關聯查詢。
5、根據要求使用臨時表
以簡單的方式書寫臨時表代碼,不要讓其復雜化。
6、避免編碼循環(huán)
避免編碼循環(huán),因為它會拖慢整個序列。
7、避免頻繁和數據庫連接
當需要批量插入數據、查詢多個表信息時,在條件允許情況下,盡量一次性執(zhí)行完。
數據庫架構設計的優(yōu)化
一個成熟的數據庫架構并不是一開始設計就具備高可用、高伸縮等特性的,它是隨著用戶量的增加,其架構才逐漸完善。
數據庫設計階段的優(yōu)化非常重要,當后期數據庫表里面已經有了大量數據,且有大量的程序對此表有操作時,再對其進行修改的話,就會難上加難。慢查詢(低效的查詢語句)、沒有適當建立索引、數據庫堵塞(鎖)等問題會直接影響到用戶訪問速度和體驗度。因此,我們要在架構設計方面未雨綢繆,提前做好準備。
數據庫架構設計方面的優(yōu)化手段包括有:讀寫分離、主從配置、雙機熱備、分庫分表等等。
例如在生產環(huán)境中,業(yè)務系統(tǒng)通常讀多寫少,因此可部署一主多從架構,主數據庫負責寫操作,并做雙機熱備,多臺從數據庫做負載均衡,負責讀操作,在代碼層面或通過代理程序實現讀寫分離。
分庫是根據業(yè)務將數據庫中相關的表分離到不同的數據庫中,如果業(yè)務量很大,還可將分離后的數據庫做主從復制架構,進一步避免單庫壓力過大。若能把復雜單表拆分成多個小表,來減輕單個表的壓力,也將提高處理效率。
另外,還可以通過分解單臺數據庫負載來突破磁盤I/O性能;或將熱數據存放緩存中,以降低磁盤I/O訪問頻率。