1、調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。這一部分在開發(fā)信息系統(tǒng)之前完成,程序員需要考慮是否使用ORACLE數(shù)據(jù)庫的分區(qū)功能,對(duì)于經(jīng)常訪問的數(shù)據(jù)庫表是否需要建立索引等。
2、調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計(jì)。這一部分也是在開發(fā)信息系統(tǒng)之前完成,程序員在這一步需要考慮應(yīng)用程序使用什么樣的體系結(jié)構(gòu),是使用傳統(tǒng)的Client/Server兩層體系結(jié)構(gòu),還是使用Browser/Web/Database的三層體系結(jié)構(gòu)。不同的應(yīng)用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫資源是不同的。
3、調(diào)整數(shù)據(jù)庫SQL語句。應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫中的SQL語句執(zhí)行,因此SQL語句的執(zhí)行效率最終決定了ORACLE數(shù)據(jù)庫的性能。ORACLE公司推薦使用ORACLE語句優(yōu)化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調(diào)整優(yōu)化SQL語句。
4、調(diào)整服務(wù)器內(nèi)存分配。內(nèi)存分配是在信息系統(tǒng)運(yùn)行過程中優(yōu)化配置的,數(shù)據(jù)庫管理員可以根據(jù)數(shù)據(jù)庫運(yùn)行狀況調(diào)整數(shù)據(jù)庫系統(tǒng)全局區(qū)(SGA區(qū))的數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)和共享池的大??;還可以調(diào)整程序全局區(qū)(PGA區(qū))的大小。需要注意的是,SGA區(qū)不是越大越好,SGA區(qū)過大會(huì)占用操作系統(tǒng)使用的內(nèi)存而引起虛擬內(nèi)存的頁面交換,這樣反而會(huì)降低系統(tǒng)。
5、調(diào)整硬盤I/O,這一步是在信息系統(tǒng)開發(fā)之前完成的。數(shù)據(jù)庫管理員可以將組成同一個(gè)表空間的數(shù)據(jù)文件放在不同的硬盤上,做到硬盤之間I/O負(fù)載均衡。
6、調(diào)整操作系統(tǒng)參數(shù),例如:運(yùn)行在UNIX操作系統(tǒng)上的ORACLE數(shù)據(jù)庫,可以調(diào)整UNIX數(shù)據(jù)緩沖池的大小,每個(gè)進(jìn)程所能使用的內(nèi)存大小等參數(shù)。
數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)和管理數(shù)據(jù)的倉庫,它產(chǎn)生于距今六十多年前,隨著信息技術(shù)和市場的發(fā)展,特別是二十世紀(jì)九十年代以后,數(shù)據(jù)管理不再僅僅是存儲(chǔ)和管理數(shù)據(jù),而轉(zhuǎn)變成用戶所需要的各種數(shù)據(jù)管理的方式。數(shù)據(jù)庫有很多種類型,從最簡單的存儲(chǔ)有各種數(shù)據(jù)的表格到能夠進(jìn)行海量數(shù)據(jù)存儲(chǔ)的大型數(shù)據(jù)庫系統(tǒng)都在各個(gè)方面得到了廣泛的應(yīng)用。
在信息化社會(huì),充分有效地管理和利用各類信息資源,是進(jìn)行科學(xué)研究和決策管理的前提條件。數(shù)據(jù)庫技術(shù)是管理信息系統(tǒng)、辦公自動(dòng)化系統(tǒng)、決策支持系統(tǒng)等各類信息系統(tǒng)的核心部分,是進(jìn)行科學(xué)研究和決策管理的重要技術(shù)手段。
在經(jīng)濟(jì)管理的日常工作中,常常需要把某些相關(guān)的數(shù)據(jù)放進(jìn)這樣的“倉庫”,并根據(jù)管理的需要進(jìn)行相應(yīng)的處理。
例如,企業(yè)或事業(yè)單位的人事部門常常要把本單位職工的基本情況(職工號(hào)、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個(gè)數(shù)據(jù)庫。有了這個(gè)"數(shù)據(jù)倉庫"我們就可以根據(jù)需要隨時(shí)查詢某職工的基本情況,也可以查詢工資在某個(gè)范圍內(nèi)的職工人數(shù)等等。這些工作如果都能在計(jì)算機(jī)上自動(dòng)進(jìn)行,那我們的人事管理就可以達(dá)到極高的水平。此外,在財(cái)務(wù)管理、倉庫管理、生產(chǎn)管理中也需要建立眾多的這種"數(shù)據(jù)庫",使其可以利用計(jì)算機(jī)實(shí)現(xiàn)財(cái)務(wù)、倉庫、生產(chǎn)的自動(dòng)化管理。
擴(kuò)展資料
數(shù)據(jù)庫,簡單來說是本身可視為電子化的文件柜--存儲(chǔ)電子文件的處所,用戶可以對(duì)文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。
數(shù)據(jù)庫指的是以一定方式儲(chǔ)存在一起、能為多個(gè)用戶共享、具有盡可能小的冗余度的特點(diǎn)、是與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。
在經(jīng)濟(jì)管理的日常工作中,常常需要把某些相關(guān)的數(shù)據(jù)放進(jìn)這樣的"倉庫",并根據(jù)管理的需要進(jìn)行相應(yīng)的處理。
例如,企業(yè)或事業(yè)單位的人事部門常常要把本單位職工的基本情況(職工號(hào)、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個(gè)數(shù)據(jù)庫。有了這個(gè)"數(shù)據(jù)倉庫"我們就可以根據(jù)需要隨時(shí)查詢某職工的基本情況,也可以查詢工資在某個(gè)范圍內(nèi)的職工人數(shù)等等。這些工作如果都能在計(jì)算機(jī)上自動(dòng)進(jìn)行,那我們的人事管理就可以達(dá)到極高的水平。此外,在財(cái)務(wù)管理、倉庫管理、生產(chǎn)管理中也需要建立眾多的這種"數(shù)據(jù)庫",使其可以利用計(jì)算機(jī)實(shí)現(xiàn)財(cái)務(wù)、倉庫、生產(chǎn)的自動(dòng)化管理。
參考資料:數(shù)據(jù)庫的百度百科
我們要做到不但會(huì)寫SQL,還要做到寫出性能優(yōu)良的SQL,以下為筆者學(xué)習(xí)、摘錄、并匯總部分資料與大家分享! (1) 選擇最有效率的表名順序(只在基于規(guī)則的優(yōu)化器中有效): ORACLE 的解析器按照從右到左的順序處理FROM子句中的表名,F(xiàn)ROM子句中寫在最后的表(基礎(chǔ)表 driving table)將被最先處理,在FROM子句中包含多個(gè)表的情況下,你必須選擇記錄條數(shù)最少的表作為基礎(chǔ)表。
如果有3個(gè)以上的表連接查詢, 那就需要選擇交叉表(intersection table)作為基礎(chǔ)表, 交叉表是指那個(gè)被其他表所引用的表. (2) WHERE子句中的連接順序.: ORACLE采用自下而上的順序解析WHERE子句,根據(jù)這個(gè)原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾. (3) SELECT子句中避免使用 ‘ * ‘: ORACLE在解析的過程中, 會(huì)將'*' 依次轉(zhuǎn)換成所有的列名, 這個(gè)工作是通過查詢數(shù)據(jù)字典完成的, 這意味著將耗費(fèi)更多的時(shí)間 (4) 減少訪問數(shù)據(jù)庫的次數(shù): ORACLE在內(nèi)部執(zhí)行了許多工作: 解析SQL語句, 估算索引的利用率, 綁定變量 , 讀數(shù)據(jù)塊等; (5) 在SQL*Plus , SQL*Forms和Pro*C中重新設(shè)置ARRAYSIZE參數(shù), 可以增加每次數(shù)據(jù)庫訪問的檢索數(shù)據(jù)量 ,建議值為200 (6) 使用DECODE函數(shù)來減少處理時(shí)間: 使用DECODE函數(shù)可以避免重復(fù)掃描相同記錄或重復(fù)連接相同的表. (7) 整合簡單,無關(guān)聯(lián)的數(shù)據(jù)庫訪問: 如果你有幾個(gè)簡單的數(shù)據(jù)庫查詢語句,你可以把它們整合到一個(gè)查詢中(即使它們之間沒有關(guān)系) (8) 刪除重復(fù)記錄: 最高效的刪除重復(fù)記錄方法 ( 因?yàn)槭褂昧薘OWID)例子: DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO); (9) 用TRUNCATE替代DELETE: 當(dāng)刪除表中的記錄時(shí),在通常情況下, 回滾段(rollback segments ) 用來存放可以被恢復(fù)的信息. 如果你沒有COMMIT事務(wù),ORACLE會(huì)將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說是恢復(fù)到執(zhí)行刪除命令之前的狀況) 而當(dāng)運(yùn)用TRUNCATE時(shí), 回滾段不再存放任何可被恢復(fù)的信息.當(dāng)命令運(yùn)行后,數(shù)據(jù)不能被恢復(fù).因此很少的資源被調(diào)用,執(zhí)行時(shí)間也會(huì)很短. (譯者按: TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML) (10) 盡量多使用COMMIT: 只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會(huì)因?yàn)镃OMMIT所釋放的資源而減少: COMMIT所釋放的資源: a. 回滾段上用于恢復(fù)數(shù)據(jù)的信息. b. 被程序語句獲得的鎖 c. redo log buffer 中的空間 d. ORACLE為管理上述3種資源中的內(nèi)部花費(fèi) (11) 用Where子句替換HAVING子句: 避免使用HAVING子句, HAVING 只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過濾. 這個(gè)處理需要排序,總計(jì)等操作. 如果能通過WHERE子句限制記錄的數(shù)目,那就能減少這方面的開銷. (非oracle中)on、where、having這三個(gè)都可以加條件的子句中,on是最先執(zhí)行,where次之,having最后,因?yàn)閛n是先把不符合條件的記錄過濾后才進(jìn)行統(tǒng)計(jì),它就可以減少中間運(yùn)算要處理的數(shù)據(jù),按理說應(yīng)該速度是最快的,where也應(yīng)該比having快點(diǎn)的,因?yàn)樗^濾數(shù)據(jù)后才進(jìn)行sum,在兩個(gè)表聯(lián)接時(shí)才用on的,所以在一個(gè)表的時(shí)候,就剩下where跟having比較了。在這單表查詢統(tǒng)計(jì)的情況下,如果要過濾的條件沒有涉及到要計(jì)算字段,那它們的結(jié)果是一樣的,只是where可以使用rushmore技術(shù),而having就不能,在速度上后者要慢如果要涉及到計(jì)算的字段,就表示在沒計(jì)算之前,這個(gè)字段的值是不確定的,根據(jù)上篇寫的工作流程,where的作用時(shí)間是在計(jì)算之前就完成的,而having就是在計(jì)算后才起作用的,所以在這種情況下,兩者的結(jié)果會(huì)不同。
在多表聯(lián)接查詢時(shí),on比where更早起作用。系統(tǒng)首先根據(jù)各個(gè)表之間的聯(lián)接條件,把多個(gè)表合成一個(gè)臨時(shí)表后,再由where進(jìn)行過濾,然后再計(jì)算,計(jì)算完后再由having進(jìn)行過濾。
由此可見,要想過濾條件起到正確的作用,首先要明白這個(gè)條件應(yīng)該在什么時(shí)候起作用,然后再?zèng)Q定放在那里 (12) 減少對(duì)表的查詢: 在含有子查詢的SQL語句中,要特別注意減少對(duì)表的查詢.例子: SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT TAB_NAME,DB_VER FROM TAB_COLUMNS WHERE VERSION = 604) (13) 通過內(nèi)部函數(shù)提高SQL效率.: 復(fù)雜的SQL往往犧牲了執(zhí)行效率. 能夠掌握上面的運(yùn)用函數(shù)解決問題的方法在實(shí)際工作中是非常有意義的 (14) 使用表的別名(Alias): 當(dāng)在SQL語句中連接多個(gè)表時(shí), 請(qǐng)使用表的別名并把別名前綴于每個(gè)Column上.這樣一來,就可以減少解析的時(shí)間并減少那些由Column歧義引起的語法錯(cuò)誤. (15) 用EXISTS替代IN、用NOT EXISTS替代NOT IN: 在許多基于基礎(chǔ)表的查詢中,為了滿足一個(gè)條件,往往需要對(duì)另一個(gè)表進(jìn)行聯(lián)接.在這種情況下, 使用EXISTS(或NOT EXISTS)通常將提高查詢的效率. 在子查詢中,NOT IN子句將執(zhí)行一個(gè)內(nèi)部的排序和合并. 無論在哪種情況下,NOT IN都是最低效的 。
在數(shù)據(jù)庫應(yīng)用系統(tǒng)中編寫可執(zhí)行的SQL語句可以有多種方式實(shí)現(xiàn),但哪一條是最佳方案卻難以確定。
為了解決這一問題,有必要對(duì)SQL實(shí)施優(yōu)化。簡單地說,SQL語句的優(yōu)化就是將性能低下的SQL語句轉(zhuǎn)換成達(dá)到同樣目的的性能更好的SQL語句。
優(yōu)化SQL語句的原因 數(shù)據(jù)庫系統(tǒng)的生命周期可以分成: 設(shè)計(jì)、開發(fā)和成品三個(gè)階段。在設(shè)計(jì)階段進(jìn)行優(yōu)化的成本最低,收益最大。
在成品階段進(jìn)行優(yōu)化的成本最高,收益最小。如果將一個(gè)數(shù)據(jù)庫系統(tǒng)比喻成一座樓房,在樓房建好后進(jìn)行矯正往往成本很高而收效很?。ㄉ踔量赡芨緹o法矯正),而在樓房設(shè)計(jì)、生產(chǎn)階段控制好每塊磚瓦的質(zhì)量就能達(dá)到花費(fèi)小而見效高的目的。
為了獲得最大效益,人們常需要對(duì)數(shù)據(jù)庫進(jìn)行優(yōu)化。數(shù)據(jù)庫的優(yōu)化通??梢酝ㄟ^對(duì)網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)和應(yīng)用程序的優(yōu)化來進(jìn)行。
根據(jù)統(tǒng)計(jì),對(duì)網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)進(jìn)行優(yōu)化所獲得的性能提升全部加起來只占數(shù)據(jù)庫應(yīng)用系統(tǒng)性能提升的40%左右,其余60%的系統(tǒng)性能提升全部來自對(duì)應(yīng)用程序的優(yōu)化。許多優(yōu)化專家甚至認(rèn)為對(duì)應(yīng)用程序的優(yōu)化可以得到80%的系統(tǒng)性能提升。
因此可以肯定,通過優(yōu)化應(yīng)用程序來對(duì)數(shù)據(jù)庫系統(tǒng)進(jìn)行優(yōu)化能獲得更大的收益。 對(duì)應(yīng)用程序的優(yōu)化通常可分為兩個(gè)方面: 源代碼的優(yōu)化和SQL語句的優(yōu)化。
由于涉及到對(duì)程序邏輯的改變,源代碼的優(yōu)化在時(shí)間成本和風(fēng)險(xiǎn)上代價(jià)很高(尤其是對(duì)正在使用中的系統(tǒng)進(jìn)行優(yōu)化) 。另一方面,源代碼的優(yōu)化對(duì)數(shù)據(jù)庫系統(tǒng)性能的提升收效有限,因?yàn)閼?yīng)用程序?qū)?shù)據(jù)庫的操作最終要表現(xiàn)為SQL語句對(duì)數(shù)據(jù)庫的操作。
對(duì)SQL語句進(jìn)行優(yōu)化有以下一些直接原因: 1. SQL語句是對(duì)數(shù)據(jù)庫(數(shù)據(jù)) 進(jìn)行操作的惟一途徑,應(yīng)用程序的執(zhí)行最終要?dú)w結(jié)為SQL語句的執(zhí)行,SQL語句的效率對(duì)數(shù)據(jù)庫系統(tǒng)的性能起到了決定性的作用。 2. SQL語句消耗了70%~90%的數(shù)據(jù)庫資源。
3. SQL語句獨(dú)立于程序設(shè)計(jì)邏輯,對(duì)SQL語句進(jìn)行優(yōu)化不會(huì)影響程序邏輯,相對(duì)于對(duì)程序源代碼的優(yōu)化,對(duì)SQL語句的優(yōu)化在時(shí)間成本和風(fēng)險(xiǎn)上的代價(jià)都很低。 4. SQL語句可以有不同的寫法,不同的寫法在性能上的差異可能很大。
5. SQL語句易學(xué),難精通。SQL語句的性能往往同實(shí)際運(yùn)行系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)、記錄數(shù)量等有關(guān),不存在普遍適用的規(guī)律來提升性能。
傳統(tǒng)的優(yōu)化方法 SQL程序人員在傳統(tǒng)上采用手工重寫來對(duì)SQL語句進(jìn)行優(yōu)化。這主要依靠DBA或資深程序員對(duì)SQL語句執(zhí)行計(jì)劃的分析,依靠經(jīng)驗(yàn),嘗試重寫SQL語句,然后對(duì)結(jié)果和性能進(jìn)行比較以試圖找到性能較佳的SQL語句。
這種做法存在著以下不足: 1. 無法找出SQL語句的所有可能寫法。很可能花費(fèi)了大量的時(shí)間也無法找到性能較佳的SQL語句。
即便找到了某個(gè)性能較佳的SQL語句也無法知道是否存在性能更好的寫法。 2. 非常依賴于人的經(jīng)驗(yàn),經(jīng)驗(yàn)的多寡往往決定了優(yōu)化后SQL語句的性能。
3. 非常耗時(shí)間。重寫-->校驗(yàn)正確性-->比較性能,這一循環(huán)過程需要大量的時(shí)間。
根據(jù)傳統(tǒng)的SQL優(yōu)化工具的功能,人們一般將優(yōu)化工具分為以下三代產(chǎn)品: 第一代的SQL優(yōu)化工具是執(zhí)行計(jì)劃分析工具。這類工具對(duì)輸入的SQL語句從數(shù)據(jù)庫提取執(zhí)行計(jì)劃,并解釋執(zhí)行計(jì)劃中關(guān)鍵字的含義。
第二代的SQL優(yōu)化工具只能提供增加索引的建議,它通過對(duì)輸入的SQL語句的執(zhí)行計(jì)劃的分析來產(chǎn)生是否要增加索引的建議。這類工具存在著致命的缺點(diǎn)——只分析了一條SQL語句就得出增加某個(gè)索引的結(jié)論,根本不理會(huì)(實(shí)際上也無法評(píng)估到)增加的索引對(duì)整體數(shù)據(jù)庫系統(tǒng)性能的影響。
第三代工具是利用人工智能實(shí)現(xiàn)自動(dòng)SQL優(yōu)化。 人工智能自動(dòng)SQL優(yōu)化 隨著人工智能技術(shù)的發(fā)展和在數(shù)據(jù)庫優(yōu)化領(lǐng)域應(yīng)用的深入,在20世紀(jì)90年代末優(yōu)化技術(shù)取得了突破性的進(jìn)展,出現(xiàn)了人工智能自動(dòng)SQL優(yōu)化。
人工智能自動(dòng)SQL優(yōu)化的本質(zhì)就是借助人工智能技術(shù),自動(dòng)對(duì)SQL語句進(jìn)行重寫,找到性能最好的等效SQL語句。LECCO SQL Expert就采用了這種人工智能技術(shù),其SQL Expert支持Oracle、Sybase、MS SQL Server和IBM DB2數(shù)據(jù)庫平臺(tái)。
其突出特點(diǎn)是自動(dòng)優(yōu)化SQL語句。除此以外,還可以以人工智能知識(shí)庫“反饋式搜索引擎”來重寫SQL語句,并找出所有等效的SQL語句及可能的執(zhí)行計(jì)劃,通過測試運(yùn)行為應(yīng)用程序和數(shù)據(jù)庫自動(dòng)找到性能最好的SQL語句,提供微秒級(jí)的計(jì)時(shí); 能夠優(yōu)化Web應(yīng)用程序和有大量用戶的在線事務(wù)處理中運(yùn)行時(shí)間很短的SQL語句; 能通過比較源SQL和待選SQL的不同之處,為開發(fā)人員提供“邊做邊學(xué)式訓(xùn)練”,迅速提高開發(fā)人員的SQL編程技能等等。
該工具針對(duì)數(shù)據(jù)庫應(yīng)用的開發(fā)和維護(hù)階段提供了數(shù)個(gè)特別的模塊:SQL語法優(yōu)化器、PL/SQL集成化開發(fā)調(diào)試環(huán)境(IDE)、掃描器、數(shù)據(jù)庫監(jiān)視器等。其核心模塊之一“SQL 語法優(yōu)化器”的工作原理大致如下:輸入一條源SQL語句,“人工智能反饋式搜索引擎”對(duì)輸入的SQL語句結(jié)合檢測到的數(shù)據(jù)庫結(jié)構(gòu)和索引進(jìn)行重寫,產(chǎn)生N條等效的SQL語句輸出,產(chǎn)生的N條等效SQL語句再送入“人工智能反饋式搜索引擎”進(jìn)行重寫,直至無法產(chǎn)生新的輸出或搜索限額滿,接下來對(duì)輸出的SQL語句進(jìn)行過濾,選。
數(shù)據(jù)庫性能優(yōu)化有哪些措施
1、1、調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。這一部分在開發(fā)信息系統(tǒng)之前完成,程序員需要考慮是否使用ORACLE數(shù)據(jù)庫的分區(qū)功能,對(duì)于經(jīng)常訪問的數(shù)據(jù)庫表是否需要建立索引等。
2、2、調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計(jì)。這一部分也是在開發(fā)信息系統(tǒng)之前完成,程序員在這一步需要考慮應(yīng)用程序使用什么樣的體系結(jié)構(gòu),是使用傳統(tǒng)的Client/Server兩層體系結(jié)構(gòu),還是使用Browser/Web/Database的三層體系結(jié)構(gòu)。不同的應(yīng)用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫資源是不同的。
1.引言 數(shù)據(jù)庫調(diào)優(yōu)可以使數(shù)據(jù)庫應(yīng)用運(yùn)行得更快,它需要綜合考慮各種復(fù)雜的因素。
將數(shù)據(jù)均 勻分布在磁盤上可以提高I/O 利用率,提高數(shù)據(jù)的讀寫性能;適當(dāng)程度的非規(guī)范化可以改善 系統(tǒng)查詢性能;建立索引和編寫高效的SQL 語句能有效避免低性能操作;通過鎖的調(diào)優(yōu)解 決并發(fā)控制方面的性能問題。 數(shù)據(jù)庫調(diào)優(yōu)技術(shù)可以在不同的數(shù)據(jù)庫系統(tǒng)中使用,它不必糾纏于復(fù)雜的公式和規(guī)則,然 而它需要對(duì)程序的應(yīng)用、數(shù)據(jù)庫管理系統(tǒng)、查詢處理、并發(fā)控制、操作系統(tǒng)以及硬件有廣泛 而深刻的理解。
2.計(jì)算機(jī)硬件調(diào)優(yōu) 2.1 數(shù)據(jù)庫對(duì)象的放置策略 利用數(shù)據(jù)庫分區(qū)技術(shù),均勻地把數(shù)據(jù)分布在系統(tǒng)的磁盤中,平衡I/O 訪問,避免I/O 瓶頸: (1)訪問分散到不同的磁盤,即使用戶數(shù)據(jù)盡可能跨越多個(gè)設(shè)備,多個(gè)I/O 運(yùn)轉(zhuǎn),避免 I/O 競爭,克服訪問瓶頸;分別放置隨機(jī)訪問和連續(xù)訪問數(shù)據(jù)。 (2)分離系統(tǒng)數(shù)據(jù)庫I/O 和應(yīng)用數(shù)據(jù)庫I/O,把系統(tǒng)審計(jì)表和臨時(shí)庫表放在不忙的磁盤 上。
(3)把事務(wù)日志放在單獨(dú)的磁盤上,減少磁盤I/O 開銷,這還有利于在障礙后恢復(fù),提 高了系統(tǒng)的安全性。 (4)把頻繁訪問的“活性”表放在不同的磁盤上;把頻繁用的表、頻繁做Join的表分別 放在單獨(dú)的磁盤上,甚至把頻繁訪問的表的字段放在不同的磁盤上,把訪問分散到不同的磁 盤上,避免I/O 爭奪。
2.2 使用磁盤硬件優(yōu)化數(shù)據(jù)庫 RAID (獨(dú)立磁盤冗余陣列)是由多個(gè)磁盤驅(qū)動(dòng)器(一個(gè)陣列)組成的磁盤系統(tǒng)。通過將磁盤陣列當(dāng)作一個(gè)磁盤來對(duì)待,基于硬件的RAID允許用戶管理多個(gè)磁盤。
使用基于硬件的 RAID與基于操作系統(tǒng)的RAID相比較,基于硬件的RAID能夠提供更佳的性能。如果使用基于操作系統(tǒng)的RAID,那么它將占據(jù)其他系統(tǒng)需求的CPU周期;通過使用基于硬件的RAID, 用戶在不關(guān)閉系統(tǒng)的情況下能夠替換發(fā)生故障的驅(qū)動(dòng)器。
SQL Server 一般使用RAID等級(jí)0、1 和5。 RAID 0 是傳統(tǒng)的磁盤鏡象,陣列中每一個(gè)磁盤都有一個(gè)或多個(gè)磁盤拷貝,它主要用來 提供最高級(jí)的可靠性,使RAID 0成倍增加了寫操作卻可以并行處理多個(gè)讀操作,從而提高 了讀操作的性能。
RAID 1 是磁盤鏡像或磁盤雙工,能夠?yàn)槭聞?wù)日志保證冗余性。 RAID 5帶奇偶的磁盤條帶化,即將數(shù)據(jù)信息和校驗(yàn)信息分散到陣列的所有磁盤中,它可以消除一個(gè)校驗(yàn)盤的瓶頸和單點(diǎn)失效問題,RAID 5 也會(huì)增加寫操作,也可以并行處理一個(gè)讀操作,還 可以成倍地提高讀操作的性能。
相比之下,RAID 5 增加的寫操作比RAID 0 增加的要少許多。在實(shí)際應(yīng)用中,用戶的讀操作要求遠(yuǎn)遠(yuǎn)多于寫操作請(qǐng)求,而磁盤執(zhí)行寫操作的速度很快,以至于用戶幾乎感覺不到增加的時(shí)間,所以增加的寫操作負(fù)擔(dān)不會(huì)帶來什么問題。
在性能較好的服務(wù)器中一般都會(huì)選擇使用RAID 5 的磁盤陣列卡來實(shí)現(xiàn),對(duì)于性能相對(duì)差一些的服務(wù)器也可利用純軟件的方式來實(shí)現(xiàn)RAID 5。 3.關(guān)系系統(tǒng)與應(yīng)用程序調(diào)優(yōu) 3.1 應(yīng)用程序優(yōu)化 從數(shù)據(jù)庫設(shè)計(jì)者的角度來看,應(yīng)用程序無非是實(shí)現(xiàn)對(duì)數(shù)據(jù)的增加、修改、刪除、查詢和體現(xiàn)數(shù)據(jù)的結(jié)構(gòu)和關(guān)系。
設(shè)計(jì)者在性能方面的考慮因素,總的出發(fā)點(diǎn)是:把數(shù)據(jù)庫當(dāng)作奢侈 的資源看待,在確保功能的同時(shí),盡可能少地動(dòng)用數(shù)據(jù)庫資源。包括如下原則: (1)不訪問或少訪問數(shù)據(jù)庫; (2)簡化對(duì)數(shù)據(jù)庫的訪問; (3)使訪問最優(yōu); (4)對(duì)前期及后續(xù)的開發(fā)、部署、調(diào)整提出要求,以協(xié)助實(shí)現(xiàn)性能目標(biāo)。
另外,不要直接執(zhí)行完整的SQL 語法,盡量通過存儲(chǔ)過程來調(diào)用SQL Server??蛻襞c服務(wù)器連接時(shí),建立連接池,讓連接盡量得以重用,以避免時(shí)間與資源的損耗。
非到不得已, 不要使用游標(biāo)結(jié)構(gòu),確實(shí)使用時(shí),注意各種游標(biāo)的特性。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:2.768秒