新聞中心
數(shù)據(jù)庫(kù)優(yōu)化:一站式教程

創(chuàng)新互聯(lián)公司專(zhuān)注于長(zhǎng)安企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,購(gòu)物商城網(wǎng)站建設(shè)。長(zhǎng)安網(wǎng)站建設(shè)公司,為長(zhǎng)安等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,數(shù)據(jù)庫(kù)已經(jīng)成為了現(xiàn)代化應(yīng)用系統(tǒng)中不可或缺的組成部分。由于數(shù)據(jù)量逐漸增大、業(yè)務(wù)規(guī)模逐漸擴(kuò)展,數(shù)據(jù)庫(kù)的性能和穩(wěn)定性受到了越來(lái)越大的挑戰(zhàn),因此數(shù)據(jù)庫(kù)優(yōu)化也成為了應(yīng)用系統(tǒng)開(kāi)發(fā)和運(yùn)維中重要的課題。本文將為讀者介紹數(shù)據(jù)庫(kù)優(yōu)化的基本概念、優(yōu)化策略和實(shí)踐經(jīng)驗(yàn),幫助讀者在實(shí)際工作中提高數(shù)據(jù)庫(kù)的性能和穩(wěn)定性。
一、數(shù)據(jù)庫(kù)優(yōu)化的基本概念
數(shù)據(jù)庫(kù)優(yōu)化是指通過(guò)優(yōu)化數(shù)據(jù)庫(kù)結(jié)構(gòu)、優(yōu)化數(shù)據(jù)存取方式、優(yōu)化SQL語(yǔ)句等手段,提高數(shù)據(jù)庫(kù)的性能和穩(wěn)定性的過(guò)程。其基本目標(biāo)是提高數(shù)據(jù)庫(kù)的響應(yīng)速度、減少服務(wù)器負(fù)載、降低系統(tǒng)故障率、提高用戶體驗(yàn)等。數(shù)據(jù)庫(kù)優(yōu)化的核心內(nèi)容包括:數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化、索引優(yōu)化、SQL優(yōu)化、存儲(chǔ)優(yōu)化、服務(wù)器優(yōu)化等。下面將對(duì)每個(gè)方面進(jìn)行詳細(xì)的闡述。
1. 數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化
數(shù)據(jù)庫(kù)設(shè)計(jì)是數(shù)據(jù)庫(kù)優(yōu)化的基礎(chǔ),良好的數(shù)據(jù)庫(kù)設(shè)計(jì)可以避免后續(xù)優(yōu)化的重復(fù)工作。數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化需要考慮以下幾個(gè)方面:
(1)表的規(guī)范化:遵循之一范式、第二范式和第三范式,將表的數(shù)據(jù)量分解到盡可能小的單位。
(2)數(shù)據(jù)表之間的關(guān)系:要明確數(shù)據(jù)庫(kù)中每個(gè)表之間的關(guān)系,避免出現(xiàn)冗余數(shù)據(jù)和數(shù)據(jù)不一致的情況。
(3)主鍵和外鍵:每個(gè)數(shù)據(jù)表必須有一個(gè)主鍵,用于唯一標(biāo)識(shí)每一行數(shù)據(jù);外鍵用于建立表之間的關(guān)聯(lián)。
2. 索引優(yōu)化
索引是加速數(shù)據(jù)庫(kù)查詢的重要手段,合理的索引設(shè)計(jì)可以大大提高系統(tǒng)響應(yīng)速度。索引優(yōu)化需要考慮以下幾個(gè)方面:
(1)選擇合適的索引類(lèi)型:不同的索引類(lèi)型適用于不同的場(chǎng)景。例如,主鍵索引適用于唯一標(biāo)識(shí)數(shù)據(jù)行的場(chǎng)景,聯(lián)合索引適用于多個(gè)字段組成的查詢條件,全文索引適用于文本檢索場(chǎng)景等。
(2)避免索引過(guò)多:索引是數(shù)據(jù)表的附加結(jié)構(gòu),過(guò)多的索引會(huì)增加系統(tǒng)開(kāi)銷(xiāo)、減慢插入和更新數(shù)據(jù)的速度,降低系統(tǒng)的整體性能。
(3)索引覆蓋:盡可能讓索引覆蓋查詢所需的所有數(shù)據(jù)。
3. SQL優(yōu)化
SQL語(yǔ)句是數(shù)據(jù)庫(kù)工作的核心,SQL優(yōu)化可以極大地提高數(shù)據(jù)庫(kù)查詢性能。SQL優(yōu)化需要考慮以下幾個(gè)方面:
(1)適當(dāng)運(yùn)用JOIN語(yǔ)句:如果需要組合多張表的數(shù)據(jù),應(yīng)該使用JOIN語(yǔ)句,避免使用多次查詢。
(2)使用批量操作:批量插入、更新、刪除數(shù)據(jù),可以大大提高數(shù)據(jù)庫(kù)的性能。
(3)減少重復(fù)查詢:可以將查詢結(jié)果緩存起來(lái),避免重復(fù)查詢。
4. 存儲(chǔ)優(yōu)化
存儲(chǔ)是數(shù)據(jù)庫(kù)的物理基礎(chǔ),存儲(chǔ)優(yōu)化可以避免數(shù)據(jù)損壞、提高存儲(chǔ)效率。存儲(chǔ)優(yōu)化需要考慮以下幾個(gè)方面:
(1)磁盤(pán)陣列:使用磁盤(pán)陣列可以提高數(shù)據(jù)庫(kù)的可靠性和性能。
(2)磁盤(pán)容量:數(shù)據(jù)庫(kù)的數(shù)據(jù)量與日俱增,磁盤(pán)容量必須滿足數(shù)據(jù)增長(zhǎng)的需求。
(3)存儲(chǔ)結(jié)構(gòu):使用合適的存儲(chǔ)結(jié)構(gòu),可以減少數(shù)據(jù)冗余、提高數(shù)據(jù)讀取速度。
5. 服務(wù)器優(yōu)化
服務(wù)器是數(shù)據(jù)庫(kù)的物理環(huán)境,服務(wù)器優(yōu)化可以提高系統(tǒng)的穩(wěn)定性和性能。服務(wù)器優(yōu)化需要考慮以下幾個(gè)方面:
(1) CPU和內(nèi)存:對(duì)于大型數(shù)據(jù)庫(kù),需要配置高速CPU和大容量?jī)?nèi)存。
(2) 硬件容錯(cuò):使用硬件容錯(cuò)的服務(wù)器可以減少系統(tǒng)故障的風(fēng)險(xiǎn)。
(3) 網(wǎng)絡(luò)帶寬:對(duì)于 Web應(yīng)用,網(wǎng)絡(luò)帶寬必須滿足用戶訪問(wèn)的需求。
二、數(shù)據(jù)庫(kù)優(yōu)化的實(shí)踐經(jīng)驗(yàn)
除了以上的理論方面,數(shù)據(jù)庫(kù)優(yōu)化還需要有實(shí)際的操作經(jīng)驗(yàn)。下面將介紹一些數(shù)據(jù)庫(kù)優(yōu)化的實(shí)踐經(jīng)驗(yàn)。
1. 不要盲目地執(zhí)行SQL優(yōu)化
SQL優(yōu)化并不意味著將每個(gè)查詢都改成更優(yōu)化的形式。在優(yōu)化SQL時(shí),需要根據(jù)具體的業(yè)務(wù)需求和場(chǎng)景,綜合考慮查詢的復(fù)雜度、數(shù)據(jù)占用率和執(zhí)行時(shí)間等因素。
2. 周期性的分析數(shù)據(jù)庫(kù)性能
數(shù)據(jù)庫(kù)性能的分析是數(shù)據(jù)庫(kù)優(yōu)化的基礎(chǔ),可以定期監(jiān)控?cái)?shù)據(jù)庫(kù)的性能指標(biāo),如CPU使用率、磁盤(pán)I/O等指標(biāo),以便及時(shí)發(fā)現(xiàn)系統(tǒng)異常和瓶頸。
3. 避免過(guò)度優(yōu)化
雖然優(yōu)化可以帶來(lái)顯著的性能提升,但是過(guò)度優(yōu)化也會(huì)極大地影響系統(tǒng)的穩(wěn)定性。因此,在優(yōu)化過(guò)程中,要注意控制額外開(kāi)銷(xiāo)和風(fēng)險(xiǎn)。
4. 合理利用緩存機(jī)制
數(shù)據(jù)庫(kù)緩存可以顯著提高系統(tǒng)的響應(yīng)速度,減少數(shù)據(jù)庫(kù)的訪問(wèn)壓力,但是在使用緩存機(jī)制時(shí),需要考慮緩存的數(shù)據(jù)一致性和更新策略。
5. 基于實(shí)際需求選擇數(shù)據(jù)庫(kù)技術(shù)
不同的數(shù)據(jù)庫(kù)技術(shù)適用于不同的業(yè)務(wù)需求,選擇合適的數(shù)據(jù)庫(kù)技術(shù)可以提高系統(tǒng)的可靠性和性能。
結(jié)語(yǔ)
數(shù)據(jù)庫(kù)優(yōu)化是應(yīng)用系統(tǒng)開(kāi)發(fā)和運(yùn)維中重要的技術(shù),本文簡(jiǎn)要介紹了數(shù)據(jù)庫(kù)優(yōu)化的基本概念、優(yōu)化策略和實(shí)踐經(jīng)驗(yàn)。通過(guò)掌握這些知識(shí),讀者可以更好地理解和應(yīng)用數(shù)據(jù)庫(kù)優(yōu)化技術(shù),進(jìn)一步提高自身的職業(yè)素養(yǎng)和工作能力。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
如何使用Microsoft SQL Server Management Studio優(yōu)化數(shù)據(jù)庫(kù)
簡(jiǎn)單的優(yōu)化一下數(shù)據(jù)庫(kù)。
一、啟動(dòng)
microsoft
sql
server
management
studio(就是sql的管理工具)
二、工具->sql
server
PRofiler
三、sql
server
profiler->文件->新建跟蹤
->運(yùn)行
時(shí)間長(zhǎng)一點(diǎn),點(diǎn)停止
然后保存這個(gè)跟蹤
sql
server
profiler->文件->保存->
取個(gè)名字
。
詳細(xì)查看:
如何創(chuàng)建跟蹤
(SQL
Server
Profiler)
四、sql
server
profiler->工具-
數(shù)據(jù)庫(kù)引擎
優(yōu)化顧問(wèn)
工作負(fù)荷
選擇剛才保存的文件。
數(shù)據(jù)庫(kù)查詢性能優(yōu)化方式有哪些
1、1、調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。這一部分在開(kāi)發(fā)信息系統(tǒng)之前完成,程序員需要考慮是否使用ORACLE數(shù)據(jù)庫(kù)的分區(qū)功能,對(duì)于經(jīng)常訪問(wèn)的數(shù)據(jù)庫(kù)表是否需要建立索引等。
2、2、調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計(jì)。這一部分也是在開(kāi)發(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ù)庫(kù)資源是不同的。
3、3、調(diào)整數(shù)據(jù)庫(kù)SQL語(yǔ)句。應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫(kù)中的SQL語(yǔ)句執(zhí)行,因此SQL語(yǔ)句的執(zhí)行效率最終決定了ORACLE數(shù)據(jù)庫(kù)的性能。ORACLE公司推薦使用ORACLE語(yǔ)句優(yōu)化器(Oracle Optimizer)和行鎖管理器(row-level manager)來(lái)調(diào)整優(yōu)化SQL語(yǔ)句。
4、4、調(diào)整服務(wù)器內(nèi)存分配。內(nèi)存分配是在信息系統(tǒng)運(yùn)行過(guò)程中優(yōu)化配置的,數(shù)據(jù)庫(kù)管理員可以根據(jù)數(shù)據(jù)庫(kù)運(yùn)行狀況調(diào)整數(shù)據(jù)庫(kù)系統(tǒng)全局區(qū)(SGA區(qū))的數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)和共享池的大?。贿€可以調(diào)整程序全局區(qū)(PGA區(qū))的大小。需要注意的是,SGA區(qū)不是越大越好,SGA區(qū)過(guò)大會(huì)占用操作系統(tǒng)使用的內(nèi)存而引起虛擬內(nèi)存的頁(yè)面交換,這樣反而會(huì)降低系統(tǒng)。
5、5、調(diào)整硬盤(pán)I/O,這一步是在信息系統(tǒng)開(kāi)發(fā)之前完成的。數(shù)據(jù)庫(kù)管理員可以將組成同一個(gè)表空間的數(shù)據(jù)文件放在不同的硬盤(pán)上,做到硬盤(pán)之間I/O負(fù)載均衡。
6、6、調(diào)整操作系統(tǒng)參數(shù),例如:運(yùn)行在UNIX操作系統(tǒng)上的ORACLE數(shù)據(jù)庫(kù),可以調(diào)整UNIX數(shù)據(jù)緩沖池的大小,每個(gè)進(jìn)程所能使用的內(nèi)存大小等參數(shù)。
實(shí)際上,上述數(shù)據(jù)庫(kù)優(yōu)化措施之間是相互聯(lián)系的。ORACLE數(shù)據(jù)庫(kù)性能惡化表現(xiàn)基本上都是用戶響應(yīng)時(shí)間比較長(zhǎng),需要用戶長(zhǎng)時(shí)間的等待。但性能惡化的原因卻是多種多樣的,有時(shí)是多個(gè)因素共同造成了性能惡化的結(jié)果,這就需要數(shù)據(jù)庫(kù)管理員有比較全面的計(jì)算機(jī)知識(shí),能夠敏感地察覺(jué)到影響數(shù)據(jù)庫(kù)性能的主要原因所在。另外,良好的數(shù)據(jù)庫(kù)管理工具對(duì)于優(yōu)化數(shù)據(jù)庫(kù)性能也是很重要的。
ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化工具
常用的數(shù)據(jù)庫(kù)性能優(yōu)化工具有:
1、1、ORACLE數(shù)據(jù)庫(kù)在線數(shù)據(jù)字典,ORACLE在線數(shù)據(jù)字典能夠反映出ORACLE動(dòng)態(tài)運(yùn)行情況,對(duì)于調(diào)整數(shù)據(jù)庫(kù)性能是很有幫助的。
2、2、操作系統(tǒng)工具,例如UNIX操作系統(tǒng)的vmstat,iostat等命令可以查看到系統(tǒng)系統(tǒng)級(jí)內(nèi)存和硬盤(pán)I/O的使用情況,這些工具對(duì)于管理員弄清出系統(tǒng)瓶頸出現(xiàn)在什么地方有時(shí)候很有用。
3、3、SQL語(yǔ)言跟蹤工具(SQL TRACE FACILITY),SQL語(yǔ)言跟蹤工具可以記錄SQL語(yǔ)句的執(zhí)行情況,管理員可以使用虛擬表來(lái)調(diào)整實(shí)例,使用SQL語(yǔ)句跟蹤文件調(diào)整應(yīng)用程序性能。SQL語(yǔ)言跟蹤工具將結(jié)果輸出成一個(gè)操作系統(tǒng)的文件,管理員可以使用TKPROF工具查看這些文件。
4、4、ORACLE Enterprise Manager(OEM),這是一個(gè)圖形的用戶管理界面,用戶可以使用它方便地進(jìn)行數(shù)據(jù)庫(kù)管理而不必記住復(fù)雜的ORACLE數(shù)據(jù)庫(kù)管理的命令。
5、5、EXPLAIN PLAN——SQL語(yǔ)言優(yōu)化命令,使用這個(gè)命令可以幫助程序員寫(xiě)出高效的SQL語(yǔ)言。
ORACLE數(shù)據(jù)庫(kù)的系統(tǒng)性能評(píng)估
信息系統(tǒng)的類(lèi)型不同,需要關(guān)注的數(shù)據(jù)庫(kù)參數(shù)也是不同的。數(shù)據(jù)庫(kù)管理員需要根據(jù)自己的信息系統(tǒng)的類(lèi)型著重考慮不同的數(shù)據(jù)庫(kù)參數(shù)。
1、1、在線事務(wù)處理信息系統(tǒng)(OLTP),這種類(lèi)型的信息系統(tǒng)一般需要有大量的Insert、Update操作,典型的系統(tǒng)包括民航機(jī)票發(fā)售系統(tǒng)、銀行儲(chǔ)蓄系統(tǒng)等。OLTP系統(tǒng)需要保證數(shù)據(jù)庫(kù)的并發(fā)性、可靠性和最終用戶的速度,這類(lèi)系統(tǒng)使用的ORACLE數(shù)據(jù)庫(kù)需要主要考慮下述參數(shù):
l l 數(shù)據(jù)庫(kù)回滾段是否足夠?
l l 是否需要建立ORACLE數(shù)據(jù)庫(kù)索引、聚集、散列?
l l 系統(tǒng)全局區(qū)(SGA)大小是否足夠?
l l SQL語(yǔ)句是否高效?
2、2、數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)(Data Warehousing),這種信息系統(tǒng)的主要任務(wù)是從ORACLE的海量數(shù)據(jù)中進(jìn)行查詢,得到數(shù)據(jù)之間的某些規(guī)律。數(shù)據(jù)庫(kù)管理員需要為這種類(lèi)型的ORACLE數(shù)據(jù)庫(kù)著重考慮下述參數(shù):
l l 是否采用B*-索引或者bitmap索引?
l l 是否采用并行SQL查詢以提高查詢效率?
l l 是否采用PL/SQL函數(shù)編寫(xiě)存儲(chǔ)過(guò)程?
l l 有必要的話,需要建立并行數(shù)據(jù)庫(kù)提高數(shù)據(jù)庫(kù)的查詢效率
SQL語(yǔ)句的調(diào)整原則
SQL語(yǔ)言是一種靈活的語(yǔ)言,相同的功能可以使用不同的語(yǔ)句來(lái)實(shí)現(xiàn),但是語(yǔ)句的執(zhí)行效率是很不相同的。程序員可以使用EXPLAIN PLAN語(yǔ)句來(lái)比較各種實(shí)現(xiàn)方案,并選出更優(yōu)的實(shí)現(xiàn)方案??偟脕?lái)講,程序員寫(xiě)SQL語(yǔ)句需要滿足考慮如下規(guī)則:
1、1、盡量使用索引。試比較下面兩條SQL語(yǔ)句:
語(yǔ)句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN
(SELECT deptno FROM emp);
語(yǔ)句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS
(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);
這兩條查詢語(yǔ)句實(shí)現(xiàn)的結(jié)果是相同的,但是執(zhí)行語(yǔ)句A的時(shí)候,ORACLE會(huì)對(duì)整個(gè)emp表進(jìn)行掃描,沒(méi)有使用建立在emp表上的deptno索引,執(zhí)行語(yǔ)句B的時(shí)候,由于在子查詢中使用了聯(lián)合查詢,ORACLE只是對(duì)emp表進(jìn)行的部分?jǐn)?shù)據(jù)掃描,并利用了deptno列的索引,所以語(yǔ)句B的效率要比語(yǔ)句A的效率高一些。
2、2、選擇聯(lián)合查詢的聯(lián)合次序??紤]下面的例子:
SELECT stuff FROM taba a, tabb b, tabc c
WHERE a.acol between :alow and :ahigh
AND b.bcol between :blow and :bhigh
AND c.ccol between :clow and :chigh
AND a.key1 = b.key1
AMD a.key2 = c.key2;
這個(gè)SQL例子中,程序員首先需要選擇要查詢的主表,因?yàn)橹鞅硪M(jìn)行整個(gè)表數(shù)據(jù)的掃描,所以主表應(yīng)該數(shù)據(jù)量最小,所以例子中表A的acol列的范圍應(yīng)該比表B和表C相應(yīng)列的范圍小。
3、3、在子查詢中慎重使用IN或者NOT IN語(yǔ)句,使用where (NOT) exists的效果要好的多。
4、4、慎重使用視圖的聯(lián)合查詢,尤其是比較復(fù)雜的視圖之間的聯(lián)合查詢。一般對(duì)視圖的查詢更好都分解為對(duì)數(shù)據(jù)表的直接查詢效果要好一些。
5、5、可以在參數(shù)文件中設(shè)置SHARED_POOL_RESERVED_SIZE參數(shù),這個(gè)參數(shù)在SGA共享池中保留一個(gè)連續(xù)的內(nèi)存空間,連續(xù)的內(nèi)存空間有益于存放大的SQL程序包。
6、6、ORACLE公司提供的DBMS_SHARED_POOL程序可以幫助程序員將某些經(jīng)常使用的存儲(chǔ)過(guò)程“釘”在SQL區(qū)中而不被換出內(nèi)存,程序員對(duì)于經(jīng)常使用并且占用內(nèi)存很多的存儲(chǔ)過(guò)程“釘”到內(nèi)存中有利于提高最終用戶的響應(yīng)時(shí)間。
CPU參數(shù)的調(diào)整
CPU是服務(wù)器的一項(xiàng)重要資源,服務(wù)器良好的工作狀態(tài)是在工作高峰時(shí)CPU的使用率在90%以上。如果空閑時(shí)間CPU使用率就在90%以上,說(shuō)明服務(wù)器缺乏CPU資源,如果工作高峰時(shí)CPU使用率仍然很低,說(shuō)明服務(wù)器CPU資源還比較富余。
使用操作相同命令可以看到CPU的使用情況,一般UNIX操作系統(tǒng)的服務(wù)器,可以使用sar –u命令查看CPU的使用率,NT操作系統(tǒng)的服務(wù)器,可以使用NT的性能管理器來(lái)查看CPU的使用率。
數(shù)據(jù)庫(kù)管理員可以通過(guò)查看v$sysstat數(shù)據(jù)字典中“CPU used by this session”統(tǒng)計(jì)項(xiàng)得知ORACLE數(shù)據(jù)庫(kù)使用的CPU時(shí)間,查看“OS User level CPU time”統(tǒng)計(jì)項(xiàng)得知操作系統(tǒng)用戶態(tài)下的CPU時(shí)間,查看“OS System call CPU time”統(tǒng)計(jì)項(xiàng)得知操作系統(tǒng)系統(tǒng)態(tài)下的CPU時(shí)間,操作系統(tǒng)總的CPU時(shí)間就是用戶態(tài)和系統(tǒng)態(tài)時(shí)間之和,如果ORACLE數(shù)據(jù)庫(kù)使用的CPU時(shí)間占操作系統(tǒng)總的CPU時(shí)間90%以上,說(shuō)明服務(wù)器CPU基本上被ORACLE數(shù)據(jù)庫(kù)使用著,這是合理,反之,說(shuō)明服務(wù)器CPU被其它程序占用過(guò)多,ORACLE數(shù)據(jù)庫(kù)無(wú)法得到更多的CPU時(shí)間。
數(shù)據(jù)庫(kù)管理員還可以通過(guò)查看v$sesstat數(shù)據(jù)字典來(lái)獲得當(dāng)前連接ORACLE數(shù)據(jù)庫(kù)各個(gè)會(huì)話占用的CPU時(shí)間,從而得知什么會(huì)話耗用服務(wù)器CPU比較多。
出現(xiàn)CPU資源不足的情況是很多的:SQL語(yǔ)句的重解析、低效率的SQL語(yǔ)句、鎖沖突都會(huì)引起CPU資源不足。
1、數(shù)據(jù)庫(kù)管理員可以執(zhí)行下述語(yǔ)句來(lái)查看SQL語(yǔ)句的解析情況:
SELECT * FROM V$SYSSTAT
WHERE NAME IN
(‘parse time cpu’, ‘parse time elapsed’, ‘parse count (hard)’);
這里parse time cpu是系統(tǒng)服務(wù)時(shí)間,parse time elapsed是響應(yīng)時(shí)間,用戶等待時(shí)間
waite time = parse time elapsed – parse time cpu
由此可以得到用戶SQL語(yǔ)句平均解析等待時(shí)間=waite time / parse count。這個(gè)平均等待時(shí)間應(yīng)該接近于0,如果平均解析等待時(shí)間過(guò)長(zhǎng),數(shù)據(jù)庫(kù)管理員可以通過(guò)下述語(yǔ)句
SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA
ORDER BY PARSE_CALLS;
來(lái)發(fā)現(xiàn)是什么SQL語(yǔ)句解析效率比較低。程序員可以優(yōu)化這些語(yǔ)句,或者增加ORACLE參數(shù)SESSION_CACHED_CURSORS的值。
2、數(shù)據(jù)庫(kù)管理員還可以通過(guò)下述語(yǔ)句:
SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA;
查看低效率的SQL語(yǔ)句,優(yōu)化這些語(yǔ)句也有助于提高CPU的利用率。
3、3、數(shù)據(jù)庫(kù)管理員可以通過(guò)v$system_event數(shù)據(jù)字典中的“l(fā)atch free”統(tǒng)計(jì)項(xiàng)查看ORACLE數(shù)據(jù)庫(kù)的沖突情況,如果沒(méi)有沖突的話,latch free查詢出來(lái)沒(méi)有結(jié)果。如果沖突太大的話,數(shù)據(jù)庫(kù)管理員可以降低spin_count參數(shù)值,來(lái)消除高的CPU使用率。
內(nèi)存參數(shù)的調(diào)整
內(nèi)存參數(shù)的調(diào)整主要是指ORACLE數(shù)據(jù)庫(kù)的系統(tǒng)全局區(qū)(SGA)的調(diào)整。SGA主要由三部分構(gòu)成:共享池、數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)。
1、 1、 共享池由兩部分構(gòu)成:共享SQL區(qū)和數(shù)據(jù)字典緩沖區(qū),共享SQL區(qū)是存放用戶SQL命令的區(qū)域,數(shù)據(jù)字典緩沖區(qū)存放數(shù)據(jù)庫(kù)運(yùn)行的動(dòng)態(tài)信息。數(shù)據(jù)庫(kù)管理員通過(guò)執(zhí)行下述語(yǔ)句:
select (sum(pins – reloads)) / sum(pins) “Lib Cache” from v$librarycache;
來(lái)查看共享SQL區(qū)的使用率。這個(gè)使用率應(yīng)該在90%以上,否則需要增加共享池的大小。數(shù)據(jù)庫(kù)管理員還可以執(zhí)行下述語(yǔ)句:
select (sum(gets – getmisses – usage – fixed)) / sum(gets) “Row Cache” from v$rowcache;
查看數(shù)據(jù)字典緩沖區(qū)的使用率,這個(gè)使用率也應(yīng)該在90%以上,否則需要增加共享池的大小。
2、 2、 數(shù)據(jù)緩沖區(qū)。數(shù)據(jù)庫(kù)管理員可以通過(guò)下述語(yǔ)句:
SELECT name, value FROM v$sysstat WHERE name IN (‘db block gets’, ‘consistent gets’,’physical reads’);
來(lái)查看數(shù)據(jù)庫(kù)數(shù)據(jù)緩沖區(qū)的使用情況。查詢出來(lái)的結(jié)果可以計(jì)算出來(lái)數(shù)據(jù)緩沖區(qū)的使用命中率=1 – ( physical reads / (db block gets + consistent gets) )。
這個(gè)命中率應(yīng)該在90%以上,否則需要增加數(shù)據(jù)緩沖區(qū)的大小。
3、 3、 日志緩沖區(qū)。數(shù)據(jù)庫(kù)管理員可以通過(guò)執(zhí)行下述語(yǔ)句:
select name,value from v$sysstat where name in (‘redo entries’,’redo log space requests’);查看日志緩沖區(qū)的使用情況。查詢出的結(jié)果可以計(jì)算出日志緩沖區(qū)的申請(qǐng)失敗率:
申請(qǐng)失敗率=requests/entries,申請(qǐng)失敗率應(yīng)該接近于0,否則說(shuō)明日志緩沖區(qū)開(kāi)設(shè)太小,需要增加ORACLE數(shù)據(jù)庫(kù)的日志緩沖區(qū)。
關(guān)于數(shù)據(jù)庫(kù)的優(yōu)化教程的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)-老牌IDC、云計(jì)算及IT信息化服務(wù)領(lǐng)域的服務(wù)供應(yīng)商,業(yè)務(wù)涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務(wù)、云計(jì)算服務(wù)、IT信息化、AI算力租賃平臺(tái)(智算云),軟件開(kāi)發(fā),網(wǎng)站建設(shè),咨詢熱線:028-86922220
分享名稱:「數(shù)據(jù)庫(kù)優(yōu)化}一站式教程(數(shù)據(jù)庫(kù)的優(yōu)化教程)
標(biāo)題網(wǎng)址:http://m.fisionsoft.com.cn/article/cdcpish.html


咨詢
建站咨詢
