表的性能部分取決於在建立以前所應用的數據庫特性。例如:在最初建立數據庫時採用的物理存儲特性以及相關的表空間都會在後來影響表的性能。相似地,表性能還受到最開始選擇的物理特性的影響。例如:表類型和數據類型。linux
所以應用實踐中使用的數據庫、表空間、和表的建立標準(並將性能問題放在心上),就造成了優化數據可能性和可擴展性的基礎。數據庫
在建立數據庫的時候,能夠選擇應用一些與性能相關的特性。例如文件的初始佈局以及表空間的管理類型,都是在建立數據庫時制定。這時所實現的架構上的決策,一般都會產生很長遠的影響。安全
如圖1-1所描述的那樣,表空間是支持管理一組數據文件的邏輯結構。數據文件就是磁盤的物理文件。配置表空間時,要注意一些對性能會產生深遠影響的特性,也就是本地管理表空間以及自動段存儲管理的表空間。若是合理地設計這些特性,未來也就能最大限度得可接受到表性能服務器
圖1-1 邏輯存儲於物理存儲之間的關係圖網絡
表是數據庫中存儲數據的對象。數據庫性能衡量的是應用可以以什麼樣的速度插入、更新、刪除、和查詢數據。所以,此書就從優化表性能的攻略講起。架構
本章首先介紹建立數據庫和表空間時,可能會影響表性能的各方面因素,而後,討論另一些主題,好比根據於性能相關的業務需求,選擇表類型和數據類型。稍後介紹的主題包括管理表空間使用狀況的物理實現方式。本章還會詳細介紹其餘問題。例如探測表碎片、處理位於高水位線下方的空閒空間、行連接以及數據壓縮。除此以外還會描述Oracle段顧問(Oracle Segment Advisor).這個工具很好用,可以幫助你自動探測並解決碎片和未使用的空間問題。oracle
最初建立數據庫時,有一些屬性(若是啓用了的話)將會對數據庫中的表的性能和可用性產生長遠的影響。具體來講,建立數據庫時,須要作下面這些事情。工具
1:強制數據庫中建立的每個表空間都必須是本地管理的。本地管理表空間能比已經被棄用的字典管理技術提供更好性能。佈局
2:確保數據庫爲每一個用戶自動分配一個默認的永久表空間。這能夠保證在建立用戶時,自動分配一個默認的表空間,而不是system系統表空間。因爲有延遲段(Deferred Segment Feature),若是一個用戶具備 create table 的權限,即便其在system 表空間中沒有空間配額,也能在其中建立對象。這並不可取。固然,用戶不會向沒有空間愛你配額的表中插入數據,但他們能夠建立對象,從而可能在不經意間使system表空間變得很雜亂。性能
3:確保數據庫會爲每一個用戶自動分配一個默認的臨時表空間。。這能夠保證在建立用戶時,若是沒有顯示指定,自動分配一個臨時表空間。
可使用兩種不一樣的工具來建立Oracle數據庫:
1:在SQL*Plus中使用Create Database 語句。
2:dbca(Databae Configuration Assistant,數據庫配置助手)
使用相似下面這樣的腳本建立遵循合理標準的數據庫,這就爲數據庫的高性能打下良好的基礎:
CREATE DATABASE O12C MAXLOGFILES 16 MAXLOGMEMBERS 4 MAXDATAFILES 1024 MAXINSTANCES 1 MAXLOGHISTORY 680 CHARACTER SET AL32UTF8 DATAFILE '/u01/dbfile/O12C/system01.dbf' SIZE 500M REUSE EXTENT MANAGEMENT LOCAL UNDO TABLESPACE undotbs1 DATAFILE '/u02/dbfile/O12C/undotbs01.dbf' SIZE 800M SYSAUX DATAFILE '/u01/dbfile/O12C/sysaux01.dbf' SIZE 500M DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u02/dbfile/O12C/temp01.dbf' SIZE 500M DEFAULT TABLESPACE USERS DATAFILE '/u01/dbfile/O12C/users01.dbf' SIZE 50M LOGFILE GROUP 1 ('/u01/oraredo/O12C/redo01a.rdo', '/u02/oraredo/O12C/redo01b.rdo') SIZE 200M, GROUP 2 ('/u01/oraredo/O12C/redo02a.rdo', '/u02/oraredo/O12C/redo02b.rdo') SIZE 200M, GROUP 3 ('/u01/oraredo/O12C/redo03a.rdo', '/u02/oraredo/O12C/redo03b.rdo') SIZE 200M USER sys IDENTIFIED BY f0obar USER system IDENTIFIED BY f0obar;
上面這段Create database 腳本經過實現下列功能,爲數據庫的性能打下良好的基礎
1:經過 extent management local 子句,將system表空間定義爲本地管理表空間。這確保了數據庫中建立的全部表空間都是本地管理的。從oracle 12c版本開始,system表空間老是建立爲本地管理表空間。爲建立時沒有顯示定義默認表空間的用戶,定義爲一個默認的表空間USER。這就能夠防止用戶分配sysem系統表空間爲默認表空間。
2;爲全部用戶定義一個默認臨時表空間,名爲temp。這能夠防止爲用戶分配system 表空間做爲默認的臨時表空間。建立system做爲默認臨時表空間的用戶,對性能有負面影響,由於這會形成system表空間中的資源爭奪。
良好的性能始於正確的數據庫配置。以上推薦的這些爲配置有助於爲表數據建立一個可靠的基礎結構。
Oracle 的dbca 工具具備圖形界面和命令行模式。能夠用來建立和配置數據庫。圖形工具使用很是簡單,具備很直觀的界面。在linux、unix 環境下經過圖形界面模式使用dbca,須要正確的安裝X軟件。而後提交XHOST + 命令,而且確保設置了DISPLAY變量。例如:
1 $ xhost + 2 $echo $DISPLAY 3 :0.0 4 $ xhost + 5 $ echo $DISPLAY 6 :0.0
像下面這樣來從操做系統中調用dbca; $dbca
這樣會給一系列讓用戶能夠選擇配置項的頁面。能夠選擇「高級模式」選項,以便更好地控制文件位置和多個在線重作日誌等方面。
默認地,dbca 將會建立一個具備如下特色的數據庫:
與SQL*plus方法相似。這都是一些好的特性。爲在其上建立應用打下良好基礎。
dbca 工具還容許不使用圖形組件,直接經過靜默模式來建立數據庫。在靜默模式下,經過響應文件來使用DBCA;是一種以一致的、可重複的方式來建立數據庫的高效方法。當在網絡鏈接較慢或者沒有安裝相應的X軟件的遠程服務器上進行安裝時,這也是一種很好的方法。
首先,打開Oracle 數據庫安裝文件所在的文件夾,使用find命令來查找dbca.rsp文件所在的位置;
1 $find . -name dbca.rsp 2 3 ./12.1.0.1/database/response/dbca.rsp
使用cd命令進入 dbca.rsp文件目錄中進行復制該文件,以免修改原始文件
1 2 cd ./12.1.0.1/databse/response/ 3 $cp dbca.rsp mydb.rsp
如今,編輯mydb.rsp 文件。修改內容(事例)以下:
1 [CREATEDATABSE] 2 GDBNAME='O12C' 3 SID ='O12C' 4 TEMPLATENAME ='General_Purpose.dbc' 5 SYSPASSWORD='foobar' 6 SYSTEMPASSWORD ='foobar' 7 SYSMANPASSWORD='foobar' 8 DBSNMPASSWORD='foobar' 9 DATAFILEDESTINATION='/u01/dbfile' 10 STORAGETYPE='FS' 11 CHARACTERSET='AL32UTF8' 12 NATIONALCHARACTERSET='UTF8' 13
使用一個響應文件在靜默模式下運行dbca工具:
1 $ dbca -silent -responseFile /home/oracle/orainst/mydb.rsp
應該是能夠看到類是下面的執行輸出:
Copying database files
1% complete
…
62% complete
Completing Database Creation
…
100% complete
Loke at the log file … for further details.
若是查看日誌文件,注意dbca工具使用rman工具來存儲數據庫所使用的數據文件。而後,將會建立實例,並進行安裝後的步驟。在linux系統中,還會爲新數據庫在/etc/oratab文件中建立一條新概率。
許多數據庫管理員在圖形模式下調用dbca工具和配置數據庫,可是不多人會選擇使用響應文件。有效使用響應文件,能夠是數據庫建立過程保持自動化。能夠修改響應文件,以在ASM上建立數據庫,甚至建立RAC環境下的數據庫。此外,幾乎可以控制響應文件的全部方面,就像在圖形模式中調用dbca 同樣。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------工做原理-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合理地配置並建立數據庫有助於保證數據庫的優良性能。儘管確實能夠在建立數據庫以後再來修改其功能;可是,一般的狀況下是,寫得不好的create databases 腳本將會對數據庫性能產生永久的影響。生產環境中,數據庫有時很難有機會停機,對配置不恰當的地方進行從新配置。若是可能的話,最好在建立數據庫開始,在建立環境的每一步都仔細考慮性能問題。
建立數據庫時,還須要考慮影響可維護性的功能。容易維護的數據庫能正常運行更長的時間,而這也正式整體性能的一個重要的部分,「解決方案」部分的create datebase 語句同時還考慮了下面這些可維護方面的特性。
做爲數據庫維護人員的你,應該花點時間確認每一個數據庫都是按照普遍承認的標準建立的,這有助於保證數據庫具備堅實的性能基礎。
1 select * 2 from database_properties 3 where property_name ='DEFAUL_PERMANENT_TABLESPACE'; 4 ---若是須要修改默認的永久表空間,按照下面這樣來作: 5 alter database default tablespace users; 6 ----要檢驗默認臨時表空間的設置,使用查詢: 7 select * from database_properties where property_name ='DEFAULT_TEMP_TABLESPACE'; 8 9 ----要修改臨時表空間的設置,能夠像下面這樣來作: 10 alter database default teportary tablespace temp; 11 ---- 能夠經過下面的查詢來檢驗UNDO表空間的設置; 12 select name ,value from v$parameter where name in ('undo_management','undo_tablespace'); 13 ----若是須要重作(undo)表空間,首先建立1個新的重作表空間,而後使用 14 alter system set undo_tablespace 語句。 15