【賽迪網-IT技術報道】概述
Sysmaster 數據庫是 IDS 系統中的一個偽數據庫,它提供關於 IDS 伺服器的共用記憶體結構的資訊,對於監視伺服器的狀態和性能非常有幫助
我將通過一些示例解釋如何使用 IDS 11(代碼號“Cheetah”)中新的 Sysmaster 特性,並討論以下七個 Sysmaster 表:
◆Sysnetclienttype、Sysnetglobal 和 Sysnetworkio,顯示網路狀態
◆Syssqltrace、Syssqltrace_info 和 Syssqltrace_iter,顯示 SQL 配置文件和跟蹤資訊
◆Systhreads,記錄線程和它們的等待統計數據
監視網路活動
有三個新表可以幫助 DBA 監視和跟蹤 IDS 伺服器的用戶和客戶機網路活動。這些表是:
◆Sysnetclienttype,顯示每種客戶機類型的網路活動概況
◆Sysnetglobal,提供系統網路的概況
◆Sysnetworkio,提供系統網路 I/O 的概況
Sysnetclienttype 表顯示可以連接到伺服器的所有客戶機類型,以及在客戶機和伺服器之間生成的網路流量。總會顯示的一個客戶機類型是 sqlexec,這個類型分配給執行查詢、插入、刪除和更新的用戶。隨著時間的推移,會發生更多活動,所以 nc_reads 和 nc_writes 列會反映不斷增加的網路讀寫數量。另一個客戶機類型是 ontape。對於這個類型,當執行備份時,nc_reads 和 nc_writes 列顯示的活動數量會增加。通過使用 Sysnetclienttype 表,可以按照連接伺服器的客戶機類型查看總體網路活動量。
Sysnetglobal 表包含一個記錄,它顯示全局設置和網路讀寫的總數。Sysnetworkio 表按照會話顯示網路 I/O —— 因此,可以在這裡搜尋消耗網路資源最多的會話。net_open_time、net_last_read 和 net_last_write 列包含最近一次網路活動的日期和時間,這些數據採用 Unix 時間格式,所以需要用 dbinfo 函數把它們轉換為人可閱讀的格式。下面的 SQL 語句按照會話顯示最近一次網路活動的日期和時間:
清單1.顯示最近一次網路活動的日期和時間
select
sid,
dbinfo( ‘utc_to_datetime’ , net_open_time ),
-- Date/time session started net connection
dbinfo( ‘utc_to_datetime’ , net_last_read ),
-- Date/time session performed last net read
dbinfo( ‘utc_to_datetime’ , net_last_write )
-- Date/time session performed last net
write from Sysnetworkio;
捕捉和跟蹤SQL語句
最讓興奮的是,有三個新的 Sysmaster 表可以用來在運行 SQL 語句之後捕捉和跟蹤 SQL 語句。要想使用這些表,必須在 ONCONFIG 文件中用 SQLTRACE 參數啟用 SQL 跟蹤特性,或者執行一個新的 dba 函數任務。這三個表是:
◆Syssqltrace,顯示單一 SQL 語句的詳細資訊
◆Syssqltrace_info,包含 SQL 配置文件跟蹤系統的資訊
◆Syssqltrace_iter,列出 SQL 語句迭代器
這些都不是物理表,而是記憶體中的數據,所以在啟用跟蹤時,需要配置存儲跟蹤資訊所用的記憶體量。當填滿這個記憶體空間之後,就丟棄最舊的數據並替換為當前數據。在 ONCONFIG 文件中或通過新的 dba 函數任務啟用跟蹤需要四個參數:
◆Level 是要捕捉的數據的詳細程度;這個參數可以設置為 off、low、med 或 high。默認值是 off,所以如果不啟用跟蹤,就不會捕捉資訊。
◆Ntraces 是跟蹤並存儲在記憶體中的 SQL 語句的最大數量。達到這個數量之後,就會重用記憶體空間。最小數值是 500,最大數值取決於您希望使用的記憶體量。如果設置為 1000,那麼第 1001 個 SQL 語句會重用第一個 SQL 語句的存儲區域。
◆Size 是每個跟蹤緩衝區的最大大小,以 KB 為單位,值的範圍是從 1 到 100。
◆Mode 指定跟蹤是針對所有用戶(global),還是針對一個特定用戶。
ONCONFIG 文件中的設置像下面這樣:
SQLTRACE Level=low,Ntraces=1000,Size=2k,Mode=global
還可以使用新的 dba 函數臨時啟用這個特性,這在調試時非常方便。可以在 ONCONFIG 文件中禁用跟蹤(換句話說,並不永久地啟用它),只在需要時啟用它。這個函數只能在新的 sysadmin 數據庫上使用。下面的示例使用這個新函數啟用跟蹤。
清單2.使用新的 dba 函數臨時啟用跟蹤
database sysadmin;
execute function task (“set sql tracing on”,1000, “2k”, “high”, “global” );
Once turned on, the next 1,000 (or whatever number is specified in Ntraces)
表1. Syssqltrace 列
sql_id 惟一的 SQL 執行 ID
sql_address 語句在代碼塊中的地址
sql_sid 運行 SQL 語句的用戶的數據庫會話 ID
sql_uid 運行 SQL 語句的用戶的用戶 ID
sql_stmttype 語句類型
sql_stmtname 顯示為單詞形式的語句類型
sql_finishtime 完成這個語句的時間(Unix 格式)
sql_begintxtime 開始執行這個語句的時間
sql_runtime 語句的執行時間
sql_pgreads 這個 SQL 語句的磁片讀數量
sql_bfreads 這個 SQL 語句的緩衝區讀數量
sql_rdcache 從緩衝區池讀取頁面的次數的百分比
sql_bfidxreads 索引頁面緩衝區讀數量
sql_pgwrites 寫到磁片的頁面數量
sql_bfwrites 修改並返回給緩衝區池的頁面數量
sql_wrcache 向緩衝區池寫頁面的次數的百分比
sql_lockreq 這個 SQL 語句所需的鎖的總數
sql_lockwaits 這個 SQL 語句等待鎖的次數
sql_lockwttime 在執行這個 SQL 語句期間系統等待鎖的時間
sql_logspace 這個 SQL 語句在邏輯日誌中使用的空間量
sql_sorttotal 為這個語句運行的排序數量
sql_sortdisk 在磁片上運行的排序數量
sql_sortmem 在記憶體中運行的排序數量
sql_executions 這個 SQL 語句運行的次數
sql_totaltime 運行這個語句花費的時間總量
sql_avgtime 運行這個語句花費的時間平均量
sql_maxtime 執行這個 SQL 語句花費的最大時間量
sql_numiowaits 不得不等待 I/O 的次數
sql_avgiowaits 這個 SQL 語句等待 I/O 的時間平均量
sql_totaliowaits 這個 SQL 語句等待 I /O 的時間總量
sql_rowspersec 每秒產生的平均行數
sql_estcost 與這個 SQL 語句相關聯的開銷
sql_estrows 這個 SQL 語句返回的行數的估計值
sql_actualrows 這個 SQL 語句返回的行數
sql_sqlerror SQL 錯誤號
sql_isamerror RSAM/ISAM 錯誤號
sql_isollevel 這個 SQL 語句的隔離級別
sql_sqlmemory 執行這個 SQL 語句所需的字節數
sql_numiterators 這個語句使用的迭代器數量
sql_database 數據庫名
sql_numtables 執行這個 SQL 語句所用的表數量
sql_tablelist 這個 SQL 語句中直接引用的表名的列表
sql_statement 運行的 SQL 語句
|
啟用跟蹤之後,sqltrace 表會捕捉後面 1000 個(或者 Ntraces 中指定的數量)SQL 語句。onstat -g 命令將讀取這個表,顯示配置設置以及跟蹤所捕捉到的所有 SQL 語句。表 1 顯示 Syssqltrace 表的列(見表 1 所示)。
可以通過這個表了解 IDS 伺服器上已經執行的 SQL 語句的詳細資訊。Syssqltrace 表包含 SQL 語句、執行 SQL 所用的資源、運行 SQL 花費的時間、磁片/頁面/緩衝區讀和寫的數量、使用的鎖數量、排序數量和使用的記憶體量。另外,它還包含 IDS 優化器估計的運行這個 SQL 所要花費的時間。這個表非常有意思的一個好處是,可以對比 IDS 優化器估計的返回行數和實際的返回行數(sql_estrows 和 sql_actualrows)。如果這兩個數值差異很大,就說明 IDS 優化器並不掌握關於表中行和索引數量的正確的統計數據。這意味著需要運行 update statistics,從而向優化器提供正確的數據。
在進行 IDS 調優時資訊是關鍵因素
在進行監視和調優時,獲得關於 IDS 伺服器及其性能的豐富資訊的能力是一個關鍵因素。IDS 11 中新增的這些 Sysmaster 表可以提供有用的資訊。請在 dbaccess 或 Server Studio 中對這些新表運行一些選擇語句,體會它們所提供的資訊。(責任編輯:盧兆林)