數據庫性能調優的一些小方面:
1.1 性能指標
數據庫性能一般用兩個方面的指標來衡量:響應時間和吞吐量。響應越快,吞吐量越大,數據庫性能越好。響應時間和吞吐量有些情況下不能一起得到改善。 1.2 調優級別
對Sybase數據庫性能調優,可以從四個方面進行:
一) 操作系統級:對網絡性能、操作系統參數、硬件性能等作改進。
二) SQL Server級:調整存取方法,改善內存管理和鎖管理等。
三) 數據庫設計級:采用降范式設計,合理設計索引,分布存放數據等。
四) 應用程序級:采用高效SQL語句,合理安排事務,應用游標,處理鎖。
本文對第一、第三、第四方面的內容不做討論,第二方面提到的概念只適用於Sybase數據庫。
1.3 調優工具
在分析Sybase數據庫的性能時,要用到一些數據庫系統本身提供的性能調優工具,包括幾個系統存儲過程:
名稱 功能簡要介紹
sp_sysmon 企業級系統性能報告工具
sp_lock 查看鎖的情況
sp_who 查看線程的活動情況
sp_procqmode 存儲過程的查詢處理模式
sp_configure 配置SQL Server系統級參數
sp_estspace 估計創建一個表需要的空間和時間
sp_spaceused 估計表的總行數及表和索引占用的空間
sp_monitor 監視CPU、I/O的統計活動情況
在利用isql等一些工具時,還可以設置查詢會話中的幾個選項,來顯示SQL語句執行時的各種統計分析結果:
指令 On 的含義
set noexec on/off 分析SQL語句後,還要執行
set statistics io on/off 統計SQL執行所需I/O
set statistics time on/off 統計SQL語句執行耗時
set showplan on/off 顯示查詢計劃
1.4 sp_sysmon 的使用
企業級性能報告工具、系統存儲過程 sp_sysmon 的使用方法:
在isql 下,首先輸入 sp_sysmon 'begin_sample' 啟動一個報告采樣過一段時間後,再輸入 sp_sysmon 'end_sample' 結束上次報告采樣
或者緊跟一參數 sp_sysmon 'end_sample', "dcache" 結束上次報告采樣, 但只顯示數據緩沖(Data Cache Management)這一部分的情況。
能替換dcache的可選參數如下表所示:
參數 參數全稱,內容范圍解釋
Dcache Data Cache Management,數據緩沖
Kernel Kernel Utilization,有關引擎、網絡和I/O等情況
Wpm Worker Process Management
Parallel Parallel Query Management
Taskmgmt Task Management
Appmgmt Application Management
Esp ESP Management
Housekeeper Housekeeper Task Activity
Monaccess Monitor Access to Executing SQL
Xactsum Transaction Profile
Xactmgmt Transaction Management
Indexmgmt Index Management,索引管理
Mdcache Metadata Cache Management
Locks Lock Management,鎖管理
Pcache Procedure Cache Management
Memory Memory Management
Recovery Recovery Management
Diskio DiskI/OManagement,磁盤I/O管理
Netio NetworkI/OManagement
1.5
用sp_sysmon可以得到數據庫系統的性能基准報告,但要在比較穩定的狀態下產生,方可作為參考和對照的依據。
1.6 理解存儲方法
只有清楚數據庫存儲數據的底層細節,如數據頁、索引頁的物理結構,每一行的大小計算,不同類型列占用的寬度等等問題,才能對各種調優措施有個深入領會。關於這個問題,比較復雜和細致,請自行參閱有關書籍。
一般地,對於更改數據的操作,要盡量促進數據庫進行直接更新( Direct Updates ),所以要遵守以下幾條原則:
1)除非必要,避免使用允許null值的列和可變長度的列。
2)如果varchar 和 varbinary 列填充得比較滿,毫不猶豫轉成 char 和 binary 列。對於建表時指定的頁填充率(page fillfactor)參數,要權衡確定數值大小。一般:小值,適合於有許多隨機插入的表,該表的數據經常被刪除,又經常被增加;大值,適合於大多數的數據被增加到表末尾,如客票系統的售票存根和退票存根表。
2 SQL Server級的調優
2.1 管理共享內存
數據庫性能優化的首要方面是最優管理內存。數據庫占用的共享內存分成數據緩沖(data cache)、存儲過程緩沖(Procedure cache)等幾塊。在isql 下使用 sp_configure 'cache' 可以看到存儲過程緩沖所占百分比(procedure cache percent),整個數據緩沖大小(total data cache size) 等參數。
2.1.1 存儲過程緩沖(Procedure cache)
存儲過程緩沖保持以下對象的查詢計劃:
Procedures :存儲過程
Triggers :觸發器
VIEws :視圖
Rules :規則
Defaults :缺省
Cursors :游標
存儲過程不可重入,意即每個並發用戶調用都會在內存中產生一個拷貝。
Procedure, triggers, and vIEws 當它們被裝載到procedure cache中時,被查詢優化器優化,建立查詢計劃。如果存儲過程在緩沖中,被調用時就不需要重新編譯。如果procedure cache太小,存儲過程就會經常被其他調入內存的存儲過程沖洗掉,當再次被調用時,存儲過程又被調入內存,再重新編譯,用戶請求因此不得不等待。最嚴重的情況,如果procedure cache不夠,存儲過程甚至都不能運行。所以在內存足夠的情況下,procedure cache percent 參數盡可能大一些。
2.1.2 數據緩沖(Data Cache)
數據緩沖用來緩存數據頁和索引頁,是除去存儲過程緩沖,系統其他占用的緩沖外的剩余內存空間。通過給服務器增加物理內存擴大數據緩沖,是最有效的方法。當然,如果不能加內存,就只能通過減少存儲過程緩沖的比例等方法來擴大數據緩沖了。通過 sp_configure "extentI/Obuffers", 20(可調) 命令,在Data Cache中保留一些頁專用於創建索引時使用,可以顯著提高創建索引的性能。但要注意每開辟一個緩沖占用16K 字節的系統內存。
2.1.3 命名緩沖
通過如下的命令:
1> sp_helpcache
2> go
查看某客票數據庫中命名緩沖,得到的結果如下:
Cache Name Config Size Run Size Overhead
------------------------ ------------- ---------- ----------
DS30_Tran_Log 20.00 Mb 20.00 Mb 2.05 Mb
Systemtable 20.00 Mb 20.00 Mb 2.05 Mb
default data cache 0.00 Mb 4462.86 Mb 464.97 Mb
left_base_center 16.00 Mb 16.00 Mb 1.57 Mb
price_cache 8.00 Mb 8.00 Mb 0.85 Mb
可以看出有4個命名緩沖,分別綁定客票系統的應用日志表、一些重要且常用的系統表、余票表、票價系列表,另外1個是缺省數據緩沖。這種配置還不是最合理,應該進一步把Systemtable這個命名緩沖細分成很多個,每一個單獨存放一張系統表。