一台執行緩慢CPU偏高的DB伺服器的處理

2021-08-16 13:01:36 字數 1478 閱讀 5884

一台生產環境的 windows server2008 的db伺服器, 資料庫為 sql server2014 (無補丁), 經常發生 cpu 偏高(經常跳到80%,90%, 平均也有 45%左右 )。

配置(虛擬機器):

但奇怪的是這台機基本上沒有使用者訪問, 一天都不到一次, 主要是監控的sql和同步的sql, 一般來說這點sql不足以將資源佔盡。

剩餘記憶體大約只有 100mb .

處理步驟:

1. 將sql server最大記憶體設定為 2000mb, 系統記憶體占用無改善;

2. 重啟sql server服務, 執行速度變快, 但過一段時間會慢下來;

3. 用下面的指令碼查詢sql server所佔記憶體, 大約為 260mb 左右;

--檢視sqlserver占用記憶體  

if cast(substring(@@version,22,4) as int)<2008

select cast(cntr_value/(1024.0) as decimal(12,1)) as sqlservermemorymb

from master.sys.sysperfinfo as s

where counter_name='total server memory (kb)'

else

select cast(physical_memory_in_use_kb/1024.0 as decimal(12,1)) as sqlservermemorymb

from sys.dm_os_process_memory

4. xp_readerrorlog 查錯誤日誌, 有如下關於系統記憶體不足的資訊:

there is insufficient system memory in resource pool 'default' to run this query.
5. 上面的資訊提到了跟資源池有關, 查 default 資源池居然顯示為限制最大記憶體為 25%, 以為找到原因了, 改為 100%, 重啟服務, 還是快不起來。後面仔細看看, 那個資源池設定是禁用的, 所有不會有影響……;

6. 在任務管理器上登出除本人之外的其它所有已斷開使用者( 3個);

7. 安裝sql server2014補丁sp2。

經過 6,7 後,查詢速度變快, 記憶體占用變小(2600mb), cpu在 1%~10% 之間波動。

綜上所述, 6和7為解決問題的關鍵。

由於比較緊急,沒有在6之後立即測速度,但個人感覺6的用處比7要大得多。

伺服器上, 不用了還是登出為好, 僅僅斷開無法釋放記憶體等資源。這對比較差的伺服器來說, 是非常必要的。

後記:後面再觀察, 安裝了補丁也還是有 cpu 過高的情況, 必須登出使用者才能讓cpu降下來。應該是伺服器的配置太低導致。

一台centos伺服器執行多個tomcat

1 進入到tomcat目錄 例如 usr tomcat 命令 cd usr tomcat 2 複製該tomcat並修改名字 命令 cp atomcat tomcat job 將原來tomcat複製並改名成tomcat job 這裡名字可以自己隨便取 3 修改剛剛複製的tomcat中的配置檔案,共三處...

伺服器集群控制僅有一台伺服器執行任務

定時任務 批處理任務 設計不合理的反面教材 曾經使用spring batch批處理框架的tasklet進行批處理任務,使用redis鎖進行併發控制,在任務開始前使用redis的setnx命令往redis中插入值,任務結束後刪除值,任務只有在當前redis中不存在值時才執行啟動。設計不合理之處 存在單...

一台伺服器執行多個MySQL例項

一台伺服器執行多個mysql例項 多例項不同之處 資料目錄 埠 socket檔案 pid檔案 1 安裝mysql 2 備份my.conf 新版本可以不操作這一步 mv etc my.conf etc my.conf.bak vi my.conf mysqld daemonize on 注釋掉這個,因...