INFORMIX的監控和管理命令

来源: 作者: 2006-04-02 出处:pcdog.com

access  spring  安全  

            INFORMIX的監控和管理命令 
              作者: springwind  

監控ONLINE系統動情況的工具主要有以下三類: 
?; 系統監控接口(SMI) 
?; tbstat 
?; tbcheck 

一、 系統監控接口(SMI): 
  我們主要通過SQL命令操作online的內部數據庫sysmaster中的內部表/結構,來獲取有關的維護信息。Sysmaster是在online初次初始化時,系統自動創建的。它實際主要存儲了一些數據結構,而不是真正的表。使用SMI有如下限制: 
?; 不能對SMI中的表加鎖或使用隔離級別。 
?; 不允許使用insert,delete,update等語句(只讀) 
?; 不能使用dbschema,dbexport等命令 
?; 使用select rowid語句將會產生不可預料的結果 
主要的SMI表有: 
sysdatabases:online中的數據庫信息 
systabnames:某數據庫中所有表的信息 
syslogs:邏輯日志信息 
sysdbspaces:數據庫信息 
syschunks,syslocks等 
例1:顯示處脫機(offline)狀態的chunk的序號和所在數據庫空間 
Select chknum,dbsnum from syschunks where is_offline=1 or misline=! 
例二:顯示滿chunk的信息 
Select chknum,dbsnum from syschunks where nfree=0 
二、 TBSTAT 
?; 列出當前時刻的信息(實際也是讀取SMI表) 
?; 不需要磁盤I/O 
?; 不需要鎖等系統資源,因此不會影響系統性能 

用法: tbstat [-abcdklmpstuzBDFPRX] [-r seconds] [-o file] [infile] 

  -a   print all info (options: bcdklmpstu) 
  -b   print buffers(緩沖區) 
  -c   print configuration file(配置文件) 
  -d   print dbspaces and chunks(dbspace和chunk) 
  -k   print locks(鎖) 
  -l   print logging(日志) 
  -m   print message log(消息日志) 
  -p   print profile(profile文件) 
  -s   print latches(門閘) 
  -t   print tblspaces(表空間) 
  -u   print users(用戶) 
  -z   zero profile counts 
  -B   print all buffers 
  -D   print dbspaces and detailed chunk stats 
  -F   print page flushers(頁刷新進程) 
  -P   print profile, including BIGreads 
  -R   print LRU queues(LRU隊列) 
  -X   print entire list of sharers and waiters for buffers 
  -r   repeat options every n seconds (default: 5) 
  -o   put shared memory into specified file (default: tbstat.out) 
infile use infile to obtain shared memory information 

三、 幾個常用的tbstat選項: 
?; tbstat -m :顯示消息日志的最20行. 
消息日志的內容包括: 
1)、檢查點信息 
2)、讀寫錯誤信息 
3)、ONLINE模式轉換信息 
4)、長事務 
5)、日志文件滿(LOG FILE FULL 
若想顯示完整信息,可直接編譯消息日志文件. 
?; Tbstat -d:磁盤空間的使用情況,包括DBSPACE和CHUNK的信息 
例:RSAM Version 5.03.UC1  -- On-Line -- Up 09:45:41 -- 816 Kbytes 

Dbspaces 
address number  flags  fchunk  nchunks flags owner  name 
8040a244 1    1    1    1   N   informix rootdbs 
1 active, 8 total 

Chunks 
address chk/dbs offset  size   free   bpages  flags pathname 
80409d84 1  1  0  300000  231871      PO- /dev/rdata 
1 active, 8 total               
其中的FREE項,顯示了該CHUNK的空閑空間大小(Kbytes). 
?; Tbstat -l :日志文件情況 
Physical Logging 
Buffer bufused bufsize numpages numwrits pages/io 
 P-2 0    16    0    0    0.00 
   phybegin physize phypos  phyused %used 
   101782  15000  960   0    0.00 

Logical Logging 
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io 
 L-2 0    16    1    1    1  1.0    1.0 

address number  flags  uniqid  begin    size   used  %used 
8042de94 1    U---C-L 1    10521a    7500   630   8.40 
8042deb0 2    F------ 0    106f66    7500    0   0.00 
8042decc 3    F------ 0    108cb2    7500    0   0.00 
8042dee8 4    F------ 0    10a9fe    7500    0   0.00 
8042df04 5    F------ 0    10c74a    7500    0   0.00 
8042df20 6    F------ 0    10e496    7500    0   0.00 
                               
其中:%USED: 使用百分比 
FLAGS字段的含義: 
F: 空閑 B:已備份 C: 正在接收事物記錄 
U: 正在使用 A: 新增日志 L: 包含最一個檢查點 
?; Tbstat - u:ONLINE的用戶情況 
Users 
address flags  pid   user   tty   wait  tout locks nreads  nwrites 
804019f4 ------D 329   root   console 0    0  0   179   2 
80401a64 ------D 0    root   console 0    0  0   0    0 
80401ad4 ------F 330   root       0    0  0   0    0 
3 active, 20 total 

Transactions 
address flags user   locks log begin isolation retrys coordinator 
804022b4 A---- 804019f4 0   0     NOTRANS  0 
804028d8 A---- 80401a64 0   0     NOTRANS  0 
2 active, 20 total   
其中:flages字段的含義: 
第一列:(S:等待mutex;Y:等待條件;L:等待鎖;B:等待緩沖區; 
      C:等待檢查點;X:長事務清理;G:等待長緩沖寫;T:等待事務) 
第二列:(*:事務執行時,發生I/O錯誤) 
第三列:(A:正在備份;B:操作已被記錄在日志中;P:分布處理已準備好;   
      C:正在提交;R:正在回滾) 
第四列:(P:會話的主線索) 
第五列:(R:在read rsam 調用中;X:進程在關鍵分區) 
第七列:(M:特殊監控;D:特殊線索;C:清理線索;F:特殊清頁進程; 
       B:特殊B+樹清頁線索) 
?; Tbstat -k :用戶持有鎖的情況 
鎖按照粒度分為6種: 庫鎖、表鎖、頁鎖、行鎖、字節鎖、鍵鎖 
字節鎖:更新包含有VARCHAR類型的行時,加在該行上的鎖。 
鍵鎖:用索引樹上的鎖。一般在相應字節上加刪除標志。 
這幾種鎖的識別如下: 
    TYPE  TBLSNUM  ROWID   SIZE   
庫鎖  HDR+X  1000002   205     0   
表鎖       100000e   0      0 
頁鎖             100      0 
行鎖             101   
字節鎖  HDR+B               909 
鍵鎖             很大的16進制數 
鎖的生命期:1、不使用事務時,操作完成即會釋放對應的鎖; 
2、 若使用事務,鎖將伴隨整個事務。(即隨這COMMIT WORK或ROLLBACK WORK而釋放)   
(**鎖的幾種類型:共享鎖(SHARE),排它鎖(EXCLUSIVE),可升級鎖**) 
?; tbstat -p : 顯示系統資源狀況(是否充分) 
Profile 
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached 
181  199   358   49.44  7   8    2    0.00 

isamtot open start  read  write rewrite delete  commit  rollbk 
3   1   1   0   0   0   0    1    0 

ovtbls ovlock ovuser  ovbuff  usercpu syscpu  numckpts flushes 
0    0    0    0    0.00   0.00   2    239 

bufwaits lokwaits lockreqs deadlks dltouts lchwaits ckpwaits compress 
0    0    0    0    0    0    0    0   
OVTBLS:指示TBLSPACE值不夠 ,TBLSPACES值應增大 
OVLOCK:鎖溢出  LOCKS應增大 
OVUSER:用戶表資源不夠  USERS 
OVBUF:緩沖區資源不夠   BUFFERS 
以上數字若持續增加,表明相應參數值應調整 
DEADLOCKS:檢測到的死鎖數 
DLTOUTS:網絡超時死鎖  
DEADLOCK_TIMEOUT:一般為60秒,若增大此數字,可以減少死鎖數,但會增加響應時間,用戶看來性能更差;若減少此數字,死鎖數可能會增大,但會減少響應時間,在用戶看來,響應時間變快了。 

四、 ONCHECK: 
?; 定位並修復數據與索引的不一致 
?; 檢查磁盤上的數據結構 
?; 顯示不同數據結構的報告 
?; 某些選項可能回在它所涉及的表上家一個共享鎖 
用法: tbcheck [-clist] [-plist] [-qny] 
    [ { database[:[owner.]table] | TBLSpace number | Chunk number } 
      { rowid | page number } ] 

-c   - check(檢查) 
  r  - reserved pages(保留頁) 
  e  - TBLSpace extents and chunk extents 
  c  - database catalogs(目錄) 
  i  - table indexes(表的索引) 
  I  - table indexes and rowids in index(表的索引和索引的rowid) 
  d  - TBLSpace data rows including bitmaps(表空間的數據行包括位圖) 
  D  - TBLSpace data rows including bitmaps, remainder pages and blobs 
                      
-p   - print(顯示) 
  r  - reserved pages (-cr) (保留頁) 
  e  - extents report (-ce)(extent) 
  c  - catalog report (-cc)(目錄) 
  k  - keys in index (-ci)(索引的鍵值) 
  K  - keys and rowids in index (-cI) 
  l  - leaf node keys only (-ci) 
  L  - leaf node keys and rowids (-cI) 
  d  - TBLSpace data rows (-cd) 
  D  - TBLSpace data rows including bitmaps, remainder pages and blobs (-cD) 
  t  - TBLSpace report 
  T  - TBLSpace disk utilization report 
  p  - dump page for the given [table and rowid | TBLSpace and page number] 
  P  - dump page for the given chunk number and page number 
  B  - BLOBSpace utilization for given table(s) [database:[owner.]]table 

-q   - quiet mode - print only error messages 
-n   - answer NO to all questions 
-y   - answer YES to all questions 

五、 幾個主要的tbcheck選項: 
?; TBCHECK -PT  DATABASE:TABLE 
產生有關TBLSPACE的報告。包括EXTENT和空間使用信息。信息的輸出來自TBLSPACE TBLSPACE,這是一個特殊的TBLSPACE,用來跟蹤ONLINE創建的數據庫,是根DBSPACE中的第二個TBLSPACE,其TBLSNUM為1000002。這個TBLSPACE中的每行保存一個數據庫的信息。 
?; TBCHECK -Cd DATABASE:TABLE  
測試一個表空間的數據。它從表空間中讀取所有頁做一致性檢查,並檢測位圖也以確認該頁被正確映射。它所做的工作包括:確認數據的有效性,對特殊數據做相應標志(如BLOB頁,剩余頁等)。 
?; TBCHECK -Ci DATABASE:TABLE  
測試表上的索引,比如是否所有的ROWID都指向表中的有效行,必要時,重建SYSINDEXES信息。它所做的工作包括:驗証索引是否有效,重建被損壞的索引,並對索引樹重新做相應調整。 
索引策略: 
應加索引的字段:用連接(JOIN)的字段,用來過濾的字段(在WHERE條件中使用的字段,稱為過濾器),用排序的字段(ORDER BY)。 
不應加索引的字段:有高重復值的字段 
另外,可以用主鍵限制索引個數,加復合索引來避免重復,用聚簇索引加快索引速度。 
六、其它重要的工具: 
?; UPDATE STATISTICS  [LOW | MEDIUM | HIGH] 
此語句的三個主要作用:更新內部表;產生數據分布;優化存儲過程 
應定期使用 
?; tbinit 
用初始化數據庫共享內存。每次開機都必須執行此命令。一般將它放在/etc/rc2.d目錄下的一個自引導文件中。  
例如:當以應用軟件注冊時,系統提示: 
DBERR 529/C-ISAM 123 [Open Database] 
使用finderr查529錯誤,提示: 
-529  Cannot attach to shared memory. {不能使用共享內存} 
此時,使用tbinit命令將數據庫共享內存進行初始化,系統恢復正常。 
?; tbmode -sy| tbmode -ky 
用關閉數據庫共享內存。為了數據的安全,每次關機前都必須執行此命令。為了簡化操作,我們經常將它放在/etc/rc0.d目錄下的一個自引導文件中,讓系統進入多用戶時自動來執行此文件。  
?; finderr 
用來查詢數據庫的錯誤。當系統出現數據庫錯誤時,系統處了給你簡單的出錯提示外,還給出一個錯誤號。你可以使用此命令對這種錯誤進行深入的分析,然針對不同的錯誤進行相應的處理。 
例如:當你在超級用戶root下對儲蓄數據庫bankstar進行操作時,系統提示: 
387: No connect permission. 
111: ISAM error: no record found. 
意思是:系統出現387錯誤,錯誤的原因是:沒有connect權限。 
原因分析: 
操作數據庫至少需要CONNECT權限。解決如下:informix用戶注冊,執行如下SQL語句:grant connect to root 
?; dbaccess(略)  
 

上一篇:Informix SQL语句详解(1)
下一篇:informix-connect 2.70设置