日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
優(yōu)化數(shù)據(jù)庫(kù)的7個(gè)技巧。 (如何優(yōu)化數(shù)據(jù)庫(kù))

優(yōu)化數(shù)據(jù)庫(kù)的7個(gè)技巧

作為一名數(shù)據(jù)庫(kù)管理員,如何保證數(shù)據(jù)庫(kù)的高效、穩(wěn)定運(yùn)行是每天必須面對(duì)的任務(wù)。在高負(fù)載下,優(yōu)化數(shù)據(jù)庫(kù)可顯著地提升數(shù)據(jù)庫(kù)的性能,保障數(shù)據(jù)的高可用性,避免因數(shù)據(jù)異常帶來(lái)的安全風(fēng)險(xiǎn)。本文將介紹

1. 確定業(yè)務(wù)需求

在優(yōu)化數(shù)據(jù)庫(kù)之前,首先需要確定業(yè)務(wù)需求。根據(jù)業(yè)務(wù)需求來(lái)設(shè)計(jì)合理的數(shù)據(jù)庫(kù)結(jié)構(gòu),設(shè)置合適的索引,并合理選擇數(shù)據(jù)庫(kù)引擎。例如,若應(yīng)用程序的數(shù)據(jù)量很大,則應(yīng)使用InnoDB引擎,它支持事務(wù)和行級(jí)鎖定,并具有良好的穩(wěn)定性和安全性。

2. 創(chuàng)建索引

索引是一種特殊的數(shù)據(jù)結(jié)構(gòu),可快速定位數(shù)據(jù),縮短查詢時(shí)間。同時(shí),索引的創(chuàng)建也需要權(quán)衡選擇。過(guò)多的索引會(huì)增加數(shù)據(jù)庫(kù)的負(fù)擔(dān),導(dǎo)致查詢性能降低。因此,索引的建立需遵循以下原則:

– 優(yōu)先選擇主鍵和唯一約束字段

– 索引過(guò)多的表不要建立過(guò)多索引(不超過(guò)5個(gè))。

– 不要為搜索文本,布爾類(lèi)型等字段建立索引。

– 對(duì)比數(shù)組等大型數(shù)據(jù)類(lèi)型應(yīng)該避免索引。

3. 修改參數(shù)設(shè)置

數(shù)據(jù)庫(kù)參數(shù)設(shè)置的好壞能決定數(shù)據(jù)庫(kù)的性能,可以通過(guò)修改參數(shù)設(shè)置來(lái)提升數(shù)據(jù)庫(kù)的性能。例如:

– 適當(dāng)?shù)脑黾踊驕p少內(nèi)存緩沖池的大小,可大幅度提升MySql的讀寫(xiě)性能,降低磁盤(pán)I/O。

– 對(duì)于高并發(fā)的方式,適當(dāng)增加或減少M(fèi)ySql的線程池大小,可縮短請(qǐng)求響應(yīng)時(shí)間,優(yōu)化系統(tǒng)的吞吐率。

4. 數(shù)據(jù)庫(kù)備份和恢復(fù)

數(shù)據(jù)備份和恢復(fù)是數(shù)據(jù)庫(kù)管理中非常重要的部分。數(shù)據(jù)備份目的是保證數(shù)據(jù)可靠,而恢復(fù)則是保證系統(tǒng)正常。在備份和恢復(fù)過(guò)程中,常常會(huì)遇到問(wèn)題,如備份文件過(guò)大,恢復(fù)時(shí)間過(guò)長(zhǎng),空間不足等問(wèn)題。對(duì)此,有以下意見(jiàn):

– 每日需建立完備份。

– 在恢復(fù)之前,先確認(rèn)新數(shù)據(jù)是否覆蓋先前的數(shù)據(jù)。

– 在備份大型數(shù)據(jù)之前,需要優(yōu)化服務(wù)器的內(nèi)存使用率。

– 根據(jù)數(shù)據(jù)量,可以選擇硬盤(pán),云盤(pán)等,提高業(yè)務(wù)的數(shù)據(jù)安全性和可靠性。

5. 常規(guī)的系統(tǒng)維護(hù)和優(yōu)化

系統(tǒng)維護(hù)和優(yōu)化在數(shù)據(jù)庫(kù)管理中也是必不可少的一部分。其中的主要工作內(nèi)容包括:

– 定期檢查和清理數(shù)據(jù)庫(kù)中的冗余數(shù)據(jù)和無(wú)效數(shù)據(jù)

– 定期優(yōu)化數(shù)據(jù)庫(kù)以保持?jǐn)?shù)據(jù)的良好性能

– 每日檢查數(shù)據(jù)庫(kù)表空間,避免表空間不足導(dǎo)致數(shù)據(jù)存儲(chǔ)失敗

– 定期備份數(shù)據(jù),確保數(shù)據(jù)的完整性和安全性

6. 配置異地容災(zāi)

數(shù)據(jù)庫(kù)的異地容災(zāi)是保障穩(wěn)定運(yùn)行的重要手段,可確保數(shù)據(jù)可用性和業(yè)務(wù)連續(xù)性。通過(guò)異地容災(zāi)可以使數(shù)據(jù)庫(kù)在出現(xiàn)災(zāi)難或數(shù)據(jù)異常的情況下,快速實(shí)現(xiàn)數(shù)據(jù)恢復(fù),保證業(yè)務(wù)的可高可用性。在配置容災(zāi)時(shí),需要重點(diǎn)考慮以下幾點(diǎn):

– 需要根據(jù)業(yè)務(wù)特點(diǎn)和需求,選擇合適的地理位置

– 需要在設(shè)計(jì)時(shí)論證和評(píng)估容災(zāi)方案。

– 需要對(duì)容災(zāi)方案進(jìn)行定期維護(hù)和檢測(cè),并進(jìn)行必要的調(diào)整和優(yōu)化。

7. 監(jiān)測(cè)和故障排除

數(shù)據(jù)庫(kù)管理面臨的更大挑戰(zhàn)是應(yīng)對(duì)各種故障,提升數(shù)據(jù)庫(kù)的條件,保障數(shù)據(jù)庫(kù)的高可用性。為了快速發(fā)現(xiàn)和排除問(wèn)題,需要建立合理有效的監(jiān)控系統(tǒng),并針對(duì)常見(jiàn)問(wèn)題提前做好預(yù)防措施。常見(jiàn)的故障問(wèn)題包括:

– 數(shù)據(jù)庫(kù)過(guò)載

– 網(wǎng)絡(luò)中斷

– 文件系統(tǒng)錯(cuò)誤

– 數(shù)據(jù)庫(kù)軟件錯(cuò)誤

– 語(yǔ)句錯(cuò)誤

在數(shù)據(jù)庫(kù)管理中,你需要通過(guò)不斷的經(jīng)驗(yàn)積累和技能深化,保證數(shù)據(jù)庫(kù)的高效穩(wěn)定運(yùn)行,為業(yè)務(wù)提供高品質(zhì)的支持和服務(wù)。以上是優(yōu)化數(shù)據(jù)庫(kù)的7個(gè)技巧,只有綜合應(yīng)用和靈活運(yùn)用,方能有效保障數(shù)據(jù)庫(kù)的可靠性。

相關(guān)問(wèn)題拓展閱讀:

  • 誰(shuí)知道數(shù)據(jù)庫(kù)優(yōu)化設(shè)計(jì)方案有哪些?

誰(shuí)知道數(shù)據(jù)庫(kù)優(yōu)化設(shè)計(jì)方案有哪些?

系統(tǒng)優(yōu)化,加內(nèi)存

本文首先討論了基于第三范式的數(shù)據(jù)庫(kù)表的基本設(shè)計(jì),著重論述了建立主鍵和索引的策略和方案,然后從數(shù)據(jù)庫(kù)表的擴(kuò)展設(shè)計(jì)和庫(kù)表對(duì)象的放置等角度概述了數(shù)據(jù)庫(kù)管理系統(tǒng)的優(yōu)化方案。

關(guān)鍵詞: 優(yōu)化(Optimizing) 第三范式(3NF) 冗余數(shù)據(jù)(Redundant Data) 索引(Index) 數(shù)據(jù)分割(Data Partitioning) 對(duì)象放置(Object Placement)

1 引言

數(shù)據(jù)庫(kù)優(yōu)化的目標(biāo)無(wú)非是避免磁盤(pán)I/O瓶頸、減少CPU利用率和減少資源競(jìng)爭(zhēng)。為了便于讀者閱讀和理解,筆者參閱了Sybase、Informix和Oracle等大型數(shù)據(jù)庫(kù)系統(tǒng)參考資料,基于多年的工程實(shí)踐經(jīng)驗(yàn),從基本表設(shè)計(jì)、擴(kuò)展設(shè)計(jì)和數(shù)據(jù)庫(kù)表對(duì)象放置等角度進(jìn)行討論,著重討論了如何避免磁盤(pán)I/O瓶頸和減少資源競(jìng)爭(zhēng),相信讀者會(huì)一目了然。

2 基于第三范式的基本表設(shè)計(jì)

在基于表驅(qū)動(dòng)的信息管理系統(tǒng)(MIS)中,基本表的設(shè)計(jì)規(guī)范是第三范式(3NF)。第三范式的基本特征是非主鍵屬性只依賴于主鍵屬性?;诘谌妒降臄?shù)據(jù)庫(kù)表設(shè)計(jì)具有很多優(yōu)點(diǎn):一是消除了冗余數(shù)據(jù),節(jié)省了磁盤(pán)存儲(chǔ)空間;二是有良好的數(shù)據(jù)完整性限制,即基于主外鍵的參照完整限制和基于主鍵的實(shí)體完整性限制,這使得數(shù)據(jù)容易維護(hù),也容易移植和更新;三是數(shù)據(jù)的可逆性好,在做連接(Join)查詢或者合并表時(shí)不遺漏、也不重復(fù);四是因消除了冗余數(shù)據(jù)(冗余列),在查詢(Select)時(shí)每個(gè)數(shù)據(jù)頁(yè)存的數(shù)據(jù)行就多,這樣就有效地減少了邏輯I/O,每個(gè)Cash存的頁(yè)面就多,也減少物理I/O;五是對(duì)大多數(shù)事務(wù)(Transaction)而言,運(yùn)行性能好;六是物理設(shè)計(jì)(Physical Design)的機(jī)動(dòng)性較大,能滿足日益增長(zhǎng)的用戶需求。

在基本表設(shè)計(jì)中,表的主鍵、外鍵、索引設(shè)計(jì)占有非常重要的地位,但系統(tǒng)設(shè)計(jì)人員往往只注重于滿足用戶要求,而沒(méi)有從系統(tǒng)優(yōu)化的高度來(lái)認(rèn)識(shí)和重視它們。實(shí)際上,它們與系統(tǒng)的運(yùn)行性能密切相關(guān)?,F(xiàn)在從系統(tǒng)數(shù)據(jù)庫(kù)優(yōu)化角度討論這些基本概念及其重要意義:

(1)主鍵(Primary Key):主鍵被用于復(fù)雜的SQL語(yǔ)句時(shí),頻繁地在數(shù)據(jù)訪問(wèn)中被用到。一個(gè)表只有一個(gè)主鍵。主鍵應(yīng)該有固定值(不能為Null或缺省值,要有相對(duì)穩(wěn)定性),不含代碼信息,易訪問(wèn)。把常用(眾所周知)的列作為主鍵才有意義。短主鍵更佳(小于25bytes),主鍵的長(zhǎng)短影響索引的大小,索引的大小影響索引頁(yè)的大小,從而影響磁盤(pán)I/O。主鍵分為自然主鍵和人為主鍵。自然主鍵由實(shí)體的屬性構(gòu)成,自然主鍵可以是復(fù)合性的,在形成復(fù)合主鍵時(shí),主鍵列不能太多,復(fù)合主鍵使得Join*作復(fù)雜化、也增加了外鍵表的大小。人為主鍵是,在沒(méi)有合適的自然屬性鍵、或自然屬性復(fù)雜或靈敏度高時(shí),人為形成的。人為主鍵一般是整型值(滿足最小化要求),沒(méi)有實(shí)際意義,也略微增加了表的大小;但減少了把它作為外鍵的表的大小。

(2)外鍵(Foreign Key):外鍵的作用是建立關(guān)系型數(shù)據(jù)庫(kù)中表之間的關(guān)系(參照完整性),主鍵只能從獨(dú)立的實(shí)體遷移到非獨(dú)立的實(shí)體,成為后者的一個(gè)屬性,被稱為外鍵。

(3)索引(Index):利用索引優(yōu)化系統(tǒng)性能是顯而易見(jiàn)的,對(duì)所有常用于查詢中的Where子句的列和所有用于排序的列創(chuàng)建索引,可以避免整表掃描或訪問(wèn),在不改變表的物理結(jié)構(gòu)的情況下,直接訪問(wèn)特定的數(shù)據(jù)列,這樣減少數(shù)據(jù)存取時(shí)間;利用索引可以優(yōu)化或排除耗時(shí)的分類(lèi)*作;把數(shù)據(jù)分散到不同的頁(yè)面上,就分散了插入的數(shù)據(jù);主鍵自動(dòng)建立了唯一索引,因此唯一索引也能確保數(shù)據(jù)的唯一性(即實(shí)體完整性);索引碼越小,定位就越直接;新建的索引效能更好,因此定期更新索引非常必要。索引也有代價(jià):有空間開(kāi)銷(xiāo),建立它也要花費(fèi)時(shí)間,在進(jìn)行Insert、Delete和Update*作時(shí),也有維護(hù)代價(jià)。索引有兩種:聚族索引和非聚族索引。一個(gè)表只能有一個(gè)聚族索引,可有多個(gè)非聚族索引。使用聚族索引查詢數(shù)據(jù)要比使用非聚族索引快。在建索引前,應(yīng)利用數(shù)據(jù)庫(kù)系統(tǒng)函數(shù)估算索引的大小。

① 聚族索引(Clustered Index):聚族索引的數(shù)據(jù)頁(yè)按物理有序儲(chǔ)存,占用空間小。選擇策略是,被用于Where子句的列:包括范圍查詢、模糊查詢或高度重復(fù)的列(連續(xù)磁盤(pán)掃描);被用于連接Join*作的列;被用于Order by和Group by子句的列。聚族索引不利于插入*作,另外沒(méi)有必要用主鍵建聚族索引。

② 非聚族索引(Nonclustered Index):與聚族索引相比,占用空間大,而且效率低。選擇策略是,被用于Where子句的列:包括范圍查詢、模糊查詢(在沒(méi)有聚族索引時(shí))、主鍵或外鍵列、點(diǎn)(指針類(lèi))或小范圍(返回的結(jié)果域小于整表數(shù)據(jù)的20%)查詢;被用于連接Join*作的列、主鍵列(范圍查詢);被用于Order by和Group by子句的列;需要被覆蓋的列。對(duì)只讀表建多個(gè)非聚族索引有利。索引也有其弊端,一是創(chuàng)建索引要耗費(fèi)時(shí)間,二是索引要占有大量磁盤(pán)空間,三是增加了維護(hù)代價(jià)(在修改帶索引的數(shù)據(jù)列時(shí)索引會(huì)減緩修改速度)。那么,在哪種情況下不建索引呢?對(duì)于小表(數(shù)據(jù)小于5頁(yè))、小到中表(不直接訪問(wèn)單行數(shù)據(jù)或結(jié)果集不用排序)、單值域(返回值密集)、索引列值太長(zhǎng)(大于20bitys)、容易變化的列、高度重復(fù)的列、Null值列,對(duì)沒(méi)有被用于Where子語(yǔ)句和Join查詢的列都不能建索引。另外,對(duì)主要用于數(shù)據(jù)錄入的,盡可能少建索引。當(dāng)然,也要防止建立無(wú)效索引,當(dāng)Where語(yǔ)句中多于5個(gè)條件時(shí),維護(hù)索引的開(kāi)銷(xiāo)大于索引的效益,這時(shí),建立臨時(shí)表存儲(chǔ)有關(guān)數(shù)據(jù)更有效。

批量導(dǎo)入數(shù)據(jù)時(shí)的注意事項(xiàng):在實(shí)際應(yīng)用中,大批量的計(jì)算(如電信話單計(jì)費(fèi))用C語(yǔ)言程序做,這種基于主外鍵關(guān)系數(shù)據(jù)計(jì)算而得的批量數(shù)據(jù)(文本文件),可利用系統(tǒng)的自身功能函數(shù)(如Sybase的BCP命令)快速批量導(dǎo)入,在導(dǎo)入數(shù)據(jù)庫(kù)表時(shí),可先刪除相應(yīng)庫(kù)表的索引,這有利于加快導(dǎo)入速度,減少導(dǎo)入時(shí)間。在導(dǎo)入后再重建索引以便優(yōu)化查詢。

(4)鎖:鎖是并行處理的重要機(jī)制,能保持?jǐn)?shù)據(jù)并發(fā)的一致性,即按事務(wù)進(jìn)行處理;系統(tǒng)利用鎖,保證數(shù)據(jù)完整性。因此,我們避免不了死鎖,但在設(shè)計(jì)時(shí)可以充分考慮如何避免長(zhǎng)事務(wù),減少排它鎖時(shí)間,減少在事務(wù)中與用戶的交互,杜絕讓用戶控制事務(wù)的長(zhǎng)短;要避免批量數(shù)據(jù)同時(shí)執(zhí)行,尤其是耗時(shí)并用到相同的數(shù)據(jù)表。鎖的征用:一個(gè)表同時(shí)只能有一個(gè)排它鎖,一個(gè)用戶用時(shí),其它用戶在等待。若用戶數(shù)增加,則Server的性能下降,出現(xiàn)“假死”現(xiàn)象。如何避免死鎖呢?從頁(yè)級(jí)鎖到行級(jí)鎖,減少了鎖征用;給小表增加無(wú)效記錄,從頁(yè)級(jí)鎖到行級(jí)鎖沒(méi)有影響,若在同一頁(yè)內(nèi)競(jìng)爭(zhēng)有影響,可選擇合適的聚族索引把數(shù)據(jù)分配到不同的頁(yè)面;創(chuàng)建冗余表;保持事務(wù)簡(jiǎn)短;同一批處理應(yīng)該沒(méi)有網(wǎng)絡(luò)交互。

(5)查詢優(yōu)化規(guī)則:在訪問(wèn)數(shù)據(jù)庫(kù)表的數(shù)據(jù)(Access Data)時(shí),要盡可能避免排序(Sort)、連接(Join)和相關(guān)子查詢*作。經(jīng)驗(yàn)告訴我們,在優(yōu)化查詢時(shí),必須做到:

① 盡可能少的行;

② 避免排序或?yàn)楸M可能少的行排序,若要做大量數(shù)據(jù)排序,更好將相關(guān)數(shù)據(jù)放在臨時(shí)表中*作;用簡(jiǎn)單的鍵(列)排序,如整型或短字符串排序;

③ 避免表內(nèi)的相關(guān)子查詢;

④ 避免在Where子句中使用復(fù)雜的表達(dá)式或非起始的子字符串、用長(zhǎng)字符串連接;

⑤ 在Where子句中多使用“與”(And)連接,少使用“或”(Or)連接;

⑥ 利用臨時(shí)數(shù)據(jù)庫(kù)。在查詢多表、有多個(gè)連接、查詢復(fù)雜、數(shù)據(jù)要過(guò)濾時(shí),可以建臨時(shí)表(索引)以減少I(mǎi)/O。但缺點(diǎn)是增加了空間開(kāi)銷(xiāo)。

除非每個(gè)列都有索引支持,否則在有連接的查詢時(shí)分別找出兩個(gè)動(dòng)態(tài)索引,放在工作表中重新排序。

3 基本表擴(kuò)展設(shè)計(jì)

基于第三范式設(shè)計(jì)的庫(kù)表雖然有其優(yōu)越性(見(jiàn)本文之一部分),然而在實(shí)際應(yīng)用中有時(shí)不利于系統(tǒng)運(yùn)行性能的優(yōu)化:如需要部分?jǐn)?shù)據(jù)時(shí)而要掃描整表,許多過(guò)程同時(shí)競(jìng)爭(zhēng)同一數(shù)據(jù),反復(fù)用相同行計(jì)算相同的結(jié)果,過(guò)程從多表獲取數(shù)據(jù)時(shí)引發(fā)大量的連接*作,當(dāng)數(shù)據(jù)來(lái)源于多表時(shí)的連接*作;這都消耗了磁盤(pán)I/O和CPU時(shí)間。

尤其在遇到下列情形時(shí),我們要對(duì)基本表進(jìn)行擴(kuò)展設(shè)計(jì):許多過(guò)程要頻繁訪問(wèn)一個(gè)表、子集數(shù)據(jù)訪問(wèn)、重復(fù)計(jì)算和冗余數(shù)據(jù),有時(shí)用戶要求一些過(guò)程優(yōu)先或低的響應(yīng)時(shí)間。

如何避免這些不利因素呢?根據(jù)訪問(wèn)的頻繁程度對(duì)相關(guān)表進(jìn)行分割處理、存儲(chǔ)冗余數(shù)據(jù)、存儲(chǔ)衍生列、合并相關(guān)表處理,這些都是克服這些不利因素和優(yōu)化系統(tǒng)運(yùn)行的有效途徑。

3.1 分割表或儲(chǔ)存冗余數(shù)據(jù)

分割表分為水平分割表和垂直分割表兩種。分割表增加了維護(hù)數(shù)據(jù)完整性的代價(jià)。

水平分割表:一種是當(dāng)多個(gè)過(guò)程頻繁訪問(wèn)數(shù)據(jù)表的不同行時(shí),水平分割表,并消除新表中的冗余數(shù)據(jù)列;若個(gè)別過(guò)程要訪問(wèn)整個(gè)數(shù)據(jù),則要用連接*作,這也無(wú)妨分割表;典型案例是電信話單按月分割存放。另一種是當(dāng)主要過(guò)程要重復(fù)訪問(wèn)部分行時(shí),更好將被重復(fù)訪問(wèn)的這些行單獨(dú)形成子集表(冗余儲(chǔ)存),這在不考慮磁盤(pán)空間開(kāi)銷(xiāo)時(shí)顯得十分重要;但在分割表以后,增加了維護(hù)難度,要用觸發(fā)器立即更新、或存儲(chǔ)過(guò)程或應(yīng)用代碼批量更新,這也會(huì)增加額外的磁盤(pán)I/O開(kāi)銷(xiāo)。

垂直分割表(不破壞第三范式),一種是當(dāng)多個(gè)過(guò)程頻繁訪問(wèn)表的不同列時(shí),可將表垂直分成幾個(gè)表,減少磁盤(pán)I/O(每行的數(shù)據(jù)列少,每頁(yè)存的數(shù)據(jù)行就多,相應(yīng)占用的頁(yè)就少),更新時(shí)不必考慮鎖,沒(méi)有冗余數(shù)據(jù)。缺點(diǎn)是要在插入或刪除數(shù)據(jù)時(shí)要考慮數(shù)據(jù)的完整性,用存儲(chǔ)過(guò)程維護(hù)。另一種是當(dāng)主要過(guò)程反復(fù)訪問(wèn)部分列時(shí),更好將這部分被頻繁訪問(wèn)的列數(shù)據(jù)單獨(dú)存為一個(gè)子集表(冗余儲(chǔ)存),這在不考慮磁盤(pán)空間開(kāi)銷(xiāo)時(shí)顯得十分重要;但這增加了重疊列的維護(hù)難度,要用觸發(fā)器立即更新、或存儲(chǔ)過(guò)程或應(yīng)用代碼批量更新,這也會(huì)增加額外的磁盤(pán)I/O開(kāi)銷(xiāo)。垂直分割表可以達(dá)到更大化利用Cache的目的。

總之,為主要過(guò)程分割表的方法適用于:各個(gè)過(guò)程需要表的不聯(lián)結(jié)的子集,各個(gè)過(guò)程需要表的子集,訪問(wèn)頻率高的主要過(guò)程不需要整表。在主要的、頻繁訪問(wèn)的主表需要表的子集而其它主要頻繁訪問(wèn)的過(guò)程需要整表時(shí)則產(chǎn)生冗余子集表。

注意,在分割表以后,要考慮重新建立索引。

3.2 存儲(chǔ)衍生數(shù)據(jù)

對(duì)一些要做大量重復(fù)性計(jì)算的過(guò)程而言,若重復(fù)計(jì)算過(guò)程得到的結(jié)果相同(源列數(shù)據(jù)穩(wěn)定,因此計(jì)算結(jié)果也不變),或計(jì)算牽扯多行數(shù)據(jù)需額外的磁盤(pán)I/O開(kāi)銷(xiāo),或計(jì)算復(fù)雜需要大量的CPU時(shí)間,就考慮存儲(chǔ)計(jì)算結(jié)果(冗余儲(chǔ)存)。現(xiàn)予以分類(lèi)說(shuō)明:

若在一行內(nèi)重復(fù)計(jì)算,就在表內(nèi)增加列存儲(chǔ)結(jié)果。但若參與計(jì)算的列被更新時(shí),必須要用觸發(fā)器更新這個(gè)新列。

若對(duì)表按類(lèi)進(jìn)行重復(fù)計(jì)算,就增加新表(一般而言,存放類(lèi)和結(jié)果兩列就可以了)存儲(chǔ)相關(guān)結(jié)果。但若參與計(jì)算的列被更新時(shí),就必須要用觸發(fā)器立即更新、或存儲(chǔ)過(guò)程或應(yīng)用代碼批量更新這個(gè)新表。

若對(duì)多行進(jìn)行重復(fù)性計(jì)算(如排名次),就在表內(nèi)增加列存儲(chǔ)結(jié)果。但若參與計(jì)算的列被更新時(shí),必須要用觸發(fā)器或存儲(chǔ)過(guò)程更新這個(gè)新列。

總之,存儲(chǔ)冗余數(shù)據(jù)有利于加快訪問(wèn)速度;但違反了第三范式,這會(huì)增加維護(hù)數(shù)據(jù)完整性的代價(jià),必須用觸發(fā)器立即更新、或存儲(chǔ)過(guò)程或應(yīng)用代碼批量更新,以維護(hù)數(shù)據(jù)的完整性。

3.3 消除昂貴結(jié)合

對(duì)于頻繁同時(shí)訪問(wèn)多表的一些主要過(guò)程,考慮在主表內(nèi)存儲(chǔ)冗余數(shù)據(jù),即存儲(chǔ)冗余列或衍生列(它不依賴于主鍵),但破壞了第三范式,也增加了維護(hù)難度。在源表的相關(guān)列發(fā)生變化時(shí),必須要用觸發(fā)器或存儲(chǔ)過(guò)程更新這個(gè)冗余列。當(dāng)主要過(guò)程總同時(shí)訪問(wèn)兩個(gè)表時(shí)可以合并表,這樣可以減少磁盤(pán)I/O*作,但破壞了第三范式,也增加了維護(hù)難度。對(duì)父子表和1:1關(guān)系表合并方法不同:合并父子表后,產(chǎn)生冗余表;合并1:1關(guān)系表后,在表內(nèi)產(chǎn)生冗余數(shù)據(jù)。

4 數(shù)據(jù)庫(kù)對(duì)象的放置策略

數(shù)據(jù)庫(kù)對(duì)象的放置策略是均勻地把數(shù)據(jù)分布在系統(tǒng)的磁盤(pán)中,平衡I/O訪問(wèn),避免I/O瓶頸。

⑴ 訪問(wèn)分散到不同的磁盤(pán),即使用戶數(shù)據(jù)盡可能跨越多個(gè)設(shè)備,多個(gè)I/O運(yùn)轉(zhuǎn),避免I/O競(jìng)爭(zhēng),克服訪問(wèn)瓶頸;分別放置隨機(jī)訪問(wèn)和連續(xù)訪問(wèn)數(shù)據(jù)。

⑵ 分離系統(tǒng)數(shù)據(jù)庫(kù)I/O和應(yīng)用數(shù)據(jù)庫(kù)I/O。把系統(tǒng)審計(jì)表和臨時(shí)庫(kù)表放在不忙的磁盤(pán)上。

⑶ 把事務(wù)日志放在單獨(dú)的磁盤(pán)上,減少磁盤(pán)I/O開(kāi)銷(xiāo),這還有利于在障礙后恢復(fù),提高了系統(tǒng)的安全性。

⑷ 把頻繁訪問(wèn)的“活性”表放在不同的磁盤(pán)上;把頻繁用的表、頻繁做Join*作的表分別放在單獨(dú)的磁盤(pán)上,甚至把把頻繁訪問(wèn)的表的字段放在不同的磁盤(pán)上,把訪問(wèn)分散到不同的磁盤(pán)上,避免I/O爭(zhēng)奪;

⑸ 利用段分離頻繁訪問(wèn)的表及其索引(非聚族的)、分離文本和圖像數(shù)據(jù)。段的目的是平衡I/O,避免瓶頸,增加吞吐量,實(shí)現(xiàn)并行掃描,提高并發(fā)度,更大化磁盤(pán)的吞吐量。利用邏輯段功能,分別放置“活性”表及其非聚族索引以平衡I/O。當(dāng)然更好利用系統(tǒng)的默認(rèn)段。另外,利用段可以使備份和恢復(fù)數(shù)據(jù)更加靈活,使系統(tǒng)授權(quán)更加靈活。

利用合理建表、索引、存儲(chǔ)過(guò)程。

●數(shù)據(jù)庫(kù)性能的優(yōu)化

一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的生命周期可以分成:設(shè)計(jì)、開(kāi)發(fā)和成品三個(gè)階段。在設(shè)計(jì)階段進(jìn)行數(shù)據(jù)庫(kù)性能優(yōu)化的成本更低,收益更大。在成品階段進(jìn)行數(shù)據(jù)庫(kù)性能優(yōu)化的成本更高,收益最小。

數(shù)據(jù)庫(kù)的優(yōu)化通??梢酝ㄟ^(guò)對(duì)網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫(kù)參數(shù)和應(yīng)用程序的優(yōu)化來(lái)進(jìn)行。最常見(jiàn)的優(yōu)化手段就是對(duì)硬件的升級(jí)。根據(jù)統(tǒng)計(jì),對(duì)網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫(kù)參數(shù)進(jìn)行優(yōu)化所獲得的性能提升,全部加起來(lái)只占數(shù)據(jù)庫(kù)系統(tǒng)性能提升的40%左右,其余的60%系統(tǒng)性能提升來(lái)自對(duì)應(yīng)用程序的優(yōu)化。許多優(yōu)化專家認(rèn)為,對(duì)應(yīng)用程序的優(yōu)化可以得到80%的系統(tǒng)性能的提升。

●應(yīng)用程序的優(yōu)化

應(yīng)用程序的優(yōu)化通??煞譃閮蓚€(gè)方面:源代碼和SQL語(yǔ)句。由于涉及到對(duì)程序邏輯的改變,源代碼的優(yōu)化在時(shí)間成本和風(fēng)險(xiǎn)上代價(jià)很高,而對(duì)數(shù)據(jù)庫(kù)系統(tǒng)性能的提升收效有限。

我陪你等,關(guān)注ing

如何優(yōu)化數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于如何優(yōu)化數(shù)據(jù)庫(kù),優(yōu)化數(shù)據(jù)庫(kù)的7個(gè)技巧。,誰(shuí)知道數(shù)據(jù)庫(kù)優(yōu)化設(shè)計(jì)方案有哪些?的信息別忘了在本站進(jìn)行查找喔。

成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽(yáng)、重慶、貴陽(yáng)機(jī)房服務(wù)器托管租用。


網(wǎng)站題目:優(yōu)化數(shù)據(jù)庫(kù)的7個(gè)技巧。 (如何優(yōu)化數(shù)據(jù)庫(kù))
網(wǎng)址分享:http://www.dlmjj.cn/article/ccoeedj.html