Informix Dynamic Server維護手冊 (轉)
1 onstat工具
1.1 監控虛擬處理器和執行緒
onstat –g ath 顯示有關執行緒和處理器類的資訊
onstat –g glo 顯出當前每個處理器的資訊以及有關每個處理器類的累積的統計資訊
onstat –g ioq 使用onstat –g ioq可以確定你是否要分配附加的AIO虛擬處理器。監視AIO vp的gdf佇列的長度,佇列一貫短時表示對磁碟裝置的處理速度與發生請求的速度一樣快。如果gdf佇列持續很長,考慮增加AIO vp的數目。
onstat –g wai 顯示等待狀態的執行緒
onstat –g act 顯示活動狀態的現場
onstat –g rea 監視就緒佇列中的執行緒
onstat –g sle 顯示睡眠狀態的執行緒
1.2 作業系統程式與資料庫session的關係
1)使用作業系統命令(例如topas)檢視最繁忙的oninit程式,記錄它的pid
2)用onstat –g glo檢視vp class,看相應程式裡執行的是那個vp(用pid去匹配)。確定瓶頸是在那一類vp上(比如是在cpu vp上還是在aio vp上)。記錄vp,class。
3)用onstat –g act(或onstat –g ath)檢視相應vp裡執行的是那個執行緒(用vp class去匹配),記錄它的tid,rstcb。
4)用onstat –g ses ses_id檢查session資訊(用tid,rstcb去匹配)
下面的shell用於獲得所有session資訊
!/usr/bin/ksh
###############################################################################
#
# Module: ses_all.sh
# Author: Henry Cheung
# Description: Get all sessiong information
# History
# Date Name Description.................
# 07/30/2004 Henry Cheung Start Program
#
###############################################################################
onstat -g ses | grep -v IBM |grep -v session |grep -v id | awk '{print $1}' | while read SES_ID
do
onstat -g ses $SES_ID
done
1.3 監控共享記憶體
onstat –o 捕獲共享記憶體的靜態快照用於今後的分析和比較
onstat –g seg 顯示每個共享記憶體段的資訊。一般用於檢查有幾個虛擬記憶體段。如果虛擬記憶體段過多,考慮調整SHMVIRSIZE,和SHMADD引數。
onstat –s 獲取鎖存器的資訊
onstat –p 顯示資料庫活動的統計資訊。比如cached的讀寫命中率。如果讀寫命中率較低,考慮調整BUFFERS引數。ovuserthread-使用者嘗試超過使用者最大執行緒最大的次數,ovbuff資料庫伺服器無法找到共享記憶體緩衝區的次數,
1.4 監視磁碟使用
onstat -d
檢查資料庫dbspace、chunk使用情況。配合topas等系統命令,監控是否某個物理硬碟出現I/O瓶頸。
onstat –g iof 顯示每個塊的讀取、寫入的次數
1.5 其他
方法:onstat
目的:檢查資料庫伺服器執行了多長時間,總共佔用了多少記憶體。
方法:onstat –c 或 oncheck –pr
目的:檢查資料庫伺服器當前使用的配置檔案
方法:onstat –g env
目的:檢查資料庫伺服器當前使用的環境變數
onstat –l
檢查邏輯日誌情況。
onstat –m或vi online.log
檢查資料庫日誌,包括檢查點完成時間,是否有異常等。
onstat –g ses (session id), onstat –g sql
檢查session狀況
方法:onstat –u
目的:顯示庫使用者活動資訊
方法:onstat –x
目的:顯示資料庫伺服器上的事務資訊
2 oncheck工具
方法:oncheck -cr
目的:檢查保留頁
方法:oncheck –ce
目的:檢查統空間使用情況
方法:oncheck –cc database
目的:檢查應用資料庫的系統表
方法:oncheck –ci, oncheck -cI
目的:檢查資料庫的索引情況,注意此命令會影響生產系統且耗時較長,應在適當的時候檢查。
方法:oncheck –cd, oncheck –cD
目的:檢查資料庫的資料情況,,注意此命令會影響生產系統且耗時較長,應在適當的時候檢查。
3 使用SMI
3.1 dbspace使用情況
--FileName: dbspaces.sql
--dbspace使用情況:輸入dbspace name, allocated, free, percent of used
unload to dbs.txt delimiter " "
SELECT name[1,15] dbspace, SUM(chksize) allocated, SUM(nfree) free,
ROUND(((SUM(chksize) - SUM(nfree))/SUM(chksize))*100) pcused
FROM sysmaster:sysdbspaces d, sysmaster:syschunks c
WHERE d.dbsnum = c.dbsnum
GROUP BY 1
ORDER BY 4 DESC
及時監控dbspace的使用情況,以便分配新的空間給資料庫使用
3.2 dbspace I/O
--FileName: dbs_io.sql
--dbspace、chunk I/O: dbspace name, path, disk reads, disk writes
UNLOAD TO dbs_io.txt DELIMITER " "
SELECT first 10 d.name, fname path_name, SUM(pagesread) diskreads, SUM(pageswritten) diskwrites
FROM sysmaster:syschkio c, sysmaster:syschunks k, sysmaster:sysdbspaces d
WHERE d.dbsnum = k.dbsnum
AND k.chknum = c.chunknum
GROUP BY 1, 2
ORDER BY 3 DESC
監視是否存在某個dbspace I/O較高的情況,如果有就要考慮更為合理的資料分佈和硬碟劃分。
3.3 統計資料庫佔用的空間
--FileName: database_size.sql
--統計資料庫佔用的空間:dbspace, database_name, size
SELECT dbsname[1,15] database_name, SUM(pe_size) size
FROM sysmaster:sysptnext,
OUTER sysmaster:systabnames
WHERE pe_partnum = partnum
GROUP BY 1
ORDER BY 2 DESC
3.4 表擴充套件塊情況
--FileName: extents.sql
--獲取系統中extents最多的表的表名,所在的資料庫名,extents的數量
--sysextents表9.2版本和9.4版本的結構有不同,但不影響本sql執行
UNLOAD TO extents.txt DELIMITER " "
SELECT FIRST 20 t.dbsname, t.tabname, count(*)
FROM sysmaster:systabnames t, sysmaster:sysextents e
WHERE t.dbsname = e.dbsname
AND t.tabname = e.tabname
AND t.tabname[1,3] != "sys"
GROUP BY 1,2
ORDER BY 3 DESC
如果發現表的extents數量過多,就要考慮調整extents的大小,並且重建表。
3.5 表I/O
--FileName: tab_io.sql
--table I/P: dbsname, tabname, disk reads, disk writes, disk io sum
UNLOAD TO tab_io.txt DELIMITER " "
SELECT first 5 dbsname, tabname, (isreads + pagreads) diskreads, (iswrites + pagwrites) diskwrites,
(isreads + pagreads + iswrites + pagwrites) disk_io
FROM sysmaster:sysptprof
WHERE tabname[1,3] != "sys"
ORDER BY 5 DESC
監視是否存在某張表I/O較高的情況,如果有就要考慮更為合理的資料分佈和硬碟劃分。
3.6 表空間的使用情況
--FileName: tab_space.sql
--表空間的使用情況: table name, dbspace, allocated_space, used_space, free_space
--針對每個應用庫
UNLOAD TO tab_used.txt DELIMITER " "
SELECT FIRST 10 t.tabname[1,20] table_name,
Cast(dbinfo( "DBSPACE" , t.partnum ) as char(10)) dbspace ,
p.nptotal allocated_space,
p.npused used_space,
(p.nptotal - p.npused) free_space,
ROUND((p.npused/p.nptotal)*100) percent_used
FROM sysmaster:systabnames t, APPDB:systables a, sysmaster:sysptnhdr p
WHERE a.partnum = p.partnum
AND a.partnum = t.partnum
AND tabid > 99
GROUP BY 1,2,3,4,5
ORDER BY 3 DESC
如果表空間分配的較多而使用的較少,就要考慮重建表。
3.7 索引層數
--FileName: idx_lvl.sql
--索引層: table name, index name, levels
--應用庫
SELECT FIRST 5 t.tabname, i.idxname, i.levels
FROM APPDB:systables t, APPDB:sysindexes i
WHERE t.tabid = i.tabid
AND t.tabname[1,3] != "sys"
ORDER BY 3 DESC
當索引層數超過4層就要考慮是否需要重建索引。
3.8 索引唯一性
--FileName: idx_unq.sql
--索引唯一性: table name, index name, table rows, index unique, percent of unique
--應用庫
--i.nunique/t.nrows有可能會除零,
UNLOAD TO idx_unq.txt DELIMITER " "
SELECT FIRST 10 t.tabname, i.idxname, t.nrows, i.nunique
FROM APPDB:systables t, APPDB:sysindexes i
WHERE t.tabid =i.tabid
AND t.tabid > 99
ORDER BY 3 DESC
{
SELECT FIRST 10 t.tabname, i.idxname, t.nrows, i.nunique, (i.nunique/t.nrows)*100 pcniq
FROM APPDB:systables t, APPDB:sysindexes i
WHERE t.tabid =i.tabid
AND t.tabid > 99
ORDER BY 3 DESC, 5 DESC
}
索引唯一性的百分率越高,索引的唯一性就越高,效能就越好。為了避免因索引重複程度很高而引起的效能瓶頸,您可以使用複合索引來替換原來的索引,複合索引結合了重複程度很高的列與唯一性比較高的列。
3.9 順序掃描
--FileName: seq_scans.sql
--順序掃描: database name, table name, number of rows, total sequence scans
--應用庫
UNLOAD TO seq_scans.txt DELIMITER " "
SELECT FIRST 10 p.dbsname, p.tabname, t.nrows, sum(p.seqscans) tot_seqscans
FROM sysmaster:sysptprof p, systables t
WHERE p.dbsname NOT LIKE "sys%"
AND p.dbsname = APPDB
AND p.tabname = t.tabname
AND t.tabname NOT LIKE "sys%"
GROUP BY 1,2,3
ORDER BY 3 DESC,4 DESC
如果一個具有幾千甚至幾百萬行大表的順序掃描數很高,那麼您可能需要考慮向該表新增一些索引,或者考慮使用程式偽指令來強制內部查詢最佳化器為訪問該表中的資料選擇索引而不是順序掃描。
3.10 獲取session資訊
可以從syssespro(各使用者操作計數),syssesions(對每個已連線使用者的描述)表中獲取sessions資訊。
--FileName: sessions.sql
--sessions資訊: session id, user name, host name, access, locks, sequence scans, total sorts, disk sorts, percent of memory sorts
SELECT s.sid, s.username, s.hostname,
(isreads+iswrites+bufreads+bufwrites+pagreads+pagwrites) access,
locksheld, seqscans, total_sorts, dsksorts,
((total_sorts - dsksorts)/total_sorts)*100 pct_memsorts
FROM sysmaster:syssessions s, sysmaster:syssesprof f
WHERE s.sid=f.sid
ORDER BY 4
如果一個session有過多的順序掃描,或佔用過多的鎖資源,或使用了較多的disk sorts就需要關注這個session。
3.11 sessions持有lock的情況
--FileName: lock.sql
--sessions持有lock的情況: sid, username, hostname, database name, table name, lock type
SELECT owner, username, hostname, dbsname, tabname, type
FROM sysmaster:syssessions s, sysmaster:syslocks l
WHERE sid = owner
AND tabname NOT LIKE "sys%"
如果在鎖使用方面存在某些衝突,例如某個使用者需要對已被別的使用者鎖定的表進行專有訪問,那麼您可以方便地確定該鎖的所有者,並根據使用者的優先順序發出 onmode -z sid 命令來殺死會話,然後釋放該鎖;sid 這個編號是從上面輸出中的 owner 欄位中獲取的;請注意,只有使用者“Informix”可以執行該命令。
3.12 鎖資訊
--鎖資訊:資料庫名,表名,該表佔有互斥鎖的個數
--FileName: lock_count.sql
--鎖資訊:資料庫名,表名,該表佔有互斥鎖的個數
SELECT FIRST 10 dbsname, tabname, COUNT(*)
FROM syslocks
WHERE type LIKE "%X%"
GROUP BY 1, 2
ORDER BY 3
4 效能瓶頸時應急方法
4.1 收集系統執行資訊
收集全面的系統執行資訊,以便今後分析問題所在。使用onstat –a,onstat –g all,並保留輸出資訊到檔案中。保留online.log。如果資料庫當機有core檔案生成,請保留core檔案。
4.2 資料庫當機
重啟資料庫保證關鍵業務執行。保留online.log,core檔案。檢視online.log,core檔案,初步判斷當機原因,並於IMB技術支援聯絡。如果重啟失敗,考慮切換到備份機。
4.3 系統執行突然變慢,系統資源被佔用過多
4.3.1 檢查系統資源
首先用topas,nmon,sar, vmstat,iostat等命令檢查CPU,記憶體、硬碟資源的使用情況。
topas
Topas Monitor for host: S1_C_HZ_SHUJUKU EVENTS/QUEUES FILE/TTY
Tue Jul 27 13:01:26 2004 Interval: 2 Cswitch 1907 Readch 2750
Syscall 7513 Writech 581
Kernel 2.2 |# | Reads 21 Rawin 0
User 62.0 |################# | Writes 8 Ttyout 238
Wait 0.0 | | Forks 0 Igets 0
Idle 35.6 |########## | Execs 0 Namei 7
Runqueue 3.7 Dirblk 0
Interf KBPS I-Pack O-Pack KB-In KB-Out Waitqueue 1.0
en1 628.9 880.4 1057.9 111.4 517.5
en2 0.2 1.9 0.9 0.1 0.1 PAGING MEMORY
Faults 0 Real,MB 4095
Disk Busy% KBPS TPS KB-Read KB-Writ Steals 0 % Comp 84.5
hdisk3 93.4 3981.8 234.9 3571.9 409.9 PgspIn 0 % Noncomp 15.6
hdisk2 78.9 2695.8 269.4 2145.9 549.9 PgspOut 0 % Client 0.5
hdisk22 71.4 1317.8 104.4 677.9 639.9 PageIn 0
hdisk4 59.9 3125.8 129.9 485.9 2639.9 PageOut 0 PAGING SPACE
hdisk10 47.4 5095.9 153.4 5095.9 0.0 Sios 0 Size,MB 5120
% Used 56.6
oninit (35894) 17.1% PgSp: 1.2mb informix % Free 43.3
oninit (21698) 11.7% PgSp: 1.2mb informix
oninit (38944) 10.7% PgSp: 1.2mb informix
oninit (42688) 10.7% PgSp: 1.2mb informix Press "h" for help screen.
oninit (15774) 7.5% PgSp: 1.2mb informix Press "q" to quit program.
圖 1
上圖可以看出CPU idle 35.6%,hdisk3最繁忙93.4%,最繁忙的oninit程式和其程式號。
透過這一步的檢查確定是否有CPU、記憶體或磁碟I/O操作的異常。如果CPU突然繁忙,就要檢查是否正在執行某個特殊的應用程式,或者在執行一些大批次處理的業務。如果確定某個應用程式會佔用過多的系統資源考慮中止該應用程式。
4.3.2 檢查資料庫
使用”1 onstat工具”提到的檢查虛擬處理器、共享記憶體、磁碟使用的方法檢查。
使用”1.2 作業系統程式與資料庫session的關係”中提到的方法檢查session情況。
1) 使用作業系統命令(例如topas)檢視最繁忙的oninit程式,記錄它的pid
參見圖1紅色部分
2) 用onstat –g glo檢視vp class,看相應程式裡執行的是那個vp(用pid去匹配)。確定瓶頸是在那一類vp上(比如是在cpu vp上還是在aio vp上)。記錄vp,class。
Informix Dynamic Server 2000 Version 9.21.FC7 -- On-Line -- Up 3 days 20:05s
MT global info:
sessions threads vps lngspins
72 114 12 20536081
sched calls thread switches yield 0 yield n yield forever
total: 1331551216 803593811 604838347 1639523 333477762
per sec: 518 513 43 3 225
Virtual processor summary:
class vps usercpu syscpu total
cpu 6 1096903.92 27302.29 1124206.21
aio 2 7.85 13.40 21.25
lio 1 3.52 5.91 9.43
pio 1 3.20 6.07 9.27
adm 1 10.40 17.29 27.69
msc 1 314.72 92.50 407.22
total 12 1097243.61 27437.46 1124681.07
Individual virtual processors:
vp pid class usercpu syscpu total
1 32440 cpu 249667.07 7407.37 257074.44
2 32914 adm 10.40 17.29 27.69
3 30830 cpu 192338.19 7340.19 199678.38
4 23202 cpu 167720.65 3326.55 171047.20
5 34752 cpu 165780.54 3250.53 169031.07
6 32102 cpu 162890.54 3086.34 165976.88
7 26454 cpu 158506.93 2891.31 161398.24
8 35392 lio 3.52 5.91 9.43
9 31568 pio 3.20 6.07 9.27
10 15788 aio 4.53 6.80 11.33
11 30090 msc 314.72 92.50 407.22
12 27966 aio 3.32 6.60 9.92
tot 1097243.61 27437.46 1124681.07
圖 2
3) 用onstat –g act(或onstat –g ath)檢視相應vp裡執行的是那個執行緒(用vp class去匹配),記錄它的tid,rstcb。
Informix Dynamic Server 2000 Version 9.21.FC7 -- On-Line -- Up 3 days 20:08:
11 -- 3493088 Kbytes
Running threads:
tid tcb rstcb prty status vp-class
name
35 7000000a22b4028 0 4 running 3cpu
kaio
52 7000000a2710028 0 4 running 4cpu
kaio
56 7000000a2802028 0 4 running 6cpu
kaio
382844 7000000d81cee18 7000000a16e14b0 2 running 5cpu
sqlexec
386225 7000000c8730190 7000000a16c7650 2 running 1cpu
sqlexec
圖 3
4) 用onstat –g ses ses_id檢查session資訊(用tid,rstcb去匹配),可以用shell將所有的session詳細資訊都寫入到檔案中,再在檔案中搜尋tid或rstcb。
Informix Dynamic Server 2000 Version 9.21.FC7 -- On-Line -- Up 3 days 20:11:
29 -- 3493088 Kbytes
session #RSAM total used
id user tty pid hostname threads memory memory
377298 cics - 65720 S1SDYY 1 3284992 3156424
tid name rstcb flags curstk status
382844 sqlexec 7000000a16e14b0 Y--P--- 2816 7000000a16e14b0cond wait(ne
tnorm)
Memory pools count 1
name class addr totalsize freesize #allocfrag #freefrag
377298 V 7000000d8133040 3284992 128568 4927 66
name free used name free used
overhead 0 3248 mtmisc 0 1496
scb 0 200 opentable 0 423176
filetable 0 40432 ru 0 328
blobio 0 9192 log 0 4216
temprec 0 10104 keys 0 24912
ralloc 0 2211752 gentcb 0 1776
ostcb 0 3448 sort 0 104
sqscb 0 91784 sql 0 72
rdahead 0 1120 hashfiletab 0 552
osenv 0 2408 buft_buffer 0 139128
sqtcb 0 33992 fragman 0 151496
shmblklist 0 1488
Sess SQL Current Iso Lock SQL ISAM F.E.
Id Stmt type Database Lvl Mode ERR ERR Vers
377298 - sdboss DR Wait 10 0 0 9.03
Last parsed SQL statement :
select vc_prodname from yx_pp_prod where int_prodid = ?
7168 byte(s) of memory is allocated from the sscpool
圖4
如果監控到某個session佔用系統資源過多,決定要中止該session時,使用onstat –g ses (session id)檢視client端的pid,首先考慮中止相應的client應用程式,如果失敗使用kill命令中止client端程式,如果還失敗使用onmode –z (session id)中止該session。
Informix Dynamic Server 2000 Version 9.21.FC7 -- On-Line -- Up 3 days 20:09:
50 -- 3493088 Kbytes
session #RSAM total used
id user tty pid hostname threads memory memory
380767 informix - 0 - 0 12288 11240
380766 billadm - 51296 s2sd_svc 1 106496 98432
380764 billadm - 49068 s2sd_svc 1 102400 96920
380738 billadm - 58844 s2sd_svc 1 143360 85576
380714 billadm - 57098 s2sd_svc 1 151552 84312
380661 billadm - 56326 s2sd_svc 1 184320 146304
380505 cics - 58196 S2SDYY 1 126976 91560
380503 cics - 81138 S2SDYY 1 184320 182904
380502 cics - 31242 S2SDYY 1 2228224 2149256
380500 cics - 50182 S2SDYY 1 1654784 1644072
380499 cics - 79292 S2SDYY 1 671744 634600
380399 cics - 56446 S1SDYY 1 2260992 2243024
380343 cics - 46380 S1SDYY 1 118784 80520
380326 cics - 65994 S1SDYY 1 2342912 2285824
380279 cics - 21972 S2SDYY 1 589824 549560
380276 cics - 79814 S2SDYY 1 905216 876624
380275 cics - 25926 S2SDYY 1 667648 641392
380274 cics - 48294 S2SDYY 1 2203648 2176776
圖5
4.4 定期檢查資料庫
根據“3 使用SMI”中提供的方法,定期執行相關的SQL語句檢查資料庫。下列原因都會造成系統執行效率低:
r dbspace,chunk的I/O不均勻。考慮重新分佈磁碟空間。
r 表的擴充套件塊過多。考慮調整extent size,並重建表。
r 表空間分配很大,但空閒的較多。考慮重建表。
r 索引層數過多:大於4層,或表的記錄數不多但索引層數大於3層。考慮重建索引。
r 索引的唯一性差。考慮重新設計索引。
r 表的順序掃描過多。檢查應用,考慮重新設計索引
5 效能最佳化
對於本章的操作,設計到資料變更的建議操作之前都做0級備份,用於發生異常情況時恢復。要修改onconfig檔案的,建議備份舊檔案。
5.1 表擴充套件塊過多
如果透過“3.4表擴充套件塊情況”檢查出表擴充套件塊較多,則需要重新計算合理的extent size,並重建表。具體操作步驟如下:
5.1.1 方式一 unload,load
1. 對資料庫做0級備份,用於發生異常情況時恢復
2. 編寫新表建表檔案
執行
dbschema –d database –t table_name –ss > cre_table.sql
將建表的SQL輸出到cre_table.sql檔案中,做如下修改:
r 設定合理的extent size, next extent size,建議以一張表只有一個extent。
3. 記錄對舊錶資訊,用於檢查新、舊錶的一致性
透過SELECT COUNT(*),或對某個欄位做SUM,或抽查某些記錄來保證新、舊錶記錄的一致性
4. 用unload備份舊錶資料
UNLOAD TO FILE SELECT * FROM old_tale
5. 刪除舊錶
DROP TABLE old_table
6. 用cre_table.sql檔案建立新表
7. 用load匯入資料到新表
LOAD FROM file INSERT INTO new_table
8. 檢查新、舊錶的一致性
透過SELECT COUNT(*),或對某個欄位做SUM,或抽查某些記錄來保證新、舊錶記錄的一致性
5.1.2 方式二 從舊錶查詢插入到新表
1. 對資料庫做0級備份,用於發生異常情況時恢復
2. 將舊錶該名
RENAME TABLE new_table TO old_table
3. 編寫新表建表檔案
執行
dbschema –d database –t table_name –ss > cre_table.sql
將建表的SQL輸出到cre_table.sql檔案中,做如下修改:
r 為提高insert資料的速度,將表修改為RAW方式。RAW方式的表為非日誌記錄,不能有索引或參考約束但可以對其進行更新,使用此型別表來快速裝入資料。
ALTER TABLE new_table TYPE (RAW)
r 建表時不建立主鍵和索引
r 設定合理的extent size, next extent size,建議以一張表只有一個extent。
r 為減少插入資料時鎖的數量,可以將表設為頁鎖,插入資料後再修改回設計的值。
ALTER TABLE new_talbe MODIFY LOCK MODE (PAGE)
4. 匯入資料
INSERT INTO new_table SELECT * FROM old_table
注意檢查資料庫空間是否足夠
5. 將新表改為STANDARD方式
ALTER TABLE new_table TYPE (STANDARD)
6. 建立主鍵、索引
SET PDQPRIORITY 60
CREATE INDEX index_name ON table_name(column)
SET PDQPRIORITY 0
7. 檢查新、舊錶的一致性
透過SELECT COUNT(*),或對某個欄位做SUM,或抽查某些記錄來保證新、舊錶記錄的一致性
8. 用unload備份舊錶資料
UNLOAD TO FILE SELECT * FROM old_table
9. 刪除舊錶
DROP TABLE old_table
5.2 索引層數過多
如果透過“3.5索引層數”檢查出索引層數過多,則需要重新建立表。具體操作步驟如下:
先刪除舊索引
DROP INDEX index_name
再建立新索引
CREATE INDEX index_name ON table_name(column)
5.3 索引唯一性低如果透過“3.8索引唯一性”檢查出索引層唯一性較低,則需要檢查應用,使用複合索引來替換原來的索引,複合索引結合了重複程度很高的列與唯一性比較高的列。重新建立表的步驟參見“5.2索引層數過多”。
5.4 表儲存空間分佈不合理
如果應為表儲存空間分佈不合理導致某塊硬碟I/O較高,造成系統瓶頸需要重新對錶空間進行分配。
如果要重建表的步驟可以參考“5.1表擴充套件塊過多”,儲存分配的SQL參見《IBM Informix Guide to SQL- Syntax》中“CREATE TABLE”儲存選項部分。
如果不重建表,修改儲存分配的SQL參見《IBM Informix Guide to SQL- Syntax》中“ALTER FRAGMENT”部分。
5.5 dbspace I/O 較高
如果透過“3.2 dbspace I/O”檢查出某個dbspace I/O過高,則需要檢查dbspace的劃分是否合理,如果需要重新劃分表在dbspace中的儲存參見“5.4表儲存空間分佈不合理”
5.6 table I/O較高
如果透過“3.5 表 I/O”檢查出某個表I/O過高,則需要檢查應用系統設計上是否該表就是需要訪問頻繁的表,如果不是則需要檢查應用程式。
5.7 虛擬段過多
共享記憶體的虛擬段包括:共享記憶體內部表,大緩衝區,會話區,執行緒區,資料分佈快取記憶體,字典快取記憶體,SPL例程快取記憶體,SQL例程快取記憶體,排序池,全域性池。
如果透過onstat –g seg檢查發現虛擬段多於3個,建議修改onconfig檔案中SHMVIRTSIZE、SHMADD引數,最好保證虛擬段為1-2個。修改引數後需要重新Informix。
如果在檢查了應用後,發現對虛擬段的需求仍然很大,建議增加實體記憶體或將部分應用移出該informix instance。
5.8 dbspace已使用超過了90%,
如果透過“3.1 dbspace使用情況”檢查發現dbspace使用超過了90%,就需要往該dbspace中新增chunk。使用命令
onspaces -a
5.9 表空間分配多,但使用的較少
如果透過“3.6 表空間的使用情況”檢查發現表空間分配多,但使用的較少,建議重建該表。步驟參見“5.1表擴充套件塊過多”
5.10 修改tempdbs
可以將原來1,2個tempdbs調整到4個,原來資料庫空間平均劃分。
使用
onsapces –d
刪除原來的tempdbs
使用
onspaces -c { -d
新增新的tempdbs
並修改onconfig檔案中DBSPACETEMP引數,需要重啟Informix資料庫
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183736/viewspace-666479/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Informix Dynamic Server的安裝(轉)ORMServer
- standby維護命令手冊(轉)
- 【轉】Oracle資料庫日常維護手冊Oracle資料庫
- Informix Dynamic Server 使用者介面工具入門ORMServer
- DB2維護手冊DB2
- Oracle DBA 日常維護手冊Oracle
- IDS(Informix Dynamic Server)的基本概念總結ORMServer
- 【轉載】SQL Server 維護SQLServer
- 轉:Oracle日常維護 指導手冊(UT斯達康公司)Oracle
- [zt] Logical standby維護命令手冊
- Oracle DataGuard 常用維護命令參考手冊 [轉載記錄]Oracle
- Oracle DataGuard 常用維護命令參考手冊Oracle
- PostgreSQL學習手冊(資料庫維護)SQL資料庫
- Oracle資料庫日常維護手冊 (zt)Oracle資料庫
- Informix_on_line資料庫維護技巧ORM資料庫
- UT 資料庫日常維護指導手冊資料庫
- 透過 Informix Dynamic Server 10.0 利用 Linux 的特性(來自IBM)ORMServerLinuxIBM
- ERP系統日常維護手冊-中國移動
- 監控和估計 Informix Dynamic Server 中邏輯日誌的使用情況ORMServer
- Informix Online資料庫日常管理及維護ORM資料庫
- 使用RMAN執行維護操作——RMAN使用者手冊
- Sql Server系列:索引維護SQLServer索引
- Hbase運維手冊運維
- redis運維手冊Redis運維
- 自我保護 菜鳥系統安全自檢手冊(轉)
- Oracle VM Server安裝手冊OracleServer
- iptables中文手冊(轉)
- 【轉】ORACLE CRS日常維護命令Oracle
- 【轉】Oracle分割槽表維護Oracle
- JBOSS維護經驗(轉載)
- Solaris 10 系統維護(轉)
- RedHat Advance Server上安裝Oracle 9204 RAC參考手冊(轉)RedhatServerOracle
- oracle函式手冊(轉)Oracle函式
- aptitude 簡明手冊(轉)APT
- RPM命令手冊 (轉)
- ERP裝置維護系統——改善維護工作的法寶(轉)
- 【轉】Oracle RAC日常基本維護命令Oracle
- Debian 維護工具之 Dpkg(轉)