久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

oracle數(shù)據(jù)庫(kù)應(yīng)用開發(fā)經(jīng)驗(yàn)

 怡紅公子0526 2020-11-28

l  日志表應(yīng)該以時(shí)間做分區(qū),方便清理

一般應(yīng)用都會(huì)有一些表用來(lái)記錄用戶操作日志,,數(shù)據(jù)變更記錄,,交易流水等日志型的庫(kù)表。這些表最好按時(shí)間字段做分區(qū),,這樣在遷移或者清理歷史記錄時(shí)會(huì)比較方便,借助oracle的分區(qū)交換清理特性,,效率比delete高很多,。

l  頻繁訪問(wèn)的sequece應(yīng)該增加cache

Oracle在創(chuàng)建序列可以指定cache參數(shù),如果打開這個(gè)參數(shù),,Oracle就可以預(yù)先生成一些sequece,,這樣應(yīng)用獲取sequece相互爭(zhēng)用數(shù)據(jù)塊的概率就會(huì)減少,加快獲取sequece速度,。

l  隊(duì)列表也應(yīng)該做分區(qū),,減少出現(xiàn)高水位問(wèn)題

有時(shí)我們會(huì)使用數(shù)據(jù)庫(kù)表存放待處理的信息,處理完后把記錄刪除,,像是消息隊(duì)列一樣,。這種我們稱之為隊(duì)列表。這種表經(jīng)常會(huì)出現(xiàn)高水位的問(wèn)題,,即某一瞬間突然涌入了很多數(shù)據(jù),,等系統(tǒng)把表里面記錄處理完,,刪除后整個(gè)表訪問(wèn)速度還是很慢(因?yàn)楦咚槐簧弦坪鬀](méi)恢復(fù))。這時(shí)如果庫(kù)表有分區(qū),,則不容易出現(xiàn)這種問(wèn)題,。

l  減少外鍵使用

在設(shè)計(jì)庫(kù)表時(shí)我們一般要使用外鍵以輔助表示不同庫(kù)表數(shù)據(jù)的關(guān)聯(lián),但在實(shí)際部署時(shí)最好不要把外鍵加上,。一個(gè)原因是外鍵會(huì)影響數(shù)據(jù)插入刪除效率,,更重要的原因是加了外鍵的庫(kù)表在數(shù)據(jù)清理,修復(fù)時(shí)會(huì)帶來(lái)許多麻煩,。

l  減少存儲(chǔ)過(guò)程

有些程序員喜歡使用存儲(chǔ)過(guò)程封裝業(yè)務(wù)邏輯,,雖然這樣處理數(shù)據(jù)速度快,但把壓力都留給了數(shù)據(jù)庫(kù)服務(wù)器,。而數(shù)據(jù)庫(kù)服務(wù)器資源往往是比較有限的,,而且比較難擴(kuò)展。而應(yīng)用服務(wù)器資源相對(duì)會(huì)豐富一些,,也好擴(kuò)展,。所以建議盡量少使用存儲(chǔ)過(guò)程,即使用也不要放太多業(yè)務(wù)邏輯,。

l  使用綁定變量

盡可能使用綁定變量代替拼sql,,這樣一是減少sql注入風(fēng)險(xiǎn),另外一個(gè)是讓數(shù)據(jù)庫(kù)可以復(fù)用執(zhí)行計(jì)劃(sql文本相同的才有可能復(fù)用),,減少數(shù)據(jù)庫(kù)生成執(zhí)行計(jì)劃的消耗,。

l  使用并行

Oracle提供并行技術(shù),可以把一個(gè)sql涉及的數(shù)據(jù)集拆分成多份,,交由不同進(jìn)程處理,,以加快數(shù)據(jù)處理速度。對(duì)于OLAP系統(tǒng),,可以考慮使用此技巧提高sql運(yùn)行速度,。

l  使用hint避免數(shù)據(jù)量變化過(guò)大的表

有時(shí)候我們的應(yīng)用會(huì)出現(xiàn)一些數(shù)據(jù)變化比較大的表,有時(shí)表里面只有幾十條數(shù)據(jù),,有時(shí)可能有幾萬(wàn),,幾十萬(wàn)條。對(duì)于這種表的訪問(wèn)最好使用hint強(qiáng)制數(shù)據(jù)庫(kù)在任何情況都使用索引訪問(wèn),,因?yàn)樵跀?shù)據(jù)量小時(shí)數(shù)據(jù)庫(kù)生成的執(zhí)行計(jì)劃可能是使用全表掃描,,到后面數(shù)據(jù)發(fā)生變化時(shí)由于sql沒(méi)有變,執(zhí)行計(jì)劃也沒(méi)變,,這時(shí)使用全表掃描效率就會(huì)很低,。

l  使用tt 共享內(nèi)存等

當(dāng)一個(gè)會(huì)話需要訪問(wèn)一個(gè)數(shù)據(jù)塊,而這個(gè)數(shù)據(jù)塊正在被另一個(gè)用戶從磁盤讀取到內(nèi)存中或者這個(gè)數(shù)據(jù)塊正在被另一個(gè)會(huì)話修改時(shí),,當(dāng)前的會(huì)話就需要等待,,就會(huì)產(chǎn)生一個(gè)buffer busy waits等待,,也伴隨著Latch爭(zhēng)用。如果太多的會(huì)話去訪問(wèn)相同的數(shù)據(jù)塊導(dǎo)致長(zhǎng)時(shí)間的buffer busy waits等待,,通常表現(xiàn)形式為CPU使用率很高,,但吞吐量很低。造成熱快的原因可能是數(shù)據(jù)庫(kù)設(shè)置導(dǎo)致或者重復(fù)執(zhí)行的SQL 頻繁訪問(wèn)一些相同的數(shù)據(jù)塊導(dǎo)致,。

l  兩個(gè)大表關(guān)聯(lián)查詢盡量走h(yuǎn)ash join

雖然oracle提供了很多種表關(guān)聯(lián)算法,,但是經(jīng)過(guò)實(shí)驗(yàn),對(duì)兩個(gè)數(shù)據(jù)量大的表連接還是使用hash連接效率最高,。

l  盡量少用業(yè)務(wù)要素作為主鍵

不使用業(yè)務(wù)要素作為主鍵,,可以為系統(tǒng)提供很多便利性。一是避免需求變更,,原來(lái),。二是

l  合理使用縱表和橫表設(shè)計(jì)

所謂橫表就是指把一個(gè)實(shí)體的所有特性存儲(chǔ)在一行記錄,形成(ID,,屬性1,,屬性2,,。,。。,,屬性N)的庫(kù)表,。

而縱表則是把實(shí)體屬性分開多條記錄存儲(chǔ),設(shè)計(jì)成(ID,,屬性名稱,,屬性值)這樣的庫(kù)表。

下面是一個(gè)橫表和縱表的例子:

 

使用橫表好處:

1 比較直觀,,查詢比較方便

2 屬性值可以根據(jù)屬性內(nèi)容設(shè)計(jì),,例如年齡用number類型存儲(chǔ),職業(yè)用varchar2存儲(chǔ)

使用縱表好處:

1 避免單表字段不停擴(kuò)展,,oracle是行存儲(chǔ)數(shù)據(jù)庫(kù),記錄字段越多,,記錄掃描時(shí)消耗的IO就會(huì)更多

2 增加屬性比較方便

建議:對(duì)于頻繁使用的屬性放橫表,,對(duì)于不頻繁使用的屬性(例如住址),或者只有少部分記錄有的屬性(例如博客)放縱表,。

l  頻繁使用的小表可以考慮設(shè)置cache參數(shù)

設(shè)置了cache后,,oracle會(huì)盡量讓這個(gè)表的數(shù)據(jù)保持在內(nèi)存,提高訪問(wèn)速度,。我碰到過(guò)把操作員和菜單信息表加了cache參數(shù),,大幅提高登錄速度的情況,。

l  物化視圖

普通視圖只是用于簡(jiǎn)化復(fù)雜查詢,對(duì)于效率提升不大,。Oracle提供了一種叫物化視圖的特殊對(duì)象,,可以把視圖查詢的結(jié)果集存起來(lái),并且支持在基礎(chǔ)數(shù)據(jù)變化時(shí)自動(dòng)刷新,。不過(guò)物化視圖bug多,,使用需要謹(jǐn)慎。

l  使用rac集群的數(shù)據(jù)庫(kù),,最好分業(yè)務(wù)使用不同優(yōu)先節(jié)點(diǎn)

由于oracle訪問(wèn)數(shù)據(jù)塊時(shí)要求先把數(shù)據(jù)裝載到內(nèi)存,,如果有某個(gè)數(shù)據(jù)塊頻繁被不同實(shí)例節(jié)點(diǎn)訪問(wèn),會(huì)導(dǎo)致rac集群頻繁地把數(shù)據(jù)從一個(gè)節(jié)點(diǎn)機(jī)器傳輸?shù)搅硪粋€(gè)節(jié)點(diǎn),,這樣會(huì)很消耗時(shí)間,。所以建議不同業(yè)務(wù)優(yōu)先訪問(wèn)不同rac節(jié)點(diǎn),這樣可以減少數(shù)據(jù)爭(zhēng)搶的概率,。

l  善用函數(shù)索引解決狀態(tài)字段查詢,,少用位圖索引

使用。位圖索引容易造成數(shù)據(jù)塊爭(zhēng)用,,建議在OLTP系統(tǒng)少用,。

l  悲觀鎖和樂(lè)觀鎖

悲觀鎖思想認(rèn)為,數(shù)據(jù)被并發(fā)修改的幾率比較大,,需要在修改之前借助于數(shù)據(jù)庫(kù)鎖機(jī)制,先對(duì)數(shù)據(jù)進(jìn)行加鎖,。樂(lè)觀鎖思想認(rèn)為,數(shù)據(jù)一般是不會(huì)造成沖突的,。所以在一般先將數(shù)據(jù)查出來(lái)但不加鎖,,在修改回?cái)?shù)據(jù)庫(kù)時(shí)檢查數(shù)據(jù)有沒(méi)有發(fā)生過(guò)變化,如果有則認(rèn)為更新失敗,。業(yè)務(wù)場(chǎng)景允許失敗重試的情況,,建議多考慮使用悲觀鎖,減少鎖資源對(duì)數(shù)據(jù)庫(kù)的消耗,。

l  一致讀

Oracle的數(shù)據(jù)塊被修改之前會(huì)把數(shù)據(jù)塊備份到undo表空間,,這樣可以保證sql查詢過(guò)程中,數(shù)據(jù)被修改不會(huì)影響查詢結(jié)果,。而且還可以使用“閃回查詢”的技術(shù),,指定查詢庫(kù)表某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)。

l  使用with as改寫復(fù)雜的關(guān)聯(lián)查詢

這樣好處一是簡(jiǎn)化sql邏輯,,二是有必要時(shí)還可以使用hint:materialize先把with as的內(nèi)容實(shí)體化,,減少重復(fù)查詢。

l  索引要合理(基數(shù)過(guò)小的字段不適合建索引)

有些程序員在性別列上面都建了索引,以為查詢時(shí)至少可以省一半時(shí)間,,其實(shí)是錯(cuò)的,。因?yàn)閷?duì)于這種選擇性不高的查詢,先使用索引查詢?cè)倩乇聿闀?huì)導(dǎo)致很多隨機(jī)讀寫,,速度反而不如直接全表掃描快,。

l  大量數(shù)據(jù)遷移時(shí)加快入庫(kù)速度的方法:

commit nowait

append

alter table nologging

刪除索引

使用交換分區(qū)

l  最好對(duì)數(shù)據(jù)庫(kù)api進(jìn)行封裝,以便在日志里面輸出使用的sql

系統(tǒng)做復(fù)雜后,,新手想完全了解系統(tǒng)業(yè)務(wù)很困難,。如果可以設(shè)置在日志里面輸出訪問(wèn)數(shù)據(jù)庫(kù)使用的sql,可以更方便我們進(jìn)行系統(tǒng)運(yùn)維,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多