查找問題過程是痛苦的,解決完問題是快樂!
兄弟幫助一個公司開發了一個旅游網站(asp.net+sqlsever2005),一直還算穩定,但是最近網站卻慢的可以,讓人頭疼。登錄服務器,進入任務管理器,發現數據庫文件sql.exe 文件占用內存很大,於是兄弟就限制了sqlserver2005 的內存大小,具體如下。
1、登錄SQL SERVER Management Studio;
2、對象資源管理中第一項上單擊右鍵,選擇屬性,切換內存選項卡如下圖;
3、在AWE分配內存上打勾,解釋一下:AWE地址窗口化擴展插件,允許在 32 位版本的 Microsoft Windows 操作系統上使用超過 4 GB 的物理內存,最多可支持 64 GB 的物理內存;在最大服務器內存中輸入合適的數據,那沒多大的數據合適呢?建議輸入服務器的物理內容一半多一些比較好;在每次查詢占用的最小內存內輸入一個數據,點擊確定就ok了。
通過上述設置果然,sql.exe的內存大幅度下降,服務器很流暢,但是網站的速度並沒有提高,頭疼啊。通過查找發現sql.exe 占用CPU非常大,達到60%-70%,並且始終居高不下。哈哈發現了問題就不怕解決問題,於是乎我開始對數據庫優化來降低cpu使用率。
1、既然CPU很高,我就要找到那些語句占用cpu較高,然后好進行優化,編寫如下語句,通過語句查找確實發現了一些sql語句需要優化,而且還發現了一個影響速度的原因,就是有些表缺少索引;查找這些占用CPU的SQL語句,我還用到了sqlserver2005的自帶的性能優化工具SQL Server Profiler,進行分析查找。
SELECT TOP 10 [session_id],[request_id],[start_time] AS '開始時間',[status] AS '狀態',[command] AS '命令',dest.[text] AS 'sql語句',
B_NAME([database_id]) AS '數據庫名',[blocking_session_id] AS '正在阻塞其他會話的會話ID',[wait_type] AS '等待資源類型',[wait_time] AS '等待時間',
[wait_resource] AS '等待的資源',[reads] AS '物理讀次數',[writes] AS '寫次數',[logical_reads] AS '邏輯讀次數',[row_count] AS '返回結果行數'FROM
sys.[dm_exec_requests] AS der CROSS APPLY sys.dm_exec_sql_text](der.[sql_handle]) AS dest WHERE [session_id]>50 AND
DB_NAME(der.[database_id])='數據庫名稱' ORDER BY [cpu_time] DESC
ok我對語句進行了優化,又對沒有索引的表建立索引(索引對查找數據的速度影響很大,所以大家一定要對所有表,經常查詢的字段都要添加索引),發現CPU雖然下降了但是很不穩定以下60%,一下10%,網頁打開依然很慢,怎么辦呢?痛苦的爭戰中...打開window系統自帶的事件查看器--》應用程序發現大量的數據庫登錄失敗日志,點開查看發現“用戶 'NT AUTHORITY\SYSTEM' 登錄失敗。 [客戶端: <local machine>]”,如下圖。
從網上查找了好多方法但是問題依然存在,試過N多辦法,最后發現SQL Server Configuration Manager中的一個服務需要‘NT AUTHORITY\SYSTEM’登錄,如下圖,既然找到原因了,那就解決吧,這個服務對我們的網站沒用,所以我把停掉了,服務器一切正常了。