ORACLE 服務器的配置及優化
1. 在ORACLE中實現分布式快速存取和充實內存是很重要的。
要不惜任何代價避免頁面調度和交換﹐每次都必須把系統全局區(SGA)放到內存。
將SGA放到內存中﹐在INIT.ORA中設置參數 PRE_PAGE_SGA
PRE_PAGE_SGA=YES
2. 回卷段的竟爭會降低系統的性能。
SELECT GETS,WAITS FROM V$ROLLSTAT;
GETS代表回卷段被訪問的次數
WAITS代表進程等待回卷段中哪個進程的次數
如果GETS與WAITS的比大于2%表示存在竟爭問題
解決辦法是創建更多的回卷段。
有兩種類型的鎖存竟爭會產生嚴重的后果﹕立即鎖存(IMMEDIATE)和等待(WAIT)鎖存。
等待鎖存的計算公式﹕
WAIT CONTENTION=(MISSES/(GETS+MISSES))*100
立即鎖存的計算公式﹕
IMMEDIATE CONNECTION=(IMMEDIATE_MISSES/(IMMEDIATE_GETS+IMMEDIATE_MISSES))*100
如果任何一個值>0則就存在對鎖存的竟爭
如果發生恢復分配鎖存的竟爭﹐可以減小INIT.ORA中的LOG_SMALL_ENTRY_MAX_SIZE的參數值。如果發生恢復復制竟爭﹐可以增大INIT.ORA中的LOG_SIMULATANOUS_COPIES的參數值。
任何回卷段的OPTIMAL參數的設置不能太小﹐如果OPTIMAL
1<minextents會降低系統的操作性能。 (‘db="" (‘sorts(memory)’,’sorts(disk)’);="" (‘system="" 1="" 3\.="" 4\.="" 5\.="" 6\.="" 7\.="" 8\.="" block="" block’);="" block’,="" checkpoint_process="TRUE" class,count="" from="" getmisses,gets="" gets’);="" gets’,’consistent="" header)’,’system="" header’,’undo="" in="" lgwr的日志文件如果切換太快會影響數據庫的活動﹐導致性能的下將。="" log_checkpoint_interval="10000" log_checkpoint_timeout="1800" name,value="" pins存入數據庫對sql高速緩沖區查找一條語句的次數="" reloads,pins="" reloads存入sql命令被載入和分解的次數="" select="" session_cached_cursors="100" shared_pool_size的參數值。="" sum(gets),sum(getmisses)="" sum(value)="" undo="" upper(class)="" upper(name)="" v$librarycache;="" v$rowcache;="" v$sysstat="" v$waitstat="" where="" ‘undo="" 中="" 修改init.ora中的open_cursors的參數值。="" 在init.ora="" 在init.ora中增加="" 多線程服務器(mts)的配置="" 如果reloads與pins的比率大于1%則應增加init.ora中的shared_pool_size的參數值。="" 如果reloads與pins的比率大于10%則應增加init.ora中的="" 如果用于磁盤上的排序量較高﹐可以增加init.ora中的sort_area_size的值。="" 必須使getmisses比率接近0,="" 提高緩沖區的效率。="" 為了優化性能﹐可以增加init.ora中的參數shared_poll_size和db_block_buffers的值。="" 用戶任何時點擁有的打開游標的最大數="" 第一條查詢中的每一類與第二條查詢中的比率最好<0.01="" 與高速緩存有關的是游標在會話中的緩存方式。=""> MTS_SERVICE
2
3這是調度程序用來向SQL*NET監聽器注冊服務的服務名。
4
5最好取和SID相同的名稱。
6
72> MTS_DISPATCHERS
8
9配置調度進程的數目。
10
113> MTS_MAX_DISPATCHERS
12
13配置調度進程的最大數目。
14
154> MTS_SERCERS
16
17啟動共享服務器的最初數目。
18
195> MTS_MAX_SERVERS
20
21設置共享服務器的最大數目。
22
236> MTS_LISTENTER_ADDRESS
24
25這是調度程序用來向SQL*NET監聽器注冊服務的服務名的地址。
26
27一個MTS的配置例子:
28
29在INIT.ORA中
30
31mts_listener_address=’(ADDRESS=(PROTOCOL=TCP)(KEY=MYDB))’
32
33mts_dispatchers=’tcp,10’
34
35mts_dispatchers=’ipx,2’
36
37mts_max_dispatchers=10
38
39mts_max_servers=10
40
41mts_servers=2
42
43在LISTENER.ORA中應包括下類似的內容:
44
45LISTENER=
46
47(ADDRESS_LIST=
48
49(ADDRESS=
50
51(PROTOCOL=IPX)
52
53(KEY=MYDB)
54
55)
56
57(ADDRESS=
58
59(PROTOCOL=TCP)
60
61(HOST=OURHOST)
62
63(PORT=1521
64
65)
66
67STARTUP_WAIT_TIME_LISTENER=0
68
69CONNECT_TIMEOUT_LISTENER=10
70
71TRACE_LEVEL_LISTENER=ADMIN
72
73SID_LIST_LISTENER=
74
75(SID_LIST=
76
77(SID_DESC=
78
79(SID_NAME=MYDB)
80
81)
82
83)
84
85添加MTS參數之后要重新啟動數據庫。
86
87在SQL*PLUS下用PS命令檢查共享服務器和調度程序是否存在。
88
89Ø PS -EF|GREP FOXMOLD;
90
91具有ORA_SNNN_SID和ORA_DNNN_SID名稱的進程分別是共享服務器和調度進程。
92
93SELECT USERNAME,PROGRAM,SERVER FROM V$SESSION WHERE AUDSID=USERENV(‘SESSIONID’);
94
95在SERVER列中返回的值應該是SHARED,如果是DEDICATED,就說明沒有正確配置MTS.
96
97用LSNRCTL SERVICES命令來檢查調度程序是否向監聽器登記了服務。
98
997\. 移動數據庫文件
100
101第一種方法﹕(ALTER DATABASE)
102
103關閉數據庫-移動數據文件-裝載并改名-啟動
104
1051> SVRMGRL
106
1072> CONNECT INTERNAL
108
1093> SHUTDOWN
110
1114> EXIT
112
1135> MV /U/PRODUCT/ORADATA/FOXMOLD/USER01.DBF /DB3/ORADATA
114
1156> SVRMGRL
116
1177> CONNECT INTERNAL
118
1198> STARTUP MOUNT FOXMOLD
120
1219> ALTER DATABASE RENAME FILE
122
123‘/U/PRODUCT/ORADATA/FOXMOLD/USER01.DBF’ TO
124
125‘/DB3/ORADATA/USER01.DBF’
126
12710> ALTER DATABASE OPEN
128
129第二種方法﹕(ALTER TABLESPACE)
130
131關閉數據庫-移動數據文件-裝載并改名-啟動
132
1331> SVRMGRL
134
1352> CONNECT INTERNAL
136
1373> SHUTDOWN
138
1394> EXIT
140
1415> MV /U/PRODUCT/ORADATA/FOXMOLD/USER01.DBF /DB3/ORADATA
142
1436> SVRMGRL
144
1457> CONNECT INTERNAL
146
1478> ALTER TABLESPACE DATA RENAME DATAFILE
148
149‘/U/PRODUCT/ORADATA/FOXMOLD/USER01.DBF’ TO
150
151‘/DB3/ORADATA/USER01.DBF’
152
1539> ALTER DATABASE OPEN
154
1558\. 統計分析
156
157SPOOL C:\ANALYZE.SQL
158
159SELECT 'ANALYZE TABLE '||TRIM(OBJECT_NAME)||' COMPUTE STATISTICS; '
160
161FROM USER_OBJECTS
162
163WHERE OBJECT_TYPE='TABLE'
164
165然后運行analyze.sql文件即可
166
167最后,對TABLESPACE碎片進行清理.
168
169SELECT TABLESPACE_NAME, PERCENT_BLOCKS_COALESCED
170
171FROM DBA_FREE_SPACE_COALESCED
172
173去看那一個TABLESPACE對應的值不是100的就運行如下命令:
174
175ALTER TABLESPACE TABLESPACE_NAME COALESCE
176
177注意:如果TABLESPACE的值為100就沒有必要作此命令.
178
1799\. 移動TABLE INDEX 到另一個TABLESPACE
180
1811> SPOOL C:\MV_INDEX.SQL
182
1832> SELECT ‘ALTER INDEX ‘||TRIM(OBJECT_NAME)||’ REBUILD TABLESPACE FOXMOLD1;’ FROM USER_OBJECTS WHERE OBJECT_TYPE=’INDEX’
184
1853> 將此命令生成MV_INDEX.SQL文件
186
1874> @C:\MV_INDEX.SQL
188
18910\. MAINTAINING THE CONTROLFILE
190
1911> SVRMGRL
192
1932> CONNECT INTERNAL
194
1953> SHUTDOWN
196
1974> EXIT
198
1995> CP /U/PRODUCT/ORADATA/FOXMOLD/CONTROL01.CTL
200
201/DB4/ORADATA/CONTROL01.CTL
202
2036> CHMOD 660 /DB4/ORADATA/CONTROL01.CTL
204
2057> 修改INIT.ORA CONTROL_FILES=……
206
2078> STARTUP MOUNT FOXMOLD
208
20911\. MAINTAINING REDO LOG FILE
210
2111> SHUTDOWN
212
2132> EXIT
214
2153> CP /DISK1/*.RDO /DISK4/*.RDO
216
2174> CHMOD 660 /DISK4/*.RDO
218
2195> STARTUP MOUNT FOXMOLD
220
22112\. RECOVER SYNTAX
222
223A. RECOVER A CLOSED DATABASE
224
2251> RECOVER DATABASE
226
2272> RECOVER DATAFILE ‘/DISK1/DF2.DBF’
228
2293> ALTER DATABASE RECOVER DATABASE
230
231B. RECOVER AN OPEN DATABASE
232
2331> RECOVER TABLESPACE USER_DATA
234
2352> RECOVER DATAFILE 2
236
2373> ALTER DATABASE RECOVER DATAFILE 2
238注意﹕ALTER DATABASE一定在RECOVER后執行。</minextents會降低系統的操作性能。>