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